1

编辑:另一个解决方案从主模板(JSF 和 Primefaces)更新 ui:定义的表单内容

首先,对不起我的英语,我是这些该死的单语法语中的一员。

我有这个经典错误:javax.faces.FacesException: 找不到标识符为 ":formWaitingList" 的组件引用自 "formInscription:validerButton"

我知道为什么会这样,但我不知道如何解决它。

我在页脚中有一个连接表格。我想更新页面rankMe.xhtml中呈现的 commandButton 。该页面定义了template.xhtml的 ui:composition “内容” 。当我在带有命令按钮的页面上时,我没有错误并且渲染工作完美。但是当我在index.xhtml之类的另一个页面上时(也定义了template.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>

rankMe.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>
4

1 回答 1

1

想到两个非常简单的解决方案:
一个解决方案是将您的内容部分包装在 an 中p:outputPanel并更新它而不是您的formWaitingList

<p:outputPanel id="globalPanel>
  <ui:define  name="content">
        Lorem ipsum ...
  </ui:define>
</p:outputPanel>

第二种解决方案是在同一个footer.xhtml中用不同的值 复制你的p:commandButton两次:rendered

<p:commandButton id="validerButton" update=":formWaitingList" ajax="true" rendered="#{conditionIfYouAreInTheRankMeView}"/>
<p:commandButton id="validerButtonBis" update="otherThingYouWantToUpdateOrEvenNoUpdate" ajax="true" rendered="#{conditionIfYouAreNotInTheRankMeView}"/>
于 2013-07-04T17:05:30.167 回答