>EDIT:另一种解决方案 从主模板更新 ui:定义的表单内容 (JSF & Primefaces(
首先,对不起我的英语,我是这些该死的单声道法语之一。
我有一个经典的错误:javax.faces.FacesException:找不到标识符为":formWaitingList"的组件,该组件引用自"formInscription:validerButton"。
我知道为什么会发生这种情况,但我不知道如何解决。
我在页脚中有一个连接表单。我想更新在页面rankMe.xhtml中呈现的命令按钮。此页面定义了模板.xhtml的 ui:组合"内容"。当我使用命令按钮在页面上时,我没有错误,渲染工作正常。但是当我在另一个像 index.xhtml (也定义模板的内容.xhtml页面上时,Glassfish 会抛出此异常,我想这完全是标准的,因为其他内容 (rankMe.xhtml( 没有加载到实际视图中。
如何避免此异常?我可以在所有页面中复制我的命令按钮,如果用户不在实际的 rankMe.xhtml 页面上,我可以隐藏,但这对我来说也不是一种干净的方式。
谢谢
这里的代码:
模板.xhtml :
<h:body>
<ui:insert name="content" >
</ui:insert>
<ui:insert name="footer" >
<ui:include src="../template/footer.xhtml"></ui:include>
</ui:insert>
</h:body>
页脚.xhtml :
<h:body>
<h:form id="formInscription">
<p:commandButton id="validerButton" update=":formWaitingList" ajax="true"/>
</h:form>
</h:body>
索引.xhtml:
<h:body>
<ui:composition template="/template/template.xhtml">
<ui:define name="content">
Lorem ipsum ...
</ui:define>
</ui:composition>
</h:body>
排名我.xhtml :
<h:body>
<ui:composition template="/template/template.xhtml">
<ui:define id="rankMe" name="content">
<h:form id="formWaitingList">
<h:commandButton id="Join"
rendered="#{connexion.connected}"
value="Join"/>
</h:form>
</ui:define>
</ui:composition>
</h:body>
我想到了两个非常简单的解决方案:
一种解决方案是将您的内容部分包装在p:outputPanel
中并更新它而不是您的formWaitingList
:
<p:outputPanel id="globalPanel>
<ui:define name="content">
Lorem ipsum ...
</ui:define>
</p:outputPanel>
第二种解决方案是在同一页脚中仅复制两次p:commandButton
.xhtml具有不同的rendered
值:
<p:commandButton id="validerButton" update=":formWaitingList" ajax="true" rendered="#{conditionIfYouAreInTheRankMeView}"/>
<p:commandButton id="validerButtonBis" update="otherThingYouWantToUpdateOrEvenNoUpdate" ajax="true" rendered="#{conditionIfYouAreNotInTheRankMeView}"/>