如何从外部更新dataTable中的组件

时间:2012-04-10 09:20:47

标签: jsf datatable components primefaces

我正在使用Primefaces 3.2的JSF 2.1的Mojarra实现。

我的问题大致如下:

<p:dialog id="someDialog">
  ..
  <h:form id="dialogForm">        
    <p:commandLink action=".."update=":someForm:someUIRepeat:someDataTable:someInputTextArea"/> 
  </h:form>
</p:dialog>


<h:form id="someForm">
  <ui:repeat id="someUIRepeat" value=".." ..>
    <p:dataTable id="someDataTable" value=.. >

      <p:column>
        <p:inputTextarea id="someInputTextarea" value=../>
      <p:column>

     .. here go other columns
  <ui:repeat>
</h:form>

问题是,当我在对话框中单击commandLink时,inputTextarea不会更新。但是,如果我在commandLink的更新中​​写这个:   更新= “:someForm:someUIRepeat:someDataTable,:someForm:someUIRepeat:someDataTable:someInputTextArea”

然后整个dataTable也会更新,inputTextarea也会更新,但是在我点击对话框中的commandLink后,其他列中的字段中的值会被删除。

我把dataTable放在ui:repeat中的原因是我需要将dataTable与一个集合的每一行绑定,我认为它与我的问题无关。

我有什么想法可以解决这个问题吗?

提前致谢,

努尔然

1 个答案:

答案 0 :(得分:1)

开始试试这个

在对话框中的onclick="jQuery('#someForm:someButton').click();"添加了<p:commandLink(检查隐藏按钮的确切ID)

update设置为update=":someForm:someUIRepeat:someDataTable"

并添加

<h:commandButton id="someButton" style="display:none">
    <f:ajax execute="@form"></f:ajax>
</h:commandButton>  

<h:form id="someForm">

解释:隐藏按钮的目的是将表单执行(发送其值)到服务器,这样当你调用update时,字段就不会被删除......