4

私はSpringが初めてで、Spring MVC + JSP + JSTLを使用しようとしています。私の目標は、ユーザーのリストを含む JSP を作成し、各ユーザーを他のユーザーとは別に編集できるようにすることです。<form>したがって、リスト内のすべてのユーザーに対して個別のタグと個別のボタンを使用する必要があると思います。<sumbit>私の JSP は次のようになります。

<c:forEach items="${userList}" var="currentUser" varStatus="index">
        <form:form method="post" action = "edit" commandName="userList[${index}]">
        <tr>
            <td><form:input path = "userList[${index}].login" value = "${currentUser.login}" /></td>
            <td><form:input path = "userList[${index}].password" value = "${currentUser.password}" /></td>
            <td><form:input path = "userList[${index}].smtpServer" value = "${currentUser.smtpServer}" /></td>
            <td><form:input path = "userList[${index}].popServer" value = "${currentUser.popServer}" /></td>
                <form:hidden path="userList[${index}].id" value=""/>
            <td>
                <a href="delete/${user.id}"><spring:message code="label.delete" /></a>
            </td>
        </tr>
           <input type="submit" value = "edit"> 
        </form:form>
    </c:forEach>

「編集」ボタンを押すことで、各ユーザーを個別に編集できるようにするという考えです。もちろん、このコードは機能しません。それは私に例外を与えます:

java.lang.IllegalStateException: Bean 名 'userList[javax' の BindingResult もプレーン ターゲット オブジェクトも要求属性として使用できません

私は、Spring と Web プログラミングについても完全に初心者です。どんな助けにも感謝します。

4

2 に答える 2

5

${index} の使用は、あなたが考えているものではありません。現在のアイテムのインデックスを取得するには、「.index」を varStatus 変数に追加する必要があります...この場合、${index.index} になります。わかりやすくするために、varStatus に index 以外の名前を付けることを検討してください...

<c:forEach items="${userList}" var="currentUser" varStatus="uStatus">
    <form:form method="post" action = "edit" commandName="userList">
    <tr>
        <td><form:input path = "userList[${uStatus.index}].login" value = "${currentUser.login}" /></td>
        <td><form:input path = "userList[${uStatus.index}].password" value = "${currentUser.password}" /></td>
        <td><form:input path = "userList[${uStatus.index}].smtpServer" value = "${currentUser.smtpServer}" /></td>
        <td><form:input path = "userList[${uStatus.index}].popServer" value = "${currentUser.popServer}" /></td>
            <form:hidden path="userList[${uStatus.index}].id" value=""/>
        <td>
            <a href="delete/${currentUser.id}"><spring:message code="label.delete" /></a>
        </td>
    </tr>
       <input type="submit" value = "edit"> 
    </form:form>
</c:forEach>

これは、ユーザーごとに異なるフォームを使用する意味がないことに注意してください...しかし、一度にすべてのユーザーを編集したいとしましょう....

<form:form method="post" action = "edit" commandName="userList">
    <c:forEach items="${userList}" var="currentUser" varStatus="uStatus">

    <tr>
        <td><form:input path = "userList[${uStatus.index}].login" value = "${currentUser.login}" /></td>
        <td><form:input path = "userList[${uStatus.index}].password" value = "${currentUser.password}" /></td>
        <td><form:input path = "userList[${uStatus.index}].smtpServer" value = "${currentUser.smtpServer}" /></td>
        <td><form:input path = "userList[${uStatus.index}].popServer" value = "${currentUser.popServer}" /></td>
            <form:hidden path="userList[${uStatus.index}].id" value=""/>
        <td>
            <a href="delete/${currentUser.id}"><spring:message code="label.delete" /></a>
        </td>
    </tr>

    </c:forEach>
    <input type="submit" value = "edit"> 
</form:form>
于 2014-04-09T14:44:28.660 に答える
1

userList[${index}]ユーザーごとに異なるフォームがあるため、なぜ使用しているのかわかりません。とにかく、あなたのコードはこの行では正しくありませんcommandName="userList[${index}]"

これが私が提案するものです:

<c:forEach items="${userList}" var="currentUser" varStatus="index">
    <form:form method="post" action = "edit" commandName="user">
    <tr>
        <td><form:input path = "login" value = "${currentUser.login}" /></td>
        <td><form:input path = "password" value = "${currentUser.password}" /></td>
        <td><form:input path = "smtpServer" value = "${currentUser.smtpServer}" /></td>
        <td><form:input path = "popServer" value = "${currentUser.popServer}" /></td>
            <form:hidden path="id" value=""/>
        <td>
            <a href="delete/${user.id}"><spring:message code="label.delete" /></a>
        </td>
    </tr>
       <input type="submit" value = "edit"> 
    </form:form>
</c:forEach>

あなたのユーザークラスはユーザーです。

于 2013-05-27T14:07:33.057 に答える