【问题标题】:How do I map one to many relationship on a JSP page and store them while submitting the page?如何在 JSP 页面上映射一对多关系并在提交页面时存储它们?
【发布时间】:2014-11-15 14:49:38
【问题描述】:

假设,我有一个班级Student,另一个班级是BooksStudent 类与Books 具有一对多关系。

现在,我想从用户那里获取学生姓名、城市等数据,并在同一页面上添加Books 详细信息,例如书名、作者、价格等。用户可以添加多个Books 详细信息(显然)。然后,我想提交包含所有嵌套对象(书籍)数据以及父级的页面。我该怎么做?

只要满足要求,您可以采取任何其他示例而不是学生和书籍。

这是我的 JSP 文件:

// here student is a parent object and book is a child object having name,author etc details.

<body>
  ${company} form
  <form:form commandName="student" action="../homeController/getDetails"
      id="studentForm">
    Name: 
    <form:input path="name" id="name" />
    City:
    <form:input path="city" id="city" />
    <form:input path="books.bookName" id="bookname"/>
    <form:input path="books.bookAuthor" id="bookauthor"/>
    <button type="submit" name="submit" style="width: 50px; height: 20px;"
        value="Submit">Submit</button>
  </form:form>
</body>

如果你能给我一个好的链接,那也将是一个很大的帮助。

【问题讨论】:

  • 你有没有尝试过什么?如果是这样,请将代码添加到问题中。这个问题也太宽泛了。例如,您是否使用任何 ORM 框架,例如 JPA/Hibernate?
  • 是的,我正在使用休眠。

标签: java spring hibernate jsp


【解决方案1】:

你必须为它编写javascript,但我会给你这样做的想法。

在你的 JSP 中有一个表单,比如说name=StudentDataForm。以这种形式,您可以执行以下操作 -

<form name="StudentDataForm" action="/submitStudentData.htm" method="post">
<div id="student1">
Name : <input type="text" id="studentname1" name="studentname" >
City : <input type="text" id="studentcity1" name="city" >
<div id="books>
Books : <input type="text" id="student1book1" name="bookstudent1" >
Books : <input type="text" id="student1book2" name="bookstudent1" >
</div>
</div>
<div id="student2">
Name : <input type="text" id="studentname2" name="studentname" >
City : <input type="text" id="studentcity2" name="city" >
<div id="books>
Books : <input type="text" id="student2book1" name="bookstudent2" >
Books : <input type="text" id="student2book2" name="bookstudent2" >
Books : <input type="text" id="student2book3" name="bookstudent2" >
Books : <input type="text" id="student2book4" name="bookstudent2" >
</div>
</div>
</>
</form>

概念是保持name 相同的实体,例如学生的所有书籍都具有name = bookstudent2。然后在您的控制器或 servlet 上,您可以获取数据为

String[] books = request.getParameterValues("bookstudent2");

通过获取command object 的操作,您只能在 UI 上显示它(通过使用正确路径在命令对象中迭代 Student 或 Books)。但是你不能反过来做,这意味着你不能在 UI 上操作数据并通过命令对象发送它。

如果不使用 javascript,我怎么能做到这一点。如何在提交表单时将子对象的数据与父对象绑定?

如果你有固定数量的学生和固定数量的书籍,你可以做你想做的事。看看this link。但是,如果您想动态添加 Student 和 Books,就我的理解而言,您必须使用我上面描述的方式。

【讨论】:

  • 如何在不使用 javascript 的情况下做到这一点。提交表单时如何将子对象的数据与父对象绑定?
  • 动态添加数据没有。请参阅更新后的答案和其中的链接。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-06-06
  • 2011-04-01
  • 1970-01-01
  • 2020-09-02
  • 1970-01-01
  • 2016-11-08
  • 2023-03-19
相关资源
最近更新 更多