当两个页面都包含在一个页面中时,如何从另一个页面中的命令按钮更新一个页面中的Primefaces组件

Kis*_*ash 6 ajax jsf primefaces

我有2页

input.xhtml

<h:form>
    <p:panelGrid>
        <p:row>
            <p:column>
                <h:outputText value="Name : "/>
            </p:column>
            <p:column>
                <p:inputText id="name" value="#{inputBean.name}"/>
            </p:column>
        </p:row>
        <p:row>
            <p:column colspan="2" >
                <p:commandButton action="#{inputBean.buttonAction}" value="Submit"/>
            </p:column>
        </p:row>
    </p:panelGrid>
</h:form>
Run Code Online (Sandbox Code Playgroud)

display.xhtml

<h:form id="form1">
    <h:outputText value="#{inputBean.name}" id="dis123"/>
</h:form>
Run Code Online (Sandbox Code Playgroud)

如果我将它们都包含在如下所示的单个页面中

index.xhtml

<p:accordionPanel widgetVar="main" multiple="true">
    <p:tab title="Input">
        <ui:include src="input.xhtml"/>
    </p:tab>

    <p:tab title="Output">
        <ui:include src="display.xhtml"/>
    </p:tab>
</p:accordionPanel>
Run Code Online (Sandbox Code Playgroud)

我可以update="dis123"从命令按钮调用input.xhtml吗?

Bal*_*usC 17

不,你不能.相对客户端ID update="dis123"基本上在同一个NamingContainer父组件中搜索,在您的情况下<h:form>是第一页.但是,不存在这样的组件.它实际上是在一个不同的NamingContainer父母.您需要提供一个绝对的客户ID,而不是:update=":form1:dis123".

对于初学者来说,一个简单的方法来确定正确的绝对客户端ID,只需查看JSF生成的HTML输出(右键单击,在浏览器中查看源代码),查找所需组件的生成的HTML元素ID,然后为其添加前缀:.

请注意,这一切都与包含无关.将所有代码放在一个页面中时,您会遇到完全相同的问题.

也可以看看: