jsf和primefaces更新问题

Rob*_*ume 2 jsf primefaces

我有一个有两种形式的JSF页面(下面是伪代码).

第一种形式是针对用户的,具有文本字段和电话号码表,以及用于添加新电话号码的链接.

第二种形式是p:对话框,显示用于向列表添加电话号码的表单.

我的问题是在p:对话框关闭后,我希望列表没有得到更新.如果我将p:dialog标记放在第一个表单中,列表会更新,但有两个单独的表单,因为我需要在单独的操作中验证它们的内容.

我的问题的简短版本:p:对话框有一个attr update ="phonesPanel",但是phonePanel的格式不同; 我该怎么做像update ="personForm.phonesPanel"这样的东西,以便更新不同形式的列表?

<h:form id="personForm">

  <p:messages />

  <h:inputText label="Full Name" value="... />

  <p:commandLink value="Add Phone Number" onclick="dlg.show();" />

  <h:panelGrid id="phonesPanel" columns="1" style="width:100%" >
    <h:dataTable id="phonesTable">
      // ...
    </h:dataTable>
  </h:panelGrid>

</h:form>


<h:form>

  <p:dialog id="dialog" modal="true" widgetVar="dlg">
     <p:messages />
     <h:inputText label="Phone Number" value="... />
     <p:commandButton value="Add Phone Number" update="phonesPanel"   
       actionListener="#{handler.doAddPhoneNumber}" 
       oncomplete="handleLoginRequest(xhr, status, args)"/>  
  </p:dialog>

</h:form>
Run Code Online (Sandbox Code Playgroud)

任何帮助是极大的赞赏!

fra*_*vel 8

您可以做的其他事情是将"prependId"表单属性设置为"false":

<h:form prependId="false">
Run Code Online (Sandbox Code Playgroud)

这样您就不需要使用嵌套ID了,可能会使用:

update="phonesPanel" 
Run Code Online (Sandbox Code Playgroud)


Ako*_*s K 6

我怀疑update ="personForm:phonesPanel"在personForm之前没有":"的情况下工作.这应该是正确的:

update=":personForm:phonesPanel"
Run Code Online (Sandbox Code Playgroud)


Rob*_*ume 5

回答我自己的问题.

答案是:update ="personForm:phonesPanel"

谢谢大家!