如何设计一个公共的数据字典维护模块

 

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
返回第一步:就是这样用。
大概就是这么个流程了。并且可以实现把数据字典统一一个模块维护!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值