谈笑有鸿儒,往来无白丁

在恰当的时间、地点以恰当的方式表达给恰当的人...  阅读的时候请注意分类,佛曰我日里面是谈笑文章,其他是各个分类的文章,积极的热情投入到写博的队伍中来,支持blogjava做大做强!向dudu站长致敬>> > 我的微博敬请收听

1、需要字典的时候;

       <tr>
         
<td>请选择公文状态:</td>
         
<td>
            
<tiles:insert definition="mainLayout" flush="true">   
                
<tiles:put name="dictionary" value="docstate"/>
                
<tiles:put name="value" value="114d389ec53[ab1ff2]-7ff4"/>                                
                
<tiles:put name="id" value="115ff81cf78[f5c8fb]-8000"/>                                
   
</tiles:insert>
         
</td>
       
</tr>   

其中value表示是一个默认值
如果是在编辑的时候显示的值通过ID来指定。

2、设计步骤
   首先配置struts-config.xml
   

  <plug-in className="org.apache.struts.tiles.TilesPlugin" >
    
<set-property property="definitions-config" value="/WEB-INF/tiles-defs.xml" />
    
<!-- Set Module-awareness to true -->
    
<set-property property="moduleAware" value="true" />
  
</plug-in>  

 第二:/WEB-INF/tiles-defs.xml
 

    <definition name="mainLayout" path="/part/defaultTemplate.jsp"> 
    
</definition> 

第三:定义模板

 

<%
DictionaryFactory.setDictionaryByName(dictionary, request);
%>
<logic:present name="${dictionary}">
    
<select name="${dictionary}" size="1">
        
<logic:iterate id="dobj" name="${dictionary}"
            type
="com.chinantn.library.dictionary.DicBean">
            
<option value="<bean:write name='dobj' property='id'/>"
                <logic:equal name
='dobj' property='id' value='${id}' >selected</logic:equal>
                
<logic:equal name='dobj' property='id'  value='${value}'>selected</logic:equal>>
                
<bean:write name="dobj" property="name" />
        
</logic:iterate>
    
</select>
</logic:present>

第四:读取字典的配置文件

    <province>
        
<id>id</id>
        
<name>province</name> 
        
<sql>select id,name from tb_dic_main</sql>
    
</province>

第五:解析xml文件根据传入的想要使用的字典类型得到数据;

    //得到select option id    
    private static String sid =null;
    
//得到select option name    
    private static String sname =null;
    
//生成数据的ssql    
    private static String ssql =null;
    
    
private static String dicName;

    
/**
     * 
@return dicName
     
*/

    
public static String getDicName() {
        
return dicName;
    }


    
/**
     * 
@param dicName 要设置的 dicName
     
*/

    
public static void setDicName(String dicName) {
        DictionaryFactory.dicName 
= dicName;
    }


    
/**
     * 默认的构造函数
     *
     
*/

    
public DictionaryFactory() {
         
super();
    }


    
/**
     * 根据配置文件进行初始化
     * 
     * 
@param configFilename
     
*/

    
public DictionaryFactory(String sConfigFileName) {
        
this.sConfigFileName = sConfigFileName;
    }

    
    
/**
     * 根据字典的类型得到需要设置的字典
     * 
@param sDicType
     
*/

    
public static void setDictionaryByName(String dicName,HttpServletRequest request) throws Exception, SQLException{
        
//取得需要的参数
        init(dicName);        
        Connection conn 
= DBConnection.getConnection();
        Statement stmt 
= conn.createStatement();
        log.info(
"ssql:"+ssql);
        ResultSet rset 
= stmt.executeQuery(ssql);
        List list 
= new ArrayList();
        
while (rset.next()) {
            log.info(rset.getString(
1+ " " + rset.getString(2));
            DicBean db 
= new DicBean();
            db.setId(rset.getString(
1));
               db.setName(rset.getString(
2));
            list.add(db);               
            }

        log.info(sname
+"----"+list.size());
        request.setAttribute(sname, list);
        
if (conn != null{
            
try {
                conn.close();
            }
 catch (Exception e) {
                e.printStackTrace();
            }

        }

    }


    
/**
     * 初始化数据字典的配置信息
     
*/
 
    
private static void init(String dicName) {
        
        ClassPathResource classpath 
= new ClassPathResource(sConfigFileName);
        
//读取xml配置文件的信息,初始化数组
        try {
            
//获得一个xml的解析器
            DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
            
//解析XML文件生成DOM文档的接口类,以便访问DOM
            DocumentBuilder builder = factory.newDocumentBuilder();
            
//Document接口描述了对于整个XML文件的文档树
            Document document = builder.parse(classpath.getFile());
            
//获得根元素的子节点列表
            Element element = document.getDocumentElement();
            
//得到需要的字典
            NodeList nodelist =element.getElementsByTagName(dicName);
            
for(int i=0 ;i<nodelist.getLength();i++{
                Element rootelement 
= (Element)nodelist.item(i);
                
//获得ID属性 
                NodeList idList = rootelement.getElementsByTagName("id");
                
//获得ID元素
                Element idElement = (Element)idList.item(0);
                
//获得id元素的第一个值 
                String id = idElement.getFirstChild().getNodeValue();
                
//获得name元素名称 
                NodeList nameList = rootelement.getElementsByTagName("name"); 
                
//获得name元素 
                Element nameElement = (Element)nameList.item(0); 
                
//获得name元素的第一个值 
                String name = nameElement.getFirstChild().getNodeValue();
                
//获得sql元素名称 
                NodeList sqlList = rootelement.getElementsByTagName("sql"); 
                
//获得sql元素 
                Element sqlElement = (Element)sqlList.item(0); 
                
//获得sql元素的第一个值 
                String sql = sqlElement.getFirstChild().getNodeValue();
                sid 
= id;
                sname 
= name;
                
//
                ssql = sql +" where dictype='"+name+"'" ;
                log.info(
"id="+id+";name="+name+";sql="+sql);
                
            }

        }
catch(Exception e) {
            e.printStackTrace();
        }

    }

 

第六:设计jsp
返回第一步:就是这样用。
大概就是这么个流程了。并且可以实现把数据字典统一一个模块维护!

 

 

 

posted on 2007-11-03 10:33 坏男孩 阅读(6373) 评论(5)  编辑  收藏 所属分类: 生活随笔

FeedBack:
# re: 如何设计一个公共的数据字典维护模块
2007-11-03 10:49 | 坏男孩
# re: 如何设计一个公共的数据字典维护模块
2007-11-03 11:25 | 5D壁纸
貌似不错,顶一个,但是不知道博主要说什么,呵呵

5D壁纸,http://5d6p.5d6d.com 欢迎来到国内最好的壁纸论坛  回复  更多评论
  
# re: 如何设计表中的简单函数
2008-04-15 09:04 | 周爱荣
我尝试建立了一个合同数据库,它包括了销售合同,采购合同,以及收、发货和收、付款。都是围绕配件(即产品)来连接的。但是我还要建立一个库存的表格,怎样可以只能得使用到库存而不用手动输入。


另外,我可以在窗体中使用函数(简单的加减乘除),但是为什么表不可以一起应用呢?  回复  更多评论
  
# re: 如何设计一个公共的数据字典维护模块
2009-02-17 11:05 | 过路人
我想用Java写个字典维护的程序,看完你上边的那些说实话有点晕。能不能给我更多的指导。可以的话联系我: hehaiquan@hotmail.com  回复  更多评论
  
# re: 如何设计一个公共的数据字典维护模块
2012-05-14 15:46 | 冬颜008
vmcxk kfgml;o   回复  更多评论
  

只有注册用户登录后才能发表评论。


网站导航: