Richfacse rich:tree +rich:treeNode

        在seam中使用Richfaces使得前台的页面对于后台开发人员来讲变得十分简单,而且在Richfacse的Demo网站上有相当详细的例子,所有的demo源文件也可以下载到。但是也有很多需要注意的地方。如用到rich:tree时, 难免在需要在自己的code中加入org.richfaces.TreeNodeImp或者实现org.richfaces.TreeNode接口,code非常简单,可在运行的时候就没那么容易了,对于jar包的位置要求相对严格了许多。

运行环境:

1. Jboss-4.2.3GA

2. Jboss-seam-2.2.0GA

3. Richfaces-3.3.0.GA.

 

java文件:

 

ExpandedBlockStart.gif XMLManger.java
 1  package  com.logile.elm.ta.workbench.action;
 2 
 3  import  java.util.List;
 4 
 5  import  org.jboss.seam.ScopeType;
 6  import  org.jboss.seam.annotations.AutoCreate;
 7  import  org.jboss.seam.annotations.In;
 8  import  org.jboss.seam.annotations.Name;
 9  import  org.jboss.seam.annotations.Scope;
10  import  org.richfaces.model.TreeNode;
11  import  org.richfaces.model.TreeNodeImpl;
12 
13  import  com.logile.elm.ta.common.TACommonQueryDAO;
14  import  com.logile.elm.ta.workbench.model.AttributeParameter;
15  import  com.logile.elm.ta.workbench.model.AttributeType;
16  import  com.logile.elm.ta.workbench.model.Fact;
17  import  com.logile.elm.ta.workbench.model.RuleHelpNode;
18 
19  @Name( " xmlManger " )
20  @Scope(ScopeType.CONVERSATION)
21  @AutoCreate
22  public   class  XmlManger {
23      @In(create  =   true )
24       private  TACommonQueryDAO taCommonQueryDao;
25      
26       private  TreeNode < RuleHelpNode >  helpNode;
27      
28      
29      
30       public   void  setupHelp()
31      {
32           if (helpNode  ==   null ){
33              helpNode  =   new  TreeNodeImpl < RuleHelpNode > ();
34              RuleHelpNode help  =   new  RuleHelpNode();
35              helpNode.setData(help);
36              List < Fact >  facts  =  taCommonQueryDao.getFact();
37               for (Fact fact : facts){
38                  helpNode.addChild(fact.getDisplayName(), getNodeFromFact(fact));
39              }
40          }
41      }
42      
43       private  TreeNode < RuleHelpNode >  getNodeFromFact(Fact fact)
44      {
45          RuleHelpNode factHelp  =   new  RuleHelpNode();
46          factHelp.setId(fact.getId());
47          factHelp.setType(RuleHelpNode.NODE_TYPE_FACT);
48          factHelp.setIcon(RuleHelpNode.NODE_ICON_FACT);
49          factHelp.setName(fact.getDisplayName());
50          TreeNode < RuleHelpNode >  factNode  =   new  TreeNodeImpl < RuleHelpNode > ();
51          factNode.setData(factHelp);
52           for (AttributeType attribute : fact.getAttributeSet()){
53              factNode.addChild(attribute.getDisplayName(), getNodeFromAttribute(attribute));
54          }
55           return  factNode;
56      }
57      
58       private  TreeNode < RuleHelpNode >  getNodeFromAttribute(AttributeType attribute){
59          RuleHelpNode attributeHelp  =   new  RuleHelpNode();
60          attributeHelp.setId(attribute.getId());
61          attributeHelp.setName(attribute.getDisplayName());
62          attributeHelp.setType(RuleHelpNode.NODE_TYPE_ATTRIBUTE);
63           if (attribute.getMethodFlag()){
64              attributeHelp.setIcon(RuleHelpNode.NODE_ICON_METHOD);
65          } else  {
66              attributeHelp.setIcon(RuleHelpNode.NODE_ICON_FIELD);
67          }
68          TreeNode < RuleHelpNode >  attributeNode  =   new  TreeNodeImpl < RuleHelpNode > ();
69          attributeNode.setData(attributeHelp);
70           for (AttributeParameter parameter : attribute.getParameters()){
71              attributeNode.addChild(parameter.getDisplayName(), getNodeFromParameter(parameter));
72          }
73           return  attributeNode;
74      }
75      
76       private  TreeNode < RuleHelpNode >  getNodeFromParameter(AttributeParameter parameter){
77          RuleHelpNode paramHelp  =   new  RuleHelpNode();
78          paramHelp.setId(parameter.getId());
79          paramHelp.setName(parameter.getDisplayName());
80          paramHelp.setType(RuleHelpNode.NODE_TYPE_PARAMETER);
81          paramHelp.setIcon(RuleHelpNode.NODE_ICON_PARAMETER);
82          TreeNode < RuleHelpNode >  paramNode  =   new  TreeNodeImpl < RuleHelpNode > ();
83          paramNode.setData(paramHelp);
84           return  paramNode;
85      }
86 
87       public   void  setHelpNode(TreeNode < RuleHelpNode >  helpNode) {
88           this .helpNode  =  helpNode;
89      }
90 
91       public  TreeNode < RuleHelpNode >  getHelpNode() {
92           return  helpNode;
93      }
94      
95  }
96 

 

 

ExpandedBlockStart.gif 代码
 1  package  com.logile.elm.ta.workbench.model;
 2 
 3  public   class  RuleHelpNode {
 4 
 5       private   static   final   long  serialVersionUID  =   1L ;
 6      
 7       public   static   final  String NODE_TYPE_FACT  =   " FACT " ;
 8       public   static   final  String NODE_TYPE_ATTRIBUTE  =   " ATTRIBUTE " ;
 9       public   static   final  String NODE_TYPE_PARAMETER  =   " PARAMETER " ;
10      
11       public   static   final  String NODE_ICON_FACT  =   " /img/workbench/node_fact.png " ;
12       public   static   final  String NODE_ICON_FIELD  =   " /img/workbench/node_field.png " ;
13       public   static   final  String NODE_ICON_METHOD  =   " /img/workbench/node_method.png " ;
14       public   static   final  String NODE_ICON_PARAMETER  =   " /img/workbench/node_parameter.png " ;
15      
16       private  Long id;
17       private  String type;
18       private  String icon;
19       private  String name;
20 
21       public  Long getId() {
22           return  id;
23      }
24 
25       public   void  setId(Long id) {
26           this .id  =  id;
27      }
28 
29       public  String getType() {
30           return  type;
31      }
32 
33       public   void  setType(String type) {
34           this .type  =  type;
35      }
36 
37       public  String getIcon() {
38           return  icon;
39      }
40 
41       public   void  setIcon(String icon) {
42           this .icon  =  icon;
43      }
44 
45       public  String getName() {
46           return  name;
47      }
48 
49       public   void  setName(String name) {
50           this .name  =  name;
51      }
52 
53  }
54 

 

 

Xhtml code:

 

ExpandedBlockStart.gif html code
 1          < rich:tree   style ="overflow:auto;width:240px; height:350px;"   ajaxSubmitSelection ="true"   switchType ="client"
 2                  value ="#{xmlManger.helpNode}"  id ="tree"  var ="item"
 3                  nodeFace ="#{item.type}"  rendered ="#{xmlManger.helpNode != null}"   >
 4                   < rich:treeNode  type ="FACT"  iconLeaf ="#{item.icon}"  icon ="#{item.icon}" >
 5                       < h:outputText  value ="#{item.name}" />
 6                   </ rich:treeNode >
 7                   < rich:treeNode  type ="ATTRIBUTE"  iconLeaf ="#{item.icon}"  icon ="#{item.icon}" >
 8                       < h:outputText  value ="#{item.name}" />
 9                   </ rich:treeNode >
10                   < rich:treeNode  type ="PARAMETER"  iconLeaf ="#{item.icon}"  icon ="#{item.icon}" >
11                       < h:outputText  value ="#{item.name}" />
12                   </ rich:treeNode >
13               </ rich:tree >

 

代码就是这么简单,可已发布问题就来了。

第一个问题:java.lang.NoClassDefFoundError: org/richfaces/model/TreeNode,jboss直接无法启动。

说 明:     在EAR和WAR的WEB-INF/lib下面都已经有richfaces-api.jar、richfaces-impl.jar、richfaces-ui.jar了。

解决方法:尝试着将richfaces-*.jar复制到/server/defaut/lib中,问题貌似解决,结果高兴早了。

 

第二问题: org.richfaces.model.TreeNodeImpl cannot be cast to javax.swing.tree.TreeNode,正常启动,但是前台页面无法显示。

说明:在程序中从未使用过javax.swing.tree.TreeNode。

解决方法:1. /server/defaut/lib中只保留richfaces-api.jar;2. EAR下面只保留richfaces-api.jar; 3. WAR的WEB-INF/lib下面只保留richfaces-impl.jar、richfaces-ui.jar。发布,重启jboss ,一切正常。

 

问题总结:

1. 在用到rich:tree或者说在自己的code里面需要引用Richfaces,需要特别的注意richfaces-*.jar的位置。

2. 问题解决了,问题的根源是什么,为什么一定要按上面的位置来放jar包?

    猜想:问题1--jboss启动时依赖的jar包在/server/defaut/lib中;

            问题2--EAR工程中,JAR和WAR貌似使用了不同的classLoader,但是都受EAR的控制。

 

至于真正的原因,希望看到这篇文章的人能给予指出,不胜感激。

 

 

 

转载于:https://www.cnblogs.com/luzheng1/archive/2010/07/03/richtree.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值