/subviews/document-tree.xhtml
クライアントの各タブのツリーをレンダリングするFacelets サブビューがあり<rich:tabPanel>
ます。ページとサブビューは、JSF 2 と RichFaces 4 に基づいています。
<ui:composition ...>
<rich:tree value="#{rootNode}" var="treeNode" id="#{treeId}">
<rich:treeNode ... id="chapternode">
<h:panelGrid columns="2">
<rich:outputText value="#{treeNode.name}" />
<h:commandLink>
<h:graphicImage library="images/icons" name="delete.png" />
<rich:componentControl target="remove-chapter-popup" operation="show" />
</h:commandLink>
<rich:popupPanel modal="true"
onmaskclick="#{rich:component('remove-chapter-popup')}.hide(); return false;"
id="remove-chapter-popup">
<f:facet name="header">
<h:outputText value="Remove chapter?" />
</f:facet>
<f:facet name="controls">
<h:outputText value="X" />
</f:facet>
<p>Remove chapter #{treeNode.name}?</p>
<h:panelGrid columns="2">
<h:commandButton value="Add"
action="#{nodeManager.removeChapterNode(treeNode)}"
onclick="#{rich:component('remove-chapter-popup')}.hide(); return true;">
<!--f:ajax execute="@this" render="@form" /--> <!-- never executed! -->
<a4j:ajax execute="@this" render="@form" /> <!-- this works however! -->
</h:commandButton>
<h:commandButton value="Cancel"
onclick="#{rich:component('remove-chapter-popup')}.hide(); return false;" immediate="true" />
</h:panelGrid>
</rich:popupPanel>
</h:panelGrid>
</rich:treeNode>
...
</rich:tree>
</ui:composition>
これは基本的に、ツリー ノードとその名前、および右側に削除用のイメージを表示します。
各ツリー サブビューは に配置される<rich:tab>
ため、タブ パネルには必要な囲いがあり<h:form>
ます。他にネストされたフォームはありません (とにかく禁止されています)。
#{nodeManager.removeChapterNode(treeNode)}
Bean は として正しくマークされました@ViewScoped
。
今何が起こるかはちょっと奇妙です:
<f:ajax execute="@this" ... />
ボタンを使用すると実行されませんが、使用すると<a4j:ajax execute="@this" ... />
常に機能します。
なんで?ここで何が問題なのですか?
RichFaces自身の言葉によると、RichFaces<a4j:ajax>
が JSF 2 に 100% 基づいているという事実を考えると、あまり意味がありません。<f:ajax>
私が使用しているJSF 2.1.7 のバグでしょうか? (JBoss AS 7.1.1.Final に付属する実装)