gpt4 book ai didi

java - 如何将对象从 primefaces 上的树传递到 View

转载 作者:行者123 更新时间:2023-12-01 05:05:59 24 4
gpt4 key购买 nike

我开发了一个带有 primefaces 树组件的导航菜单。树节点有一个 Project 对象作为内部数据。我希望能够加载包含项目详细信息的 View ,当我单击每个项目时,该 View 会动态加载。

为此,我在树上定义了一个 ajax 事件选择:

<h:form>
<p:tree value="#{treeBean.root}" var="node"
selection="#{treeBean.selectedNode}" id="tree" >
<p:ajax event="select" listener="#treeBean.onNodeSelect}"/>
<p:treeNode styleClass="treeNode">
<h:outputText value="#{node}" />
</p:treeNode>
</p:tree>
</h:form>

它调用了treeManagedBean中的onNodeSelectMethod:

@ViewScoped
@Component("treeBean")
@ManagedBean
public class TreeManagedBean{

private Project selectedProject;

public Project getSelectedProject(){
return selectedProject;
}

public void setSelectedProject(Project project){
this.selectedProject = project;
}

public void onNodeSelect(NodeSelectEvent event) {
this.selectedProject = (Project)event.getTreeNode().getData();
FacesContext context = FacesContext.getCurrentInstance();
ConfigurableNavigationHandler handler = (ConfigurableNavigationHandler) context.getApplication().getNavigationHandler();
handler.performNavigation("viewProject");
}

然后我通过 faces-config.xml 加载 viewProject.xhtml,并填充另一个 ManagedBean 中的属性:

@Component("projectView")
@ViewScoped
@ManagedBean
public class ProjectView {
@ManagedProperty("#{treeBean.selectedProject}")
private Project project;
}

View 加载时没有任何错误,但属性从未设置。 ajax 调用工作并正在第一个 bean 中设置属性。这是这样做的方法吗?

最佳答案

我解决了这个问题,只是向 ManagedBeans 添加了一个标识符,因为我有义务提供一个默认的构造函数:

@ViewScoped
@Component("treeBean")
@ManagedBean("treeBean")
public class TreeManagedBean{
public TreeManagedBean(){}
}

@Component("projectView")
@ViewScoped
@ManagedBean("projectView")
public class ProjectView {
@ManagedProperty("#{treeBean.selectedProject}")
private Project project;
public ProjectView(){}
}

关于java - 如何将对象从 primefaces 上的树传递到 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12663212/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com