在类型java.lang.String上找不到属性“0”

时间:2012-05-14 23:02:30

标签: spring jsp spring-mvc tags jsp-tags

我正在开发一个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)

1 个答案:

答案 0 :(得分:2)

此异常表示${formBacking} 实际java.lang.String,而不是数组或List,其中括号表示法的索引访问将起作用。< / p>

事实上,你在标签上将它指定为普通的香草字符串:

<field:complex ... formBacking="formSettings" />

可能你的意思是它是一个EL表达式:

<field:complex ... formBacking="${formSettings}" />

您仍然需要确保它确实是一个数组或List