struts2的多级树

时间:2013-06-17 14:48:57

标签: struts2 struts2-jquery

我是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>

仅适用于第一个树和第一个树。

有人能帮助我吗?

1 个答案:

答案 0 :(得分:0)

行动中

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"
            />