【问题标题】:using <form> within <foreach> a few time在 <foreach> 中使用 <form> 几次
【发布时间】:2013-05-27 13:59:14
【问题描述】:

我对 Spring 很陌生,我正在尝试使用 Spring MVC + JSP + JSTL。我的目标是制作包含用户列表的 JSP,并允许将每个用户与其他用户分开编辑。所以我认为我应该为列表中的每个用户使用单独的 &lt;form&gt; 标记和单独的 &lt;sumbit&gt; 按钮,我的 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:既不是BindingResult也不是plain bean 名称“userList [javax”的目标对象可作为请求提供 属性

我对 Spring 和 web 编程也完全不感兴趣。如有任何帮助,我将不胜感激。

【问题讨论】:

    标签: java spring spring-mvc jstl


    【解决方案1】:

    你对 ${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>
    

    【讨论】:

      【解决方案2】:

      我不明白您为什么要使用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>
      

      根据你的用户类是用户。

      【讨论】:

      • 那是因为我是菜鸟 :) 谢谢!你绝对是对的!所以并非一切都有效!谢谢你:)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-06-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-22
      • 2019-06-01
      相关资源
      最近更新 更多