ボタンをクリックすると、ある panelGroup を別の panelGroup に置き換える単純なページを作成しています。まず、コード:
<h:body>
<ui:composition template="/elements/templateWithMenu.xhtml">
<ui:define name="content">
<div class="rightContent">
<h:panelGroup id="lol" rendered="#{test.firstStep.booleanValue()}">
<h3>This should disappear</h3>
<h:form id="newPollForm1" rendered="#{test.firstStep.booleanValue()}">
<fieldset>
<h:commandLink value="Next" action="#{test.firstStepCompleted()}" >
<f:ajax execute="@all" render="lol" />
</h:commandLink>
</fieldset>
</h:form>
</h:panelGroup>
<h:panelGroup rendered="#{test.secondStep.booleanValue()}">
Works!
</h:panelGroup>
</div>
</ui:define>
</ui:composition>
</h:body>
バッキング Bean は、単純に firstStep を false に設定し、secondStep を true に設定します。
さて、これを実行してみると、<f:ajax> contains an unknown id 'lol' - cannot locate it in the context of the component j_idt39
. 少しグーグルで調べたところ、フォームの範囲外の要素については、SEPARATOR_CHAR (:) を使用する必要があることがわかりました。それはうまくいきませんでした。だから私は #{component} と #{cc} のさまざまな組み合わせをいじってみましたが、何もうまくいきません。この素晴らしい説明も見つけましたが、やはり惨めに失敗しました。@all を使用すると、すべてうまくいきます (あるパネルが別のパネルに置き換えられます) が、実際には特定のコンポーネントをレンダリングする必要があります。
ヘルプ?お願いします?