①在web.xml中添加监听,启动的时候初始化。
<!--Web ApplicationContext 载入,继承处Spring的ApplicationContextListener -->
<listener>
<listener-class>cn.sccl.common.web.StartupListener</listener-class>
</listener>
②我们需要在启动Tomcat的时候,初始化bizCode数据
package cn.sccl.common.web;
import java.util.List;
import java.util.Map;
import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.context.ApplicationContext;
import org.springframework.web.context.ContextLoaderListener;
import org.springframework.web.context.support.WebApplicationContextUtils;
import cn.sccl.common.service.BizCodeManager;
import cn.sccl.common.web.util.Log4jWebConfigurer;
import cn.sccl.pms.model.Division;
import cn.sccl.pms.model.DivisionQuery;
import cn.sccl.pms.service.DivisionManager;
public class StartupListener extends ContextLoaderListener implements ServletContextListener
{
private final Log log = LogFactory.getLog(getClass());
@Override
public void contextInitialized(ServletContextEvent event){
super.contextInitialized(event);
log.debug("contextInitialized");
ServletContext context = event.getServletContext();
setupContext(context);
// init : location of the log4j config file & refresh interval for
// checking the log4j config
Log4jWebConfigurer.initLogging(event.getServletContext());
}
protected void setupContext(final ServletContext context) {
ApplicationContext ctx = WebApplicationContextUtils.getRequiredWebApplicationContext(context);
BizCodeManager bizCodeManager = (BizCodeManager) ctx.getBean(WebNames.BIZ_CODE_MANAGER);
Map<String, Map<String, String>> allBizCodes = bizCodeManager.list2map();
context.setAttribute(WebNames.BIZ_CODES, allBizCodes);
// 行政区划
DivisionManager divisionManager = (DivisionManager) ctx.getBean("divisionManager");
List<Division> divisions = divisionManager.query(new DivisionQuery());
context.setAttribute("divisions", divisions);
log.debug(allBizCodes);
}
@Override
public void contextDestroyed(ServletContextEvent event)
{
Log4jWebConfigurer.shutdownLogging(event.getServletContext());
}
}
③我们在jsp页面中自定义下拉标签来获取字典。
<sccl:selectBizCodes category="OrderOfDevRepair_Status" selected="${orderOfDevRepairQuery.status}" id="status" html="style='table_text'"/>
④selectBizCodes.tag
<%@ tag pageEncoding="GBK" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>
<%@ attribute name="category" required="true" %>
<%@ attribute name="id"%>
<%@ attribute name="name"%>
<%@ attribute name="onChange"%>
<%@ attribute name="html"%>
<%@ attribute name="selected"%>
<%@ attribute name="beside" %>
<c:set var="htmlId" value="${category}"/>
<c:if test="${not empty id}">
<c:set var="htmlId" value="${id}"/>
</c:if>
<c:set var="htmlName" value="${htmlId}"/>
<c:if test="${not empty name}">
<c:set var="htmlName" value="${name}"/>
</c:if>
<c:set var="htmlAttr" value=""/>
<c:if test="${not empty onChange}">
<c:set var="htmlAttr" value="onChange='${onChange}'"/>
</c:if>
<c:if test="${not empty html}">
<c:set var="htmlAttr" value="${htmlAttr}${html}"/>
</c:if>
<c:set var="beside" value="${beside}"></c:set>
<select class="form-control" id="${htmlId}" name="${htmlName}" ${htmlAttr}>
<option value="">--请选择--</option>
<c:forEach var="bizCodeKeyValue" items="${applicationScope.bizCodes[category]}">
<c:choose>
<c:when test="${empty beside}">
<option value="${bizCodeKeyValue.key}"<c:if test="${selected == bizCodeKeyValue.key}"> selected</c:if>>${bizCodeKeyValue.value}</option>
</c:when>
<c:otherwise>
<c:set var="exist" value="0"/>
<c:forEach var="item" items="${fn:split(beside,',')}">
<c:if test="${bizCodeKeyValue.key==item}">
<c:set var="exist" value="1"/>
</c:if>
</c:forEach>
<c:if test="${exist == 0}">
<option value="${bizCodeKeyValue.key}"<c:if test="${selected == bizCodeKeyValue.key}"> selected</c:if>>${bizCodeKeyValue.value}</option>
</c:if>
</c:otherwise>
</c:choose>
</c:forEach>
</select>
<!--
<select id="${htmlId}" class="select" name="${htmlName}" ${htmlAttr}>
<option value="">--请选择--</option>
<c:forEach var="bizCodeKeyValue" items="${applicationScope.bizCodes[category]}">
<c:if test="${bizCodeKeyValue.key != beside }">
<option value="${bizCodeKeyValue.key}"<c:if test="${selected == bizCodeKeyValue.key}"> selected</c:if>>${bizCodeKeyValue.value}</option>
</c:if>
</c:forEach>
</select>
-->
总结:
下拉标签的实现:在Tomcat启动的时候就将所有的字典表数据全部查询出来放到ServletContext中,然后在jsp中采用自定义标签,在标签中通过applicationScope来获取。
附录:
取session:
session.setAttribute("data",data);
然后el这样取:${sessionScope.data}
取application:
application.setAttribute("data", data);
然后el这样取:${applicationScope.data}
转载于:https://blog.51cto.com/jianboli/1918650