あなたの回答に従って編集されました(私があなたを正しく理解している場合)。これは head から記述されるため、一部の属性名が異なる場合があることに注意してください。ポイントは、クリックされた行に応じてツリーテーブルからアクティブなコレクションを設定することです。ID は actionListener を介して設定され、アクションは mycontroller.activeCollection を表示するリストに設定します。次に、データテーブルは、クリックした行に応じた値で通常の投稿または ajax を介して再レンダリングされます。
マークアップ
<p:treeTable value="#{myController.treenode}" var="item">
<p:column>
<h:commandLink action="#{myController.setActiveShop}" value="set">
<f:setPropertyActionListener target="#{myController.shipName}" value="#{item.shop.name}"/>
</h:commandButton>
</p:column>
</p:treeTable>
<p:dataTable value="#{myController.activeShop.items" rendered="#{!empty myController.activeShop}" var="item">
<p:column>#{item.name}</p:column>
</p:datatable>
<p:dataTable value="#{myController.activeShop.employees" rendered="#{!empty myController.activeShop}" var="item">
<p:column>#{item.name}</p:column>
</p:datatable>
コントローラ
@ManagedBean
@ViewScoped // Or @SessionScoped... something that can cache lists, not sure how this would be done with requestscope
public class MyController{
private List<Shop> shopList; // Set this from a datasource. Or use only shopTree below to store your shops..
private Shop activeShop;
private String shopName;
private TreeNode shopTree; // Generate this from shopList
// insert getters and setters
private setActiveShop(){
for(Shop s : shipList)
if(s.getName().equals(shopName)
activeShop = s;
}
}