PF 3.4 と JSF2 を使用しています。(私がやろうとしていることを示すために、ショーケースの例を変更しました。)
xhtml ファイル (2 番目のフォームに追加の commandButton を含む):
<h:form id="form">
<p:growl id="messages" showDetail="true" escape="false"/>
<p:tree value="#{treeBean.root}" var="node"
selectionMode="checkbox" selection="#{treeBean.selectedNodes}" id="treeMultiple">
<p:treeNode>
<h:outputText value="#{node}" />
</p:treeNode>
</p:tree>
<p:commandButton value="Display Selected" update="messages"
actionListener="#{treeBean.displaySelectedMultiple}" id="btnDisplay" />
</h:form>
<h:form id="form2">
<p:commandButton value="Display Selected"
process=":form:treeMultiple"
actionListener="#{treeBean.displaySelectedMultiple}" id="btnDisplay2" />
</h:form>
バッキング Bean:
public class TreeBean implements Serializable {
private TreeNode root;
private TreeNode[] selectedNodes;
public TreeBean() {
root = new DefaultTreeNode("Root", null);
TreeNode node0 = new DefaultTreeNode("Node 0", root);
TreeNode node1 = new DefaultTreeNode("Node 1", root);
TreeNode node2 = new DefaultTreeNode("Node 2", root);
TreeNode node00 = new DefaultTreeNode("Node 0.0", node0);
TreeNode node01 = new DefaultTreeNode("Node 0.1", node0);
TreeNode node10 = new DefaultTreeNode("Node 1.0", node1);
TreeNode node11 = new DefaultTreeNode("Node 1.1", node1);
TreeNode node000 = new DefaultTreeNode("Node 0.0.0", node00);
TreeNode node001 = new DefaultTreeNode("Node 0.0.1", node00);
TreeNode node010 = new DefaultTreeNode("Node 0.1.0", node01);
TreeNode node100 = new DefaultTreeNode("Node 1.0.0", node10);
}
public TreeNode getRoot() {
return root;
}
public TreeNode[] getSelectedNodes() {
return selectedNodes;
}
public void setSelectedNodes(TreeNode[] selectedNodes) {
this.selectedNodes = selectedNodes;
}
public void displaySelectedMultiple(ActionEvent event) {
if(selectedNodes != null && selectedNodes.length > 0) {
StringBuilder builder = new StringBuilder();
for(TreeNode node : selectedNodes) {
builder.append(node.getData().toString());
builder.append("<br />");
}
FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_INFO, "Selected", builder.toString());
FacesContext.getCurrentInstance().addMessage(null, message);
}
}
}
私が抱えている問題は、バッキング Bean の setSelectedNodes メソッドにあります。
commandButton、:form2:btnDisplay2 はメソッドを呼び出しますが、TreeNode[0] 値 (空の配列) を渡します。選択したノードを正しく渡していません。
最初のボタン :form:btnDisplay は正しく機能します。
追加情報: 私のアプリケーションでは、左側のナビゲーション エリア (form1) に「フィルター」があります: 日付範囲、および検索を絞り込むさまざまな基準 - これらはすべてオプションです。これらの基準の一部は ap:tree コンポーネントにあります。現在、そのフォームに「フィルターを適用」ボタンがあります。p:tree の選択は、バッキング Bean に正しく渡されます。
メイン コンテンツ エリア (form2) には、必要な選択基準 (アカウント番号) と [検索] ボタンがあります。問題は、ユーザーが form1 の [フィルターを適用] ボタンをクリックするのを忘れていることです。p:tree (form1) で日付範囲とチェックボックスを設定し、form2 の [検索] ボタンをクリックします。
したがって、form2 から、form1 の p:tree を処理しようとしています。