使用freemarker实现下拉列表

时间:2022-10-12 10:12:06

只对下拉列表项进行构建,到底为什么不进行整体构建,只不过是某些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>

 

以后使用就可以很简单地在页面使用三行代码搞定一个下拉列表了。如果没有特殊需求完全可以变成一行代码。