JSF找不到包含标识符,模板和cie的组件

时间:2013-07-04 16:04:33

标签: templates jsf rendering updates identifier

编辑:另一种解决方案Updating ui:defined form content from Master template (JSF & Primefaces)

首先,对不起我的英语,我是其中一个该死的单语法语。

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

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

我在页脚中有一个连接形式。我想更新页面 rankMe.xhtml 中呈现的commandButton。此页面定义 template.xhtml 的ui:composition“content”。 当我在命令按钮的页面上时,我没有错误,渲染工作完美。但当我在另一个页面上,如 index.xhtml (也确定了 template.xhtml 的内容)时,Glassfish会抛出此异常,我猜它是完全标准的导致其他内容( rankMe.xhtml )未加载到实际视图中。

如何避免此异常?我可以在所有页面中复制我的命令按钮并隐藏,如果用户不在实际的rankMe.xhtml页面上,但它也不是一个干净的方式。

由于

这里是代码:

template.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>

footer.xhtml:

<h:body>
    <h:form id="formInscription">
          <p:commandButton id="validerButton" update=":formWaitingList" ajax="true"/> 
    </h:form>
</h:body>

的index.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>

1 个答案:

答案 0 :(得分:1)

我想到了两个非常简单的解决方案:
一种解决方案是将您的内容部分包装在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}"/>