我正在开发一个 SpringMVC 3 和 Roo 项目。现在有一个网络层死胡同。基本上这是一个类型转换问题,让我发疯
我尝试在迭代表行列表时传递记录计数器(这里是 SystemSettings 表,然后每一行都是系统设置)。在 jspx 文件中,我进行了以下循环:
<form:form action="${form_url}" method="post" modelAttribute="formSettings">
<c:forEach items="${settings}" var="item" varStatus="status">
<c:set value="${item.actionType}" var="type"/>
<c:set value="${item.name}" var="name"/>
<c:set value="${item.setting}" var="value"/>
<!-- -->
<field:complex field="setting" id="l_com_transoftinc_vlm_carrierweb_domain_systemsetting_${name}" object="${item}" setting="${value}" type="${type}" cnt="${status.count-1}" formBacking="formSettings" z="user-managed"/>
</c:forEach>
这样状态计数就可以将计数器值传递给“complex.tagx”。这里简化如下:
<jsp:directive.attribute name="cnt" type="java.lang.Integer" required="false" rtexprvalue="true" description="counter variable" />
<c:choose>
<c:when test="${fn:toLowerCase(type) eq 'checkbox'}">
<input type="checkbox" name="${formBacking[cnt].field}" value="TRUE" checked="${fn:toLowerCase(setting) eq 'true' ? 'checked' : ''}"/>
</c:when>
<c:when test="${fn:toLowerCase(type) eq 'inputbox'}">
<input type="input" name="${formBacking[cnt].field}" value="${setting}"/>
</c:when>
</c:choose>
我没有把所有的属性都放在这里以使代码部分过于冗长。但是我得到一个非常讨厌的异常告诉我计数器(当然在第一次循环中返回 0)不是字符串类型?我认为JSTL可以自动转换它。但是,我知道我使用三个变量来组成组件名称可能不是一个好主意,但是我不明白这个异常,在这里,请帮助,非常感谢!
2012 年 5 月 14 日下午 6:39:59 org.apache.catalina.core.StandardWrapperValve 调用严重:Servlet.service() 用于 servlet [OptiVLM-CarrierWeb] 在上下文中与路径 [/OptiVLM-CarrierWeb] 引发异常 [请求处理失败; 嵌套异常是 org.apache.tiles.impl.CannotRenderException: ServletException 包括路径'/WEB-INF/layouts/default.jspx'。] 根本原因 javax.el.PropertyNotFoundException: 在类型 java.lang 上找不到属性'0' .String at javax.el.BeanELResolver$BeanProperties.get(BeanELResolver.java:237) at javax.el.BeanELResolver$BeanProperties.access$400(BeanELResolver.java:214) at javax.el.BeanELResolver.property(BeanELResolver.java: 325) 在 javax.el.BeanELResolver.getValue(BeanELResolver.java:85) 在 javax.el.CompositeELResolver.getValue(CompositeELResolver.java:67)