这是一个学术问题,因为我有一个解决方案,有点,下面,但我很好奇是否有办法做到这一点。
我对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;。