2012-09-30 66 views
1

我開發了一個帶有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"); 
     } 

然後我加載viewProject.xhtml面孔,配置.xml,並填充其他managedBean中的屬性:

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

視圖加載沒有任何錯誤,但屬性從未設置。 ajax調用起作用,並在第一個bean中設置屬性。這是做到這一點的方式嗎?

+0

威爾Observer模式爲你做?想想看吧 –

+0

@SanyamGoel你的評論與OP的問題沒有任何關係。如果您不瞭解JSF和庫以增強其功能,請停止評論。 –

+0

您是否檢查過您的樹選擇屬性爲'#{treeBean.selectedNode}',並且您在託管bean中調用了'#{treeBean.selectedProject}'?它應該是同一個名字。 –

回答

0

我解決它只是增加一個標識符的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(){} 
} 
相關問題