【发布时间】:2012-05-22 11:00:03
【问题描述】:
我正在开发一个 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 [OptiVLM-CarrierWeb] 的 Servlet.service() 在路径 [/OptiVLM-CarrierWeb] 的上下文中抛出异常 [请求处理失败;嵌套异常是 org.apache.tiles.impl.CannotRenderException: ServletException include path '/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 的属性,而不是 0 不是字符串。 formBacking 属性是否需要是 EL 表达式而不仅仅是单词“formSettings”?
-
您好 Dave 和 CaptionAwesomePants,对于迟到的反馈,我们深表歉意。是的,实际上我应该使用 name="${formBacking}[${cnt}].id" 而不是 name="${formBacking[cnt].field}" 因为 formBacking 应该是 String 以外的变量。方括号“[]”不应该是变量的一部分。
标签: spring jsp spring-mvc tags jsp-tags