我正在研究主要面孔树表。我有一个学生名单,我试图为每个学生展示他们可以接受培训的所有可能的老师。
我保留了名为 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>