为什么ajax事件不会发生?

时间:2014-10-10 18:32:59

标签: ajax jsf-2 primefaces

我的应用程序中有一个primeface树。我尝试加载所有数据,一旦它jsut到很多2500对象,只有一些使用。所以我试图实现som类的延迟加载。第一级在启动时加载,我想在扩展节点时加载必要的数据。我搜索了一些例子并根据我的目的修改了它。但在我的情况下,ajax不会发射。我在这里失踪了什么?

xhtml部分

<h:form>
    <p:panel id="add_elev2list" 
             header="lägg till elev" 
             collapsed="true" 
             toggleable="true">
        <p:tree value="#{bookb.root}" 
                var="node" 
                dynamic="true"  >
            <p:ajax event="select" 
                    update="@this"  
                    listener="#{bookb.onNodeSelect}"/>
            <p:treeNode >
                <h:outputText value="#{node}"   />
            </p:treeNode>
        </p:tree>
    </p:panel>
</h:form>

在加载之前,第一层树是由

构建的
public void triggerTreeBuild() {
     root = new DefaultTreeNode("Root", null);
     ObjectContainer localdb = dbConnector.connDB();
        ObjectSet<sbasUserList> res;
        Query query = localdb.query();
        query.constrain(sbasUserList.class);
        //query.descend("klass").constrain(true);
        res = query.execute();
        for(sbasUserList sbu : res ){

             if(sbu.isKlass()) {
                 TreeNode node0 = new DefaultTreeNode(sbu.getGroupname(), root);
                 node0.getChildren().add(new DefaultTreeNode("head"));
                }
        }
        localdb.close();

 }

工作正常。 ajax事件应该触发这个但不会发生。

public void onNodeSelect(NodeSelectEvent nee){
     log("expand"); //wrapper for System.out.println ... for some sort of debugging.
     sbasUserList sbu = (sbasUserList) nee.getTreeNode().getData();
     String[] allstd =  sbu.getAllusers().split(",");
     ObjectContainer localdb = dbConnector.connDB();
        for(String persnum : allstd){
            nee.getTreeNode().getChildren().add( new DefaultTreeNode(
                    getUserbyPersnum(localdb,persnum).getRealname())); 
        }
        localdb.close();
 }

知道为什么吗?

祝你好运 拉尔夫

使用tomcat 7.0.52 JSf 2.2和primefaces 4.0

1 个答案:

答案 0 :(得分:1)

由于您未设置属性selectionMode="single"

<p:tree value="#{treeBasicView.root}" 
        var="node" 
        dynamic="true"  
        selectionMode="single">
    <p:ajax event="select" listener="#{treeBasicView.onNodeSelect}" />
    <p:treeNode>
        <h:outputText value="#{node}" />
    </p:treeNode>
</p:tree>