我正在开发一个SpringMVC 3和Roo项目。现在有一个Web层的死胡同。基本上这是一个类型转换问题,让我很生气
我尝试在迭代表行列表时传递记录计数器(这里是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)不是一种String类型?我以为JSTL可以自动转换它。但是,我知道我使用三个变量来组成组件名称可能不是一个好主意,但我不明白这个例外,在这里,请帮忙,非常感谢!
2012年5月14日下午6:39:59 org.apache.catalina.core.StandardWrapperValve调用 严重:Servlet [OptiVLM-CarrierWeb]的Servlet.service()在路径[/ OptiVLM-CarrierWeb]的上下文中引发异常[请求处理失败;嵌套异常是org.apache.tiles.impl.CannotRenderException:ServletException,包括带有根本原因的路径'/WEB-INF/layouts/default.jspx'。 javax.el.PropertyNotFoundException:在类型java.lang.String上找不到属性“0” 在javax.el.BeanELResolver $ BeanProperties.get(BeanELResolver.java:237) 在javax.el.BeanELResolver $ BeanProperties.access $ 400(BeanELResolver.java:214) 在javax.el.BeanELResolver.property(BeanELResolver.java:325) 在javax.el.BeanELResolver.getValue(BeanELResolver.java:85) 在javax.el.CompositeELResolver.getValue(CompositeELResolver.java:67)
答案 0 :(得分:2)
此异常表示${formBacking}
实际是java.lang.String
,而不是数组或List
,其中括号表示法的索引访问将起作用。< / p>
事实上,你在标签上将它指定为普通的香草字符串:
<field:complex ... formBacking="formSettings" />
可能你的意思是它是一个EL表达式:
<field:complex ... formBacking="${formSettings}" />
您仍然需要确保它确实是一个数组或List
。