【问题标题】:Spring mvc form one to many formSpring mvc表单一对多表单
【发布时间】:2014-06-04 11:13:00
【问题描述】:

我有 3 个实体用户、部门和地址。用户可以有多个地址。现在我对构建这个用例的表单有疑问。

我可以直接访问部门,因为它是对象。但我不知道如何引用地址属性,因为它是一个集合。

class Users
{
  private int id;
  private String name;
  private Department dept;

  @OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
    @JoinColumn(name = "userId", nullable = false)
    private Set<Address> addresses = new HashSet<Address>(0);

  //Getters and setters
}

MyForm.jsp

<%@taglib uri="http://www.springframework.org/tags/form" prefix="form"%>
<html>
<head>
    <title>Spring 3 MVC Series - Contact Manager</title>
</head>
<body>
<h2>Contact Manager</h2>
<form:form method="post" commandName="userObject" action="addPerson.html">

    <table>
    <tr>
        <td><form:label path="name">Name</form:label></td>
        <td><form:input path="name" /></td> 
    </tr>
    <tr>
        <td><form:label path="userObject.dept.deptName">Department Name</form:label></td>
        <td><form:input path="userObject.dept.deptName" /></td>
    </tr>
    <tr>
        <td><form:label path="userObject.addresses.street">Street Address</form:label></td>
        <td><form:input path="userObject.addresses.street" /></td>
    </tr>

    <tr>
        <td colspan="2">
            <input type="submit" value="Add Contact"/>
        </td>
    </tr>
</table>  

</form:form>

如何使用对象访问我的jsp表单中的地址属性。我在 userObject.addresses.street 的 jsp 中遇到问题

【问题讨论】:

    标签: java spring jsp spring-mvc spring-form


    【解决方案1】:

    我会使用 jstl 标签库:

     <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    

    然后使用foreach

    然后做一些类似的事情:

    <c:forEach var="item" items="${userObject.addresses}">
      ${item.street}
    </c:forEach>
    

    【讨论】:

      【解决方案2】:

      您无法访问 List,因为它是单个 Object,因此您需要遍历 Useradresses 并显示街道或每条街道。

      <%@taglib uri="http://www.springframework.org/tags/form" prefix="form"%>
      <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
      <html>
      <head>
        <title>Spring 3 MVC Series - Contact Manager</title>
      </head>
      <body>
        <h2>Contact Manager</h2>
        <form:form method="post" commandName="userObject" action="addPerson.html">
      
        <table>
          <tr>
            <td><form:label path="name">Name</form:label></td>
            <td><form:input path="name" /></td> 
          </tr>
          <tr>
            <td><form:label path="userObject.dept.deptName">Department Name</form:label></td>
            <td><form:input path="userObject.dept.deptName" /></td>
          </tr>
          <tr>
            <c:forEach var="address" items="${userObject.getAddresses()}">
              <td><form:label path="userObject.addresses.street">Street Address</form:label></td>
              <td><form:input path="userObject.addresses.street" />${address.street}</td> 
      
          </tr>
          <tr>
            <td colspan="2">
              <input type="submit" value="Add Contact"/>
            </td>
          </tr>
        </table>  
      
        </form:form>
        ...
      </body>
      </html>
      

      【讨论】:

      • 我正在这样做
    • 该字段不可见
    • 哪个字段没有准确显示? ${meCategory} 指的是什么?
    • ${meCategory} 是我正在为其设置列表的模型属性。下拉不可见,当我使用 address.addressLocation
    • 你让我很困惑原来的帖子描述和你最近的评论。您正在使用commandName 属性来映射您的bean,那么您在说什么modelAttribute?否则,&lt;form:select&gt;&lt;form:options /&gt;&lt;/form:select&gt; 用于显示地图中的条目列表(键作为选项的值,值作为显示字段)所以我认为它可以适合您的 Address 对象号?跨度>
    • 猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-10-14
      • 1970-01-01
      • 2012-10-25
      • 1970-01-01
      • 1970-01-01
      • 2023-03-25
      • 1970-01-01
      相关资源
      最近更新 更多