【问题标题】:datatables under tree structure in jsf core/ primefacesjsf core/primefaces中树结构下的数据表
【发布时间】:2012-04-24 16:24:15
【问题描述】:

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

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

我可以使用 JSF 2.0 核心甚至 primefaces 3.1。

有可能吗??

任何人都可以帮助...任何建议将不胜感激。

更新

我的模型是这样的:

class Shop{
    boolean isoperational;
    String name;
    List<Item> items;
    List<boolean> itempresent;
    List<Employee> employees; 
}

我需要树节点上的商店名称以及 isoperational 复选框; 当我们单击该节点时,它应该打开 2 个数据表。

  • 一个包含项目列表和 itempresent 复选框。

  • 其他包含员工名单。

谢谢

【问题讨论】:

    标签: jsf jsf-2 tree datatable primefaces


    【解决方案1】:

    根据您的回复进行编辑(如果我理解正确的话)。请注意,这是从头开始编写的,因此某些属性名称可能会有所不同。关键是根据单击的行从树表中设置一个活动集合。通过 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>
    

    控制器

    @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;
        }
    }
    

    【讨论】:

    • 我试过它不起作用。我需要在树节点上显示一些东西(输出文本和复选框)并单击它应该打开数据表。
    • 您想要总共 2 个数据表,还是每个树节点?如果是第一种选择,只需将它们放在树表下方,并将值设置为 bean 中的集合。添加一个 commandLink 或类似的树表来设置数据表动态连接到的集合,有或没有 ajax。
    • :谢谢回复。每个树节点我需要两个数据表。我也更新了问题。
    • 感谢您的努力,但您的解决方案中的数据表不是固定的,也就是说,它的数量总是 2。如果我单击 2 个树节点怎么办。它应该显示 4 个数据表(每个节点 click 2 个表,并且两个节点都应该重新展开)。我没有检查您提供的解决方案,但它似乎总是只显示 2 个数据表,因为数据表位于 treeTable 标记之外
    • 是的,我假设您想要 2 个固定数据表,因为它们位于树表之外。我的解决方案只有一个选定的商店,数据显示在数据表中。否则,您必须将 activeShop 替换为 activeShopList 并将 映射到它,其中包含数据表。一个更简单的解决方案是将数据表直接放在树表中
    猜你喜欢
    • 2013-02-06
    • 1970-01-01
    • 2012-11-22
    • 2012-07-21
    • 2013-05-21
    • 1970-01-01
    • 2014-05-22
    • 1970-01-01
    • 2018-04-29
    相关资源
    最近更新 更多