我们在2个单独的文件中有一个主窗口(MainScreen.xhtml)和一个对话框(DialogScreen.xhtml)。
在MainScreen.xhtml中,有一个链接可以调用并打开DialogScreen.xhtml。此外,还有一个名为fieldA的字段。 fieldA的值根据DialogScreen中的选定值进行更新。
MainScreen.xhtml示例:
<h:outputText value="#{bean.fieldA}" id="fieldA"/>
DialogScreen.xhtml示例:
<cf:autoComplete id="someId" autoCompleteList="#{someBean.listItems}">
<p:ajax event="itemSelect" update="someId"/>
</cf:autoComplete>
<p:commandLink id="setFieldA" action="{someBean.someAction}" value="set fieldA"/>
我们尝试了以下但未奏效: 1.在DialogScreen.xhtml更新commandLink:
<p:commandLink id="setFieldA" action="{someBean.someAction}" value="set fieldA"/>
<p:ajax event="itemSelect" update=":fieldA"/>
</p:commandLink>
通过更新MainScreenBean.java中的contextrequest
来更新MainScreen数据 。RequestContext.getCurrentInstance()更新( “:FIELDA”);
上述两种修复都导致错误:找不到fieldA组件。 更改对话框数据时如何更新主表单数据?
答案 0 :(得分:0)
我假设你在两个文件中有两个form
。确保DialogScreen.xhtml
中的对话框设置了appendTo="@(body)"
此属性。它会将html附加到MainScreen.xhtml
页面。如果您的MainScreen.xhtml
有
<h:form id='mainForm'>
<h:outputText value="#{bean.fieldA}" id="fieldA"/>
</h:form>
您可以通过
访问DialogSceen.xhtml
中的该字段
<h:form id="dialogForm">
<p:commandLink id="setFieldA" action="{someBean.someAction}" value="set
fieldA"/>
<p:ajax event="itemSelect" update=":mainForm:fieldA"/>
</p:commandLink>
</h:form>
这意味着您必须使用:formId:componentId 来处理表单之外的任何组件。