jsf core/primefaces中树结构下的数据表

jsf core/primefaces中树结构下的数据表,jsf,jsf-2,tree,datatable,primefaces,Jsf,Jsf 2,Tree,Datatable,Primefaces,我陷入了一个相当奇怪的境地 我有一个需求,我需要一个树结构来定义元素列表。当我们点击树中的任何一个元素时。它应该展开下面的部分,以显示链接到该元素的2个并排数据表 我可以使用JSF2.0核心,甚至PrimeFaces3.1 有可能吗 有人能帮忙吗。。。如有任何建议,将不胜感激 已更新 我的模型是这样的: class Shop{ boolean isoperational; String name; List<Item> items; List<b

我陷入了一个相当奇怪的境地

我有一个需求,我需要一个树结构来定义元素列表。当我们点击树中的任何一个元素时。它应该展开下面的部分,以显示链接到该元素的2个并排数据表

我可以使用JSF2.0核心,甚至PrimeFaces3.1

有可能吗

有人能帮忙吗。。。如有任何建议,将不胜感激

已更新

我的模型是这样的:

class Shop{
    boolean isoperational;
    String name;
    List<Item> items;
    List<boolean> itempresent;
    List<Employee> employees; 
}
class商店{
布尔等运算;
字符串名;
清单项目;
列出现有项目;
列出员工名单;
}
我需要在树节点上的店铺名称以及等操作复选框; 当我们点击这个节点时,它会打开2个数据表

  • 一个包含项目列表以及itempresent复选框的复选框

  • 其他包含员工名单的文件

感谢您根据您的回复进行编辑(如果我理解正确的话)。请注意,这是从head写入的,因此某些属性名称可能不同。关键是根据单击的行设置树表中的活动集合。通过actionListener设置ID,然后该操作将mycontroller.activeCollection设置为要显示的列表。然后通过普通post或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>

#{item.name}
#{item.name}
控制器

@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;
    }
}
@ManagedBean
@查看范围//或@SessionScoped。。。可以缓存列表的东西,但不确定如何使用requestscope实现
公共类MyController{
private List shopList;//从数据源设置。或者仅使用下面的shopTree来存储您的店铺。。
私人店铺;
私有字符串商店名称;
private TreeNode shopTree;//从shopList生成
//插入getter和setter
私有setActiveShop(){
适用于(s店:发货清单)
如果(s.getName().equals)(shopName)
activeShop=s;
}
}

我试过它不起作用。我需要显示一些东西(outputText和复选框)在树节点上单击并打开数据表。您想要总共2个数据表,还是每个树节点2个数据表?如果是第一种选择,只需将它们设置在树表下方,并将值设置为bean中的集合。添加commandLink或类似于树表的命令,以设置数据表动态连接到的集合,使用或without ajax:谢谢回复。我需要每个树节点两个数据表。我也更新了这个问题。谢谢您的努力,但解决方案中的数据表是否已修复,即始终是2个。如果我单击2个树节点会怎么样。它应该显示4个数据表(每个节点单击2个表,并且两个节点都应该扩展)。我没有检查您提供的解决方案,但它似乎总是只显示2个数据表,因为数据表位于树表标记之外。是的,我假设您需要2个固定数据表,因为它们位于树表之外。我的解决方案正好有一个选定的车间,数据显示在数据表中。否则,您将不得不重新添加数据表使用activeShopList创建activeShop,并将包含数据表的映射到它。更简单的解决方案是将数据表直接放在树表中