我有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>
display.xhtml
<h:form id="form1">
<h:outputText value="#{inputBean.name}" id="dis123"/>
</h:form>
如果我将它们都包含在一个页面中,如下所示
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>
我可以通过update="dis123"
中的命令按钮调用input.xhtml
吗?
答案 0 :(得分:16)
update="dis123"
这样的相对客户端ID基本上会搜索同一个NamingContainer
父组件,在您的情况下是第一页的<h:form>
。但是,不存在这样的组件。它实际上是在一个不同的NamingContainer
父母。您需要提供绝对客户端ID:update=":form1:dis123"
。
对于初学者来说,通过查看生成的HTML元素ID,只需查看JSF生成的HTML输出(右键单击,浏览器中的查看源),即可轻松找到正确的绝对客户端ID。所需的组件,然后用:
作为前缀。
请注意,这一切都与包含无关。将所有代码放在一个页面中时,你会遇到完全相同的问题。