繁体   English   中英

如何从素面的树上将对象传递到视图

[英]How to pass an object to a view from a tree on primefaces

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

为此,我在树上定义了一个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; 
}

视图加载时没有任何错误,但是从未设置该属性。 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(){}
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM