巧用spring配置常量

    技术2022-05-11  49

    巧用spring配置常量 --常量也可以DI   有一些常量数据类型,比如货币,省份,转帐类型,等等。我们程序里都是用他们的代码进行运算的,但在页面显示的时候只能用他的名称显示给用户看。   因此有下面特点: 1有键值对, 2不经常变化(支持偶尔有变化), 3常用在页面做下拉选择, 4在编辑页面的时候此选择项又必须默认选中, 5键值关系固定。   碰到这种情况,有很多解决方法。比如可以在页面硬编码,把每个常量一一在页面写死,这样做的后果是代码很多,如果多个页面都包含此常量那么增加了维护的难度,另外一种是使用 < fmt:message /> +属性文件来处理,虽然有所改善,但不能使用 <c:if> 测试和比较。下面我推荐一种方法,希望能对大家有所帮助。实现步骤如下:   1、   写一个公用工具类,所有的属性通过Spring启动时候注入 public class MyConstantUtils {            public static MyConstantUtils obj;          public MyConstantUtils (String string) {                    obj = this;                  }          /**           * 货币类型 键值对 Spring 启动的时候注入           */          public Map currTypes;          public Map getCurrTypes() {                    return currTypes;          }          public void setCurrTypes(Map currTypes) {                    this.currTypes = currTypes;          }        // 其他常量 …… } 2、   配置文件web-xxx.xml,建议用一个单独的文件来配置常量。    <!--     在配置文件中配置常量        -->    <bean id="currTypes" class="java.util.HashMap">        <constructor-arg>            <map>               <entry key="USD">                   <value> 美元 </value>               </entry>               <entry key="HKD">                   <value> 港元 </value>               </entry>               <entry key="EUR">                   <value> 欧元 </value>               </entry>               <entry key="JPY">                   <value> 日元 </value>               </entry>               <entry key="AUD">                   <value>AUD</value>               </entry>               <entry key="RMB">                   <value> 人民币 </value>               </entry>            </map>        </constructor-arg>     </bean>     <bean id="toolsUtils" class="com.xyz.util.MyConstantUtils ">        <constructor-arg>            <value> 开始初始化工具类对象 </value>        </constructor-arg>      <!--     将常量注入单例对象中        -->        <property name="currTypes">            <ref bean="currTypes"/>        </property>     </bean>   3、      在jsp中,由于我们用的是springMVC,一般定义一个包含一些常用标签的jsp,如文件taglib.jsp: <!--   taglibs.jsp   --> <%@ taglib prefix = "c" uri = "http://java.sun.com/jstl/core" %> <%@ taglib prefix = "fmt" uri = "http://java.sun.com/jstl/fmt" %> <% request.setAttribute( "MyConstantUtils" ,com.xyz.util.MyConstantUtils.obj); %>   在上面的jsp中顺便将我们的静态对象保存在request中,在其他jsp文件中include进来即可使用我们在配置文件中的常量,如下面: <%@ include file = "taglibs.jsp" %> ……… < tr align = "center" >                             < td height = "30" align = "left" >                             < div align = "right" > 币种 * </ div >                             </ td >                             < td width = "78%" height = "30" align = "left" > < select name = "currType" >     < c:forEach items = "${MyConstantUtils.currTypes}"var="currType">     < option value = '<c:outvalue="${currType.key}"/>'<c:iftest='${currType.key == " RMB "} '>selected</c:if>><c:out     value = "${currType.value}"/></option>     </ c:forEach >     </ select > </ td > </ tr > ……………….   相对使用 < fmt:message /> +属性文件 有下面好处: 1、可以遍历所有的选项,也可以不需要遍历,即可只取出某一个。例如当在查询列表中从后台传来的是货币代码,那么直接取出显示: < td >< c:out value = "${MyConstantUtils.currTypes[dep.currType]}"/></td>   2、回显时可以 <c:if> 测试被选中的选项,如上面的代码将 RMB改为变量即可 3、不需要专门的读取解析配置文件 4、类和jsp中都可以方便使用 5、可扩展性好,虽然是常量但也有可能变化,如增加一个新的货币的时候,只修改配置文件即可,jsp不用修改 6、使得jsp代码更加简洁   缺点时:不完全支持国际化  

    最新回复(0)