更改对话框中的数据时如何更新主窗体?

时间:2017-11-14 02:00:16

标签: jsf primefaces jsf-2

我们在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>
  1. 通过更新MainScreenBean.java中的contextrequest

    来更新MainScreen数据 。

    RequestContext.getCurrentInstance()更新( “:FIELDA”);

  2. 上述两种修复都导致错误:找不到fieldA组件。 更改对话框数据时如何更新主表单数据?

1 个答案:

答案 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 来处理表单之外的任何组件。