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

本文介绍如何在Struts框架中使用Tiles模块集成数据字典功能,包括配置步骤、XML解析过程及数据库操作,实现了数据字典的动态加载。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

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、付费专栏及课程。

余额充值