只对下拉列表项进行构建,到底为什么不进行整体构建,只不过是某些js库定位元素的原因。
数据库建表语句:
--下拉列表T_LIST_ITEM
CREATE TABLE IF NOT EXISTS T_LIST_ITEM(
LI_ID INTEGER NOT NULL AUTO_INCREMENT COMMENT 'ID',
ORG_ID int(4) COMMENT '使用部门ID',
LI_INDEX INT(4) NOT NULL COMMENT '输入域排序索引',
WEB_COM_NAME varchar(15) NOT NULL COMMENT '输入组件名',
OPT_LABEL varchar(50) NULL COMMENT '输入标签',
OPT_VALUE varchar(50) NULL COMMENT '输入值',
OPT_DET_VALUE varchar(100) NULL COMMENT '详细输入值',
PRIMARY KEY (LI_ID)
)
使用检索语句:
<sql-query name="GetCommonItems">
<![CDATA[
SELECT
A.LI_INDEX, A.OPT_LABEL, A.OPT_VALUE
FROM T_LIST_ITEM A
WHERE A.WEB_COM_NAME=:webComName
ORDER BY A.LI_INDEX
]]>
</sql-query>
DAO模型调用:
public List getCommonItems(String webComName) {
Query query=getSession().getNamedQuery("GetCommonItems");
query.setParameter("webComName",webComName);
return query.list();
}
freemarker-->templates(defaultItems.ftl)内容
<#list items as item>
<option value="${item[2]}" <#if defaultValue=="${item[2]}">selected</#if> >${item[1]}</option>
</#list>
freemarker解析类:
public class DynaListItems {
private static TListItemDAO listItemDAO;
public void setTListItemDAO(TListItemDAO listItemDAO) {
DynaListItems.listItemDAO = listItemDAO;
}
private static String defValueTemplate = "defaultItems.ftl";
public static String getDefValueItems(String webComName,String defValue){
try {
Configuration cfg = FreemarkerManager.getConfiguration();
Template template = cfg.getTemplate(defValueTemplate);
List tmp=listItemDAO.getCommonItems(webComName);
//最终输出的位置
Writer out = new StringWriter();
//数据模型
Map rootMap = new HashMap();
rootMap.put("items",tmp );
rootMap.put("defaultValue",defValue );
//模版引擎解释模版
template.process(rootMap, out);
return out.toString();
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
}
使用之前要注册函数,使用tld文件注册,主要代码如下:
<function>
<name>getDefValueItems</name>
<function-class>com.web.views.DynaListItems</function-class>
<function-signature>java.lang.String getDefValueItems(java.lang.String,java.lang.String)</function-signature>
</function>
jsp页面调用:第二个参数就是保留默认值。
<select name="statu">
${edwin:getDefValueItems("CDDocStatu",CDDocManageForm.statu)}
</select>
以后使用就可以很简单地在页面使用三行代码搞定一个下拉列表了。如果没有特殊需求完全可以变成一行代码。