检查JSTL循环中的参数键名称或对象键,例如.hasOwnProperty

时间:2016-08-19 19:03:54

标签: jsp jstl

这是一个学术问题,因为我有一个解决方案,有点,下面,但我很好奇是否有办法做到这一点。

我对JSTL有点绿,但到目前为止看起来很简单。我的.jsp上有一个对象,由Spring MVC提供,其中包含一个List<Map<String,Object>>

typea : value1
typea : value2
typeb : value3
typeb : value4
...

typea 的对象将进入一个html选择控件,因为 typeb 的选项和对象将进入第二个html选择控件。

我看起来像这样:

<c:if test="${!empty objectlist}">
    <c:if test="${!empty objectlist['typea']">
        <c:forEach items="${objectlist['typea']}" var="typeval">
            <option value="<c:out value="${typeval}"/>">
                <c:out value="${typeval}" />            
        </c:forEach>
    </c:if>
</c:if>

我遇到了这种方法的错误:Java.lang.NumberFormatException:对于输入字符串:&#34; typea&#34;。

我也尝试过测试 objectlist.typea ,它没有产生错误但也没有输出。

而且,我还尝试过依赖像 object.typea 这样的表达式的真实状态而不对其进行测试,期望将 items 设置为对象。 typea 可以安静地分配 typeval 并忽略列表中的 typeb 实例。但它没有,它只是产生了同样的错误。

我已经查看了许多用于处理循环和变量范围的JSTL示例,但是没有看到像JSTL的.hasOwnProperty这样的东西。

解决方案(种类)

目前,我已经通过将对象分成两个不同的列表对象来解决问题,以满足特定目的。它被用来支持同样使用同一个应用程序的Android应用程序,所以我不想弄乱已经存在的东西。

JSTL现在看起来像:

<c:if test="${!empty objectlist}">
    <c:forEach items="${objectlist}" var="typevar">                                     
        <option value="<c:out value="${typevar.typea}"/>">
        <c:out value="${typevar.typea}" />                                      
    </c:forEach>                                    
</c:if>

如果可能的话,看看如何使用JSTL进行等效的.hasOwnProperty检查会很有趣。我更倾向于以正确的方式做到这一点而不仅仅是&#34;什么有效?&#34;。

0 个答案:

没有答案