select标签和map的综合运用小结

select标签和map的综合运用小结

因为工作接触到的是一些传统界面,所有的JSP编码也相对传统,当面对客户需求变更的时候,可能仅仅是加一个字段,但是却需要我修改很多的界面,在后来不断的开发,总结后,针对界面上select标签的一些显示和处理给出了一定的优化,反正在ssh框架和springmvc项目中都是可以用到的,小弟刚从事软件开发一年,还处于入门级别的。只是把自己的一点经验拿出来做做分享。还望前辈们多多指点。

在一个JSP中,常常在select标签下有如下的代码

第一境界:

<select name="XXXX" >
          <option value="">=请选择=</option>
          <option value="1" c:if test="${object.value=='1'}">selected</c:if>>名称1</option>
          <option value="2" <c:if test="${object.value=='2'}">selected</c:if>>名称2</option>
          <option value="3" <c:if test="${object.value=='3'}">selected</c:if>>名称3</option>
          <option value="4" <c:if test="${object.value=='4'}">selected</c:if>>名称4</option>
          <option value="5" <c:if test="${object.value=='5'}">selected</c:if>>名称5</option>
          <option value="6" <c:if test="${object.value=='6'}">selected</c:if>>名称6</option>
          <option value="7" <c:if test="${object.value=='7'}">selected</c:if>>名称7</option>
          <option value="8" <c:if test="${object.value=='8'}">selected</c:if>>名称8</option>
          <option value="9" <c:if test="${object.value=='8'}">selected</c:if>>名称9</option>
</select>

而在对应的显示中又会有

 <c:choose>
          <c:when test="${object.value=='1'}">名称1</c:when>
          <c:when test="${object.value=='2'}">名称2</c:when>
          <c:when test="${object.value=='3'}">名称3</c:when>
          <c:when test="${object.value=='4'}">名称4</c:when>
          <c:when test="${object.value=='5'}">名称5</c:when>
          <c:when test="${object.value=='6'}">名称6</c:when>
          <c:when test="${object.value=='7'}">名称7</c:when>
          <c:when test="${object.value=='8'}">名称8</c:when> 
          <c:when test="${object.value=='9'}">名称9</c:when>
   </c:choose>

在传统的项目中,难免再在设计初期会有这样的设计,单据的状态,一个表月另外一个表的关联查询,为了节省数据库的空间,常常用数字去代替字符串,这是常见的现象,对随着时间的推移,客户对流程的变更,对对象属性的变更,往往一个小小的变化,需要我们区所有带有这些标签的jsp去复制粘贴代码,重复而无意义,但是很花时间。

第二境界:
在这个时候可以考虑采取 map的方式来控制。
首先 声明 静态不可修改类 这里采用的是LinkedHashMap 是为了控制顺序,尤其是当key为 负数的时候

public class Constant{
 public static final Map<String,String> _maps = new LinkedHashMap<String,String>(){
            {put("1","名称1");}     
            {put("2","名称2");}     
            {put("3","名称3");}         
            {put("4","名称4");}     
            {put("5","名称5");}   
            {put("6","名称6");} 
            {put("7","名称7");} 
            {put("8","名称8");} 
            {put("9","名称9");}      
};
}

然后在对应的跳到每个jsp前的ACTION或CONTROLLER中 加入这个对象
requst.setAttribute(“maps ”,Constant.maps );或者mav.addObject(“maps ”,Constant.maps );
这样在jsp中可以
这样引用

<select name="XXXX" >
     <option value="">=请选择=</option>
    <c:forEach items="${maps }" var="map "> 
               <option value="${map.key>" <c:if test="${object.value eq map.key}" >selected<c:if> >${map.value></option>
    </c:forEach>
</select>

显示的时候

${maps[object.value]};

相对以前的代码来说大大减小了JSP的代码量,而且在发生需求变更的时候,只要去改下配置的这个map就可以了。不用再担心jsp有漏改或错改的现象。

而在当这种map普遍使用后,我们的ACTION或CONTROLLER层的代码总有 request.set或mav.add这样的重复代码,而这些map又是经常使用的,所以可以在服务一启动的时候

第三境界:
把他直接加到 application中,或者自己将其对应的封装,这样不仅仅简化了jsp的代码量,也减少了控制层的代码量。

关于三种常用MAP的测试,常用的map为hashmap,treemap。而今天使用了linkedhashmap,发现这个map是目前来说最符合我工作需要的。所写即所得,我如何写入的,他就如何排序。以下是简易的代码demo。

public static final Map<String,String> _HashMap = new HashMap<String,String>(){
        {put("-0","aa");}
        {put("0","+aa");}
        {put("-1","bb");}
        {put("1","+bb");}
        {put("-2","cc");}
        {put("2","+cc");}

    };
    public static final Map<String,String> _TreeMap = new TreeMap<String,String>(){
        {put("-0","aa");}
        {put("0","+aa");}
        {put("-1","bb");}
        {put("1","+bb");}
        {put("-2","cc");}
        {put("2","+cc");}

    };
    public static final Map<String,String> _LinkedHashMap = new LinkedHashMap<String,String>(){
        {put("-0","aa");}
        {put("0","+aa");}
        {put("-1","bb");}
        {put("1","+bb");}
        {put("-2","cc");}
        {put("2","+cc");}
    };
    public static void main(String args[]){
        System.out.println("------hashMap--------");
        for(String key:_HashMap.keySet()){
            System.out.println(_HashMap.get(key));
        }
        System.out.println("------TreeMap--------");
        for(String key:_TreeMap.keySet()){
            System.out.println(_HashMap.get(key));
        }
        System.out.println("------_LinkedHashMap--------");
        for(String key:_LinkedHashMap.keySet()){
            System.out.println(_LinkedHashMap.get(key));
        }

输出结果
——hashMap——–
+cc
+bb
aa
+aa
cc
bb
——TreeMap——–
aa
bb
cc
+aa
+bb
+cc
——_LinkedHashMap——–
aa
+aa
bb
+bb
cc
+cc
使用linkedhashmap可以在修改和显示流程状态上起到事倍功半的效果。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值