Primefaces p:树在v4中工作成功,在v5、v5.1、5.2、5.3和6中工作失败
我使用MojaraJSF2.2和PrimeFaces4、Wildfly作为web服务器和EclipseNeon作为IDE开发了一个web应用程序。而且效果很好。当我尝试迁移到Primefaces 5时,一切正常,除了p:tree未能触发任何选择事件。v5.1、5.2、5.3和6也出现了同样的情况。 因此,如果您有任何帮助,我们将不胜感激 下面是p:树代码片段:Primefaces p:树在v4中工作成功,在v5、v5.1、5.2、5.3和6中工作失败,primefaces,Primefaces,我使用MojaraJSF2.2和PrimeFaces4、Wildfly作为web服务器和EclipseNeon作为IDE开发了一个web应用程序。而且效果很好。当我尝试迁移到Primefaces 5时,一切正常,除了p:tree未能触发任何选择事件。v5.1、5.2、5.3和6也出现了同样的情况。 因此,如果您有任何帮助,我们将不胜感激 下面是p:树代码片段: <h:form id="barForm"> <p:tree id="treeS
<h:form id="barForm">
<p:tree id="treeSingle" value="#{treeBackBean.root}" var="node"
selectionMode="single" selection="#{treeBackBean.selectedNode}"
dir="rtl" style="height: 100%; width: 200px;">
<p:ajax event="select" listener="#{treeBackBean.onNodeSelect}" />
<p:treeNode>
<h:outputLabel value="#{node}" />
</p:treeNode>
</p:tree>
</h:form>
}
我还使用AppUtil从属性文件中获取属性值
import services.AppUtil;
import java.io.IOException;
import java.io.Serializable;
import javax.annotation.PostConstruct;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;
import org.primefaces.event.NodeSelectEvent;
import org.primefaces.model.DefaultTreeNode;
import org.primefaces.model.TreeNode;
@ManagedBean
@SessionScoped
public class TreeBackBean implements Serializable {
private static final long serialVersionUID = 1L;
private TreeNode root;
private TreeNode selectedNode;
@SuppressWarnings("unused")
@PostConstruct
public void builtTree() {
TreeNodeData nodeData = new TreeNodeData("Root", "", TreeNodeData.NODE_TYPE_ROOT);
root = new DefaultTreeNode(nodeData, null);
nodeData = new TreeNodeData(AppUtil.getPropertyValue("labels", "menuControlPanel"), "",
TreeNodeData.NODE_TYPE_BRANCH);
TreeNode settingsMenu = new DefaultTreeNode(nodeData, root);
try{nodeData = new TreeNodeData(AppUtil.getPropertyValue("labels", "applicationAdministartionSubMenu"), "",
TreeNodeData.NODE_TYPE_BRANCH);
TreeNode applicationAdministartionSubMenu = new DefaultTreeNode(nodeData, settingsMenu);
nodeData = new TreeNodeData(AppUtil.getPropertyValue("labels", "usersRoles"),
"userRole.xhtml", TreeNodeData.NODE_TYPE_LEAF);
TreeNode node1 = new DefaultTreeNode(nodeData, applicationAdministartionSubMenu);
//
nodeData = new TreeNodeData(AppUtil.getPropertyValue("labels", "Catogeries"),
"Catogery.xhtml", TreeNodeData.NODE_TYPE_LEAF);
TreeNode node2 = new DefaultTreeNode(nodeData, applicationAdministartionSubMenu);
//
nodeData = new TreeNodeData(AppUtil.getPropertyValue("labels", "Units"),
"Unit.xhtml", TreeNodeData.NODE_TYPE_LEAF);
TreeNode node3 = new DefaultTreeNode(nodeData, applicationAdministartionSubMenu);
//
applicationAdministartionSubMenu.setExpanded(true);
///...........etc
} catch (NullPointerException ex) {
// ex.printStackTrace();
}
public TreeNode getRoot() {
return root;
}
public TreeNode getSelectedNode() {
return selectedNode;
}
public void setSelectedNode(TreeNode selectedNode) {
this.selectedNode = selectedNode;
}
public void onNodeSelect(NodeSelectEvent event) {
TreeNodeData treeNodeData = (TreeNodeData) event.getTreeNode().getData();
//remaining selection code goes here
//it just redirecting to selected page.
}
public void expand(TreeNode treeNode) {
if (treeNode != null)
if (treeNode.getParent() != null) {
treeNode.getParent().setExpanded(true);
expand(treeNode.getParent());
}
}
}//class end
请改进你的标题。PrimeFaces展示区也很有效。找到differences@Kukeltje我从PrimeFaces showcase学习,我知道在那里工作很好。但我不工作,至少在v4之后的任何最新版本,我不知道为什么。无论如何,谢谢,我很感激。我在xhtml正文中使用了ajaxStatus,当我将p:tree的ajax选择事件全局属性设置为false时,它似乎以某种方式阻止了p:tree的ajax选择事件。它适用于所有版本。但这种方式会产生很多其他问题,因为它会禁用触发其他操作……例如:commondButton和commondLink停止工作。您可以编辑您的问题。使代码更具可读性
import services.AppUtil;
import java.io.IOException;
import java.io.Serializable;
import javax.annotation.PostConstruct;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;
import org.primefaces.event.NodeSelectEvent;
import org.primefaces.model.DefaultTreeNode;
import org.primefaces.model.TreeNode;
@ManagedBean
@SessionScoped
public class TreeBackBean implements Serializable {
private static final long serialVersionUID = 1L;
private TreeNode root;
private TreeNode selectedNode;
@SuppressWarnings("unused")
@PostConstruct
public void builtTree() {
TreeNodeData nodeData = new TreeNodeData("Root", "", TreeNodeData.NODE_TYPE_ROOT);
root = new DefaultTreeNode(nodeData, null);
nodeData = new TreeNodeData(AppUtil.getPropertyValue("labels", "menuControlPanel"), "",
TreeNodeData.NODE_TYPE_BRANCH);
TreeNode settingsMenu = new DefaultTreeNode(nodeData, root);
try{nodeData = new TreeNodeData(AppUtil.getPropertyValue("labels", "applicationAdministartionSubMenu"), "",
TreeNodeData.NODE_TYPE_BRANCH);
TreeNode applicationAdministartionSubMenu = new DefaultTreeNode(nodeData, settingsMenu);
nodeData = new TreeNodeData(AppUtil.getPropertyValue("labels", "usersRoles"),
"userRole.xhtml", TreeNodeData.NODE_TYPE_LEAF);
TreeNode node1 = new DefaultTreeNode(nodeData, applicationAdministartionSubMenu);
//
nodeData = new TreeNodeData(AppUtil.getPropertyValue("labels", "Catogeries"),
"Catogery.xhtml", TreeNodeData.NODE_TYPE_LEAF);
TreeNode node2 = new DefaultTreeNode(nodeData, applicationAdministartionSubMenu);
//
nodeData = new TreeNodeData(AppUtil.getPropertyValue("labels", "Units"),
"Unit.xhtml", TreeNodeData.NODE_TYPE_LEAF);
TreeNode node3 = new DefaultTreeNode(nodeData, applicationAdministartionSubMenu);
//
applicationAdministartionSubMenu.setExpanded(true);
///...........etc
} catch (NullPointerException ex) {
// ex.printStackTrace();
}
public TreeNode getRoot() {
return root;
}
public TreeNode getSelectedNode() {
return selectedNode;
}
public void setSelectedNode(TreeNode selectedNode) {
this.selectedNode = selectedNode;
}
public void onNodeSelect(NodeSelectEvent event) {
TreeNodeData treeNodeData = (TreeNodeData) event.getTreeNode().getData();
//remaining selection code goes here
//it just redirecting to selected page.
}
public void expand(TreeNode treeNode) {
if (treeNode != null)
if (treeNode.getParent() != null) {
treeNode.getParent().setExpanded(true);
expand(treeNode.getParent());
}
}
}//class end