呈顼I渝

复杂的jstl访问HashMap对象.

做项目里遇到jstl访问HashMap里的对象,网络上一般的例程无法满足.

网络上一般是

<%
Map<String,String> map2 = new HashMap();
map2.put("a","hello world");
map2.put("b","this is map");
request.setAttribute("map2",map2);
%>
<br>

键值对遍历<br>
<c:forEach var="item" items="${map2}">
${item.key} > ${item.value} <br>
</c:forEach>

这上面都是比较简单的使用.


的代码大致如下

<%

..........

List li = call.execProcedure(obj, SendUpdateFile.class);
List<SendUpdateFile> list = new ArrayList<SendUpdateFile>();
    // 遍历集合
    for (int i = 0; i < li.size(); i++) {
        SendUpdateFile ui = (SendUpdateFile) li.get(i);
        list.add(ui);
        //System.out.println(ui.toString());
    }
    Pagination p = new Pagination();
    p.setIndex(tmpcurrPage);
    p.setPageSize(tmppageSize);
    p.setTotle(call.getTotle());
    p.setData(list);
    request.setAttribute("upFiles", p);

........

HashMap<String, DealerBaseINF> list1 =  new HashMap<String, DealerBaseINF>();
    // 遍历集合
    for (int i = 0; i < li1.size(); i++) {
        DealerBaseINF ui = (DealerBaseINF) li1.get(i);
        list1.put("" + ui.getId(), ui);
    }
    request.setAttribute("dealers", list1);

%>

........

<td size="130px" align="left"><select name="delear" id="delear"
            style="width: 120px;">
            <option>请选择上游客户</option>            
            <c:forEach items="${dealers}" var="item"> 
                <option value="${item.key}">${item.value.name}</option>
            </c:forEach>
        </select>&nbsp;<font color="red">*</font>
</td>

.........

<c:forEach items="${upFiles.data}" var="li">
        <tr>
            <td align="center" class="tab_r1"><%=++i%></td>
            <td style="" align="center" width="10%" class="tab_r1"><input
                type="checkbox" id="rowId" name="rowId" value="${li.id}" /></td>
            <td align="center" class="tab_r1"> 
            <c:choose>
                   <c:when test="${li.delear > 0}">
                    ${dealers[li.delear].name}
                   </c:when>
                   <c:otherwise>
                                 无效上游客户
                   </c:otherwise>
            </c:choose>
            <td align="left" class="tab_r1">&nbsp;${li.fileName }</td>
            <td align="center" class="tab_r1">${li.ftpUpTime }</td>
            <td align="center" class="tab_r1">${li.disFlag }</td>
            <td align="center" class="tab_r1">${li.upOptor }</td>
        </tr>
    </c:forEach>

下面重点说

1:  <c:forEach items="${dealers}" var="item"> 
                <option value="${item.key}">${item.value.name}</option>

2: ${dealers[li.delear].name}

item.value返回的 DealerBaseINF 对象,  .name是DealerBaseINF的一个属性.

delear在数据实例中是DealerBaseINF主键的FK 外部应用键. 

${dealers[li.delear].name}表达意思就根据动态传入的外部引用键,获取

对应的名称.

思路来源于

如果知道key就直接写${map.key}
如果key是一个变量就写成${map[key]}
例如:
map.put("name", "zhang san");
String tempVal = "name";
${map.name}
${map[tempVal]}

由于[号内的值可以动态变化]所以就容易获得.

由于对jstl不是掌握太熟悉 其中我 测试了 ${dealers.$li.dealer.name},
${dealers[$li.dealer].name},  ${dealers["$li.dealer"].name},均
不对,当然有些直接是错误的写法,反正测试,测试,终于些正确了.

以后对访问复杂jstl有很大帮助.

posted on 2011-06-07 22:44  呈顼  阅读(1722)  评论(0编辑  收藏  举报

导航