1

私はSpringMVC3と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を返す)は文字列のタイプではないという非常に厄介な例外が発生しますか?JSTLは自動的に変換できると思いました。ただし、コンポーネント名を構成するために3つの変数を使用するのは良い考えではないかもしれませんが、この例外を理解していません。ここにあります。助けてください。どうもありがとうございました。

2012年5月14日18:39:59org.apache.catalina.core.StandardWrapperValveがSEVEREを呼び出します:パス[/OptiVLM-CarrierWeb]のコンテキストでサーブレット[OptiVLM-CarrierWeb]のServlet.service()が例外をスローしました[リクエスト処理に失敗しました; ネストされた例外はorg.apache.tiles.impl.CannotRenderExceptionです:パス'/WEB-INF/layouts/default.jspx'を含むServletException。]ルート原因javax.el.PropertyNotFoundException:プロパティ'0'がタイプjava.langで見つかりません.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)at javax.el.CompositeELResolver.getValue(CompositeELResolver.java:67)

4

1 に答える 1

2

この例外は、${formBacking}実際にはであり、ブレース表記によるインデックス付きアクセスが機能java.lang.Stringする配列または ではないことを示しています。List

実際、タグでプレーンなバニラ文字列として指定しています。

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

代わりに EL 式を意味していた可能性があります。

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

それが本当に配列またはList.

于 2012-05-15T03:28:16.000 に答える