`
cbywxy
  • 浏览: 30126 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

struts2树形菜单的动态实现

 
阅读更多
最近的一个项目。用到了struts2的树形菜单。刚开始觉得有些难。在网上找了一些资料。不过好像都没有一个是特别的符合自己的需求。静态的我就不说了。网上多的是。这里就说说动态树的构造吧。
   谈struts2动态树必定要谈到<s:tree/>标签,那先我还是谈谈这标签的一些属性。因为在构造动态树的时候。这些属性是相当重要的。
  <s:tree rootNode="root"  
     nodeIdProperty="id"
     nodeTitleProperty="name"  
     childCollectionProperty="childrens"
     showRootGrid="true"
     showGrid="true"
     theme="bgtheme" 
     id="nodeId">
</s:tree>
rootNode属性是树形菜单的根。这个对象的构造需要有些特别(也是树形菜单每个节点),必须包涵nodeIdProperty,nodeTitleProperty属性的值(”Id“和“name”)的属性;和childCollectionProperty属性值(childrens)的“getChildrens()”方法;
比如这样一个对象:
   public class StrutsTreeNode {
//父子结点之间的连接符
public static final String link = "--";
//本节点ID
private int id;
//父节点ID,为0表示第一层结点
private int parentId;
//父节点,为null表示第一层结点
private StrutsTreeNode parent;
//结点名
private String name;
//结点全名
private String nameAll;
//结点使用图片文件名,为空用缺省的
private String iconFile;
//结点点击对应的URL
private String url;
//结点点击对应的target
private String target;
//结点所在层数
private int layers = 0;
//是否需要check
private boolean bckeck = false;
//是否check,0-否,1-是
private int checkValue = 0;
//是否固定选择项,0-否,1-是
private int fixup = 0;
//数据
private String data;
private List<StrutsTreeNode> childrens = new ArrayList<StrutsTreeNode>();
        这里的字段有很多。其他的一些并不是必须的。当然 setter 和getter是必不可少的了。
        有了这个对象,那么如何更数据库的数据联系起来呢。那么就需要我们去将数据库里的数据构造成这样要的一个对象了。就拿前段时间这个项目中数据来说吧。
        public class Terrain {

    private long terrainId;
    private long fatherTerrainId;
    private String terrainName;
    private String fullName;
    private String terrainDesc;
}
    这个是一个持久化类。这个类中最重要的两个属性就是terrainId,fatherTerrainId。因为他们是组合成树需要的关系,fatherTerrainId应用的是其他的terrinId;比如”成都“fatherTerrainId必定对应着“四川”的terrainId
这个之间的关系想必大家都能够明白。所以就此打住。
   最关键的一步就是如果把Terrain构造成一个 StrutsTreeNode :
       最理想的方式就是让他们都同时实现一个接口:
        public interface ITreeNode {
/**
* 转换对象为树结点
* @return StrutsTreeNode
*/
public StrutsTreeNode toTreeNode();
}
      在Terrain里
      public StrutsTreeNode toTreeNode() {
StrutsTreeNode treenode = new StrutsTreeNode();

treenode.setId((int)getTerrainId());
treenode.setParentId((int) getFatherTerrainId());
treenode.setName(getTerrainName());
return treenode;
}
   在StrutsTreeNode 里
       public StrutsTreeNode toTreeNode() {
return this;
}
   现在也不过只得到了Id,parent,Name;还没有的获得childrens这个列表啊。这个嘛就要单独获得了哟。这个应该不难吧。
  

    而在Action中必须定义一个 StrutsTreeNode root对象,在获得root钱取得他的childrens的对象列表。这样传到页面
    实列下载:http://cbywxy.iteye.com/admin/blogs/309511
分享到:
评论
2 楼 cai199391 2012-07-21  
    谢谢分享..
1 楼 whc616387447 2012-02-27  
1111111
jjjjjj

相关推荐

Global site tag (gtag.js) - Google Analytics