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