多层树与struts2



我是Struts2和jQuery的新手。

我试着用TreeTag struts2-jquery做一个树。

但是我试着做两个层次。

这是我的代码。

public class TreeCategoriasAction extends ActionSupport {
private static final long serialVersionUID = 1421993767228006685L;
private FMCategorias fMCategorias;
public FMCategorias getCategorias() { return fMCategorias; }
private TreeNode nodes = new TreeNode();

public String execute() throws Exception {
    SmpConsultaCategorias smpConsultaCategorias = new SmpConsultaCategorias();
    smpConsultaCategorias.setCategoriaFilter(new SoCategoriaFilter());
    smpConsultaCategorias.getCategoriaFilter().setCoIdioma(ActionContext.getContext().getLocale().getLanguage().toUpperCase());
    SWGestionarCategoriasProxy proxy = new SWGestionarCategoriasProxy(TiendaWebProperties.getProperty(TiendaWebProperties.SERVICIO_CATEGORIAS_ENDPOINT));
    SoCategoria[] soCategoriaArray = proxy.consultaCategorias(smpConsultaCategorias);
    fMCategorias = Mapeador.mapear(soCategoriaArray);
    ServletActionContext.getRequest().setAttribute("categorias", fMCategorias);
     nodes.setId("Categorias");
     nodes.setState(TreeNode.NODE_STATE_OPEN);
     nodes.setTitle("Categorias");
     TreeNode [] nodo = new TreeNode[soCategoriaArray.length];
     Collection<TreeNode> children = new ArrayList<TreeNode>();
    for (int i = 0; i < soCategoriaArray.length; i++) {
        if (soCategoriaArray[i].getIdCategoriaPadre() == null) {
            nodo[i]=new TreeNode();
            nodo[i].setId(soCategoriaArray[i].getIdCategoria());
            nodo[i].setState(TreeNode.NODE_STATE_OPEN);
            nodo[i].setTitle(soCategoriaArray[i].getDeCategoria());             
            children.add(nodo[i]);

        for (int j = 0; j < soCategoriaArray.length; j++){
            if (soCategoriaArray[j].getIdCategoriaPadre() == soCategoriaArray[i].getIdCategoria()){
                Collection<TreeNode> children2 = new ArrayList<TreeNode>();
                nodo[j]=new TreeNode();
                nodo[j].setId(soCategoriaArray[j].getIdCategoria());
                nodo[j].setState(TreeNode.NODE_STATE_CLOSED);
                nodo[j].setTitle(soCategoriaArray[j].getDeCategoria());             
                children2.add(nodo[j]);
                nodo[i].setChildren(children2);
            }
        }
        }
        nodes.setChildren(children);
    }

    return SUCCESS;
}

public TreeNode getNodes() {
    return nodes;
}


}
在jsp

<%@ taglib prefix="sj" uri="/struts-jquery-tags"%>
<%@ taglib prefix="sjt" uri="/struts-jquery-tree-tags"%>
<%@taglib prefix="s" uri="/struts-tags" %>
<sj:head jqueryui="true" customBasepath="css" jquerytheme="jquery_tree_ui"debug="true" />
    <s:url var="treeCategoriasUrl" action="TreeCategorias.action"/>
    <sjt:tree 
            id="treeDynamicAjax" 
            jstreetheme="apple" 
            rootNode="nodes" 
            nodeHref="%{echo}"                   
            nodeTitleProperty="title" 
            nodeIdProperty="id" 
            nodeHrefParamName="echo"
            childCollectionProperty="children"
            />
            <s:iterator value=#nodo[i]>
            <sjt:tree
            id="treeDynamicAjax2" 
            jstreetheme="apple" 
            rootNode="#nodo[i]" 
            nodeHref="%{echo}"                   
            nodeTitleProperty="title" 
            nodeIdProperty="id" 
            nodeHrefParamName="echo"
            childCollectionProperty="children2"
            />
            </s:iterator>

只适用于第一个for和第一个树。

有人能帮我吗?

在行动

nodes.setId("Bricor");
nodes.setState(TreeNode.NODE_STATE_OPEN);
nodes.setTitle("Bricor");
getTreeNode (soCategoriaArray, nodes, null);
private void getTreeNode(SoCategoria[] soCategoriaArray, TreeNode nodoPadre, String idCategoriaPadre) {
    List<TreeNode> nodos = new ArrayList<TreeNode>();
    for (int i = 0; i < soCategoriaArray.length; i++){
        if ((idCategoriaPadre == null && soCategoriaArray[i].getIdCategoriaPadre() == null) || (soCategoriaArray[i].getIdCategoriaPadre() != null && soCategoriaArray[i].getIdCategoriaPadre().equals(idCategoriaPadre))){
            TreeNode nodo = new TreeNode();
            nodo.setId(soCategoriaArray[i].getIdCategoria());
            nodo.setState(TreeNode.NODE_STATE_OPEN);
            nodo.setTitle(soCategoriaArray[i].getDeCategoria());                
            nodos.add(nodo);
            getTreeNode(soCategoriaArray, nodo, soCategoriaArray[i].getIdCategoria());
        }

    }
    nodoPadre.setChildren(nodos);

}

在jsp

<%@ taglib prefix="sj" uri="/struts-jquery-tags"%>
<%@ taglib prefix="sjt" uri="/struts-jquery-tree-tags"%>
%@taglib prefix="s" uri="/struts-tags" %>
<sj:head jqueryui="true" customBasepath="css" jquerytheme="jquery_tree_ui" debug="true" />
    <s:url var="treeCategoriasUrl" action="TreeCategorias.action"/>
    <sjt:tree 
            id="treeDynamicAjax" 
            jstreetheme="apple" 
            rootNode="nodes" 
            nodeHref="%{echo}"                   
            nodeTitleProperty="title" 
            nodeIdProperty="id" 
            nodeHrefParamName="echo"
            childCollectionProperty="children"
            />

最新更新