我的应用程序中有一个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
答案 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>