2011-03-09 90 views
2

我有一个带有两种形式(下面的伪代码)的JSF页面。jsf和primefaces更新问题

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

第二种形式是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> 

任何帮助,非常感谢!

rob

回答

5

回答我自己的问题。

答案是:更新= “为personForm:phonesPanel”

谢谢大家!

+0

谢谢!有同样的问题 – fredcrs 2012-03-29 17:31:55

8

你可以做的另一件事就是将“prependId”表格属性为“假”:

<h:form prependId="false"> 

这样,您就不需要使用嵌套id和可能使用:

update="phonesPanel" 
6

我怀疑update =“personForm:phonesPanel”在personForm之前没有“:”。 这应该是正确的:

update=":personForm:phonesPanel"