当前位置: 首页 > 知识库问答 >
问题:

Primefaces树和如何基于TreeNode叶实体ID导航

阎鸿煊
2023-03-14
 <p:tree value="#{treeTestBean.treeTest}" var="tree" 
                        dynamic="true" 
                        selectionMode="single" 
                        selection="#{treeTestBean.selectednode}">

                    <p:ajax event="select" listener="#{treeTestBean.onNodeSelect}"/>
                    <p:treeNode>
                        <h:outputText value="#{tree}"/>
                    </p:treeNode>
  </p:tree>  

托管bean:

@Named(value = "treeTestBean")
@SessionScoped
public class TreeTestBean implements Serializable {

private TreeNode treetest;
private TreeNode selectednode;
private TreeNode node0;
private TreeNode node1;
private TreeNode node2;

private List<Enmarkets> markList;
private List<Entopic> topList;
private ListDataModel<Enitem> itList;

private Enitem selItem;

public TreeNode getTreeTest() {
    treetest = new DefaultTreeNode("Root", null);
    markList = rootFacade.findAll();

    for (Enmarkets m : markList) {

        node0 = new DefaultTreeNode(m.getMarketname(), treetest);
        int marketid = m.getMarketid();
        topList = topfac.marketTopNorm(marketid);

        for (Entopic t : topList) {
            node1 = new DefaultTreeNode(t.getTopicname(), node0);
            int topicid = t.getTopicid();
            itList = itfac.itemFroTopic(topicid);

            for (Enitem i : itList) {
                node2 = new DefaultTreeNode(i.getItemname(), node1);
            }

        }
    }

    return treetest;
}

ajax中使用的onNodeSelect方法也在托管bean中。如果所选节点是叶节点,它将搜索项目名称并在导航的页面中返回:

public void onNodeSelect(NodeSelectEvent event) {
this.setSelectednode(event.getTreeNode());

String somekey = selectednode.getRowKey();

if(selectednode.isLeaf()){
    String itemName = selectednode.getData().toString();

// Standard JPA call to search for item name here (omitted because this is not how i want to do it)

    FacesContext
            .getCurrentInstance()
            .getApplication()
            .getNavigationHandler()
            .handleNavigation(FacesContext.getCurrentInstance(), null, "/Main/Starter.xhtml?faces-redirect=true");
}
else {
    doNothing();
}
}

onNodeSelect应该搜索项目名称,并导航到包含所选项目详细信息的页面。上面的方法通过搜索项目名称字符串并将其与从持久层创建的项目实体值列表中的名称匹配来实现这一目的。这将允许将selectednode字符串匹配到正确的项名,以便导航的jsf页面中填充实体详细信息(例如,使用标准的h:outputText标记)。出于几个原因,我更喜欢基于实体ID而不是字符串进行搜索。

共有1个答案

孔光赫
2023-03-14

Kukeltje的评论极大地帮助了我走向正确的方向。首先,我在创建叶节点时包含一个Map(String,int):

for (Enitem i : itList) {
node2 = new DefaultTreeNode(i.getItemname(), node1);
String rowK = node2.getRowKey();
int itid = i.getItemid();
rowMap.put(rowK, itid);

然后,在onNodeSelect方法中,我使用此映射将selectednode的行键匹配到相应的实体ID:

public void onNodeSelect(NodeSelectEvent event) {

if(selectednode.isLeaf()){
String rKey = selectednode.getRowKey();
if(rowMap.containsKey(rKey)) {
String xKey = rowMap.get(rKey).toString();
Integer rKeyint = Integer.parseInt(xKey);
selItem = itfac.find(rKeyint);

FacesContext
.getCurrentInstance()
.getApplication()
.getNavigationHandler()
.handleNavigation(FacesContext.getCurrentInstance(), null, "/Main/Client/ItemDetails.xhtml?faces-redirect=true");

    }
}
else {
doNothing();
}

这将导航到显示所选节点叶的详细信息的页面。我怀疑可能有一个更容易或更有效的方法来做这件事,并欢迎任何意见。比如,我不知道是否真的有必要进行字符串到整数的转换,我没有通过一个更简单的方法来思考。

 类似资料:
  • 问题内容: 我想使用 JAVA 在JSON树中替换稀有词。 我的罕见单词列表包含 所以对于下面的JSON 我应该得到 注意如何 被替换为 到目前为止,我的代码如下: 我递归地遍历树,一旦发现稀有单词,我就创建一个新的JSON数组,并尝试用它替换现有树的节点。看到下面,这就是我被卡住的地方。在此功能之外,树保持不变。 上面调用的代码,我用的是谷歌的gson 问题答案: 这是C ++中的直接方法: 假

  • 问题是:计算所有根到叶数的总和。例如:如果树是(1,2,3),1是根,2是左子,3是右子,两条路径:1- 这是我正确的递归解决方案。在助手方法中,返回总和: 但是当我在helper方法中添加作为参数时,我总是得到0。 我相信我对递归一定有一些误解。提前感谢您给我一些解释,为什么的值没有“转移”回方法中的。

  • 本文向大家介绍基于swing实现窗体拖拽和拉伸,包括了基于swing实现窗体拖拽和拉伸的使用技巧和注意事项,需要的朋友参考一下 本文为大家分享了swing实现窗体拖拽和拉伸的具体代码,供大家参考,具体内容如下 当用setUndecorated(true) 后 JFrame去掉标题栏后就得自己写拖拽和拉伸功能了。 下面是效果图,我的截图软件不能够截取除系统默认光标外的光标,所以各个方向光标变化在图中

  • 我需要使用NER和POS标记从句子中提取实体。例如 鉴于以下句子: 实体所在的位置(两辆蓝色轿车,高卡车吉姆)。对斯帕西·内尔的判决进行调查, 它返回: 我的目标是将形容词/数字加在NER标识的实体前面,在上面的例子中,是ADJ,应该加在实体后面。应该使用POS tagger中的提取两辆蓝色汽车。

  • 本文向大家介绍如何基于python实现画不同品种的樱花树,包括了如何基于python实现画不同品种的樱花树的使用技巧和注意事项,需要的朋友参考一下 这篇文章主要介绍了如何基于python实现画不同品种的樱花树,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下  动态生成樱花 效果图(这个是动态的): 实现代码: 飘落效果 效果图: 实现代码: 暗色效

  • 问题内容: 使用JDK 1.6,JSF 2.1,PrimeFaces 2.2.1,POI 3.2和Apache Tomcat 7 我正在尝试设置一个servlet,以允许根据用户选择下载excel文件。excel文档是在运行时创建的。 没有错误,代码确实进入了servlet。 我单击按钮,没有任何反应。我没有使用PrimeFaces使用的数据表导出,因为我需要对Excel文档中的数据进行重新排序和