【问题标题】:Passing object from JSP to spring controller将对象从 JSP 传递到 Spring 控制器
【发布时间】:2011-11-18 23:41:17
【问题描述】:

我在 .JSP 页面中有下表:

<form:form method="post" action="update.dtt" id="contactForms" modelAttribute="contactForms" >
<c:forEach items="${pList}" var="cf">
<tr>
<td align="center"><c:out value="${cf.fname}" /></td>
<td align="center"><c:out value="${cf.lname}" /></td>
<td align="center"><c:out value="${cf.cprovider}" /></td>
<td align="center"><c:out value="${cf.id}" /></td>
<td align="center"><c:out value="${cf.phone}" /></td>
<td><input type="submit" value="Update Contact"/></td>
</tr>
</c:forEach>
</form:form>

我正在遍历列表(这是对象列表)并为列表中的每条记录添加更新联系人按钮。单击更新按钮时,如何将特定实例(对象)传递给控制器​​?

我的控制器如下。但是我得到了空值。

@RequestMapping(value = "/user/update.dtt", method = RequestMethod.POST)
public String updateView(@ModelAttribute("contactForms") Banks bank,      HttpServletRequest request, HttpServletResponse response, Model model) {

    System.out.println("*First Name*" + bank.getFname());
//......

    return "detailBank"; //name of jsp file
}

【问题讨论】:

    标签: spring jsp


    【解决方案1】:

    对于要发送到服务器的每条信息,您都需要一个隐藏的表单域。

    因为每一行都有一个按钮,所以每一行也应该有一个表单。所以&lt;form:form&gt;&lt;/form:form&gt; 行应该在&lt;c:forEach&gt; 里面,而不是外面。

    【讨论】:

    • 我曾尝试在 for 循环中使用
      。它仍然返回 Null。
    • 您的表单中没有任何表单域。您需要在表单中添加隐藏字段。我在回答中告诉过你。如果您不发送任何内容,您如何期望 Spring 猜测联系人是什么?
    • 知道了,谢谢。如果我没有使用
      并且有链接,即 而不是按钮怎么办?
    • 您必须在查询字符串中传递参数: ... 更新
    • 好的。我要实现的目标是当用户单击更新按钮时,会打开一个新页面,其中包含文本框中预先填充的现有数据。根据你上面说的解决方案。我需要传递所有 5 个变量才能填充文本框。有没有其他方法可以直接发送整个对象而不是单个变量?
    【解决方案2】:

    你需要按位置引用实例,按位置访问列表中的元素。

    list[i].name
    list[i].surname
    

    list 是你的 pojo 中的元素。

    【讨论】:

    • 这根本不提供原始问题的解决方案。
    猜你喜欢
    • 1970-01-01
    • 2012-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-20
    相关资源
    最近更新 更多