我正在研究主要面孔树表。我有一个学生名单,我试图为每个学生展示他们可以接受培训的所有可能的老师。
我保留了名为 TreeviewBean 的托管 bean 类,它是一个会话范围,并且我有一个构造函数,我在其中初始化根值,如下所示。我已经在构造函数中初始化,而不是在 get root 方法中。最初构造函数被第一次调用,树表工作得很好。当新学生在不同的页面中创建时,问题就来了。由于树视图 bean 是会话范围的,因此构造函数不是每次都调用并且学生列表没有更新,因为结果树视图没有显示正确的值。我已更改为请求范围,此处性能受到阻碍,并且编辑教师的命令按钮失败。我该如何解决这个问题?
     @ManagedBean(name="treeViewBean")
     @SessionScoped
     public class TreeViewBean implements Serializable {  
            private static final long serialVersionUID = 1L;
            private Object selectedNode;
            private TreeNode root;  
            private TreeData treedata;
            public TreeViewBean() {  
               systemstud= new ManageStudentsDelegate();
               list  sys = systemstud.getAllnfo();
               root = new DefaultTreeNode("root", null);
               for(StudBean s : sys){
                treedata= new TreeData(s,"students");
                    TreeNode system = new DefaultTreeNode(treedata, root); 
                    if(s.getteachers()!=null){
                  for(teachBean serv : s.getteachers()){
                     treedata= new TreeData(serv,"teachers");
                     TreeNode service = new DefaultTreeNode(treedata, system);
                   }
                    }
               }
            }     
            public TreeNode getRoot() { 
                return root;  
            }  
            public void setRoot(TreeNode root) {  
                this.root = root;  
            }  
            public String editStudentOrteacher(){
                             system.out.println("edit");
            }
            public Object getSelectedNode() {
                return selectedNode;
            }
            public void setSelectedNode(Object selectedNode) {
                this.selectedNode = selectedNode;
            }
   }        
XHTML 代码:
 <p:treeTable value="#{treeViewBean.root}" var="system"  id="treeTable">  
        <p:column style="width:150px" >  
            <f:facet name="header">  
                Name  
            </f:facet>  
            <h:outputText value="#{system.stud.name}" /> 
            <h:outputText value="#{system.teach.name}"/> 
        </p:column>  
        <p:column >
            <p:commandButton action="#{treeViewBean.editStudentOrteacher}" process="@this">
            <f:setPropertyActionListener target="#{treeViewBean.selectedNode}" value="#{system}"></f:setPropertyActionListener>
            </p:commandButton>
       </p:column>
 </p:treeTable>