0

我正在研究主要面孔树表。我有一个学生名单,我试图为每个学生展示他们可以接受培训的所有可能的老师。

我保留了名为 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>
4

1 回答 1

0

在管理新学生添加处理的其他 bean 中,注入对此 SessionScoped TreeViewBean 的引用。

在另一个bean中,您可以这样做

 @ManagedBean(name="otherBean")
 @ViewScoped
 public class OtherBean implements Serializable {

      @ManagedProperty(value="#{treeViewBean}")
      private TreeViewBean tvBean;

      public void setTreeViewBean(TreeViewBean tvBean) {
           this.tvBean = tvBean;
      }

      private void updateTVBean(){
              //here you can call some method on #{treeViewBean} to update that
              tvBean.someMethod(); //indicative only
      }
 }
于 2013-06-11T05:33:39.850 回答