如何使用单个查询从具有不同元素的JSP在表中插入多个记录

时间:2012-06-11 17:14:34

标签: hibernate spring-mvc model insert

我正在使用Spring MVC和Hibernate。 我的页面有一个按钮,用于创建一个新的表行(通过jQuery),该行由输入组成,允许用户选择将插入数据库的新数据。其中一些输入是组合框。我的组合框看起来像这样:

<form:select path="ProductName">
  <form:option>some list<form:option>
</form:select>

单个表行中可能有4到5个不同的框,我可以通过多次单击按钮来添加多个输入行。单击Save后,行中的所有项都应插入数据库表中。

由于用户可以一次发送多行,因此我们对路径属性感到困惑,因为我们为JSP中的每个spring标记提供了路径。在这里,我想插入一列,多行和多行可以是任意数字,所以我应该怎么做呢?

请帮助我;我真的被卡住了。

1 个答案:

答案 0 :(得分:1)

更新答案

查看此答案:Spring MVC: processing values from timesheet - multiple objects

基本思想是表单支持对象是List个对象,而不仅仅是单个对象。如果您只是让他们编辑现有对象,这对您有用。由于您允许用户根据需要创建任意数量的行,因此您必须执行一些特殊操作。

假设您将表单支持对象更改为名为List的{​​{1}},并且每个products对象都具有属性Product。您的JSP代码将更改为:

productName

呈现HTML时,您会看到如下HTML:

<c:forEach items="${products}" varStatus="row">
  <form:select path="products[${row.index}].productName">
    <form:option>some list<form:option>
  </form:select>
</c:forEach>

想法#1

每次用户点击添加行时,都会提交表单。在服务器上,将另外一个填充了默认值的对象添加到表单支持列表中,然后重新发送表单。这种方法有点令人头疼,但我知道你可以让它起作用。

想法#2

我不知道你是否可以像这样破解系统,但如果它有效,它会比Idea 1简单。当你创建一个新的HTML行时,解析{ {1}}属性并将1添加到索引。

jQuery示例:

<select path="products[0].productName">
  <option>some list<option>
</select>
<select path="products[1].productName">
  <option>some list<option>
</select>

想法#3

如果以前的想法不起作用或太复杂,我只会使用简单的HTML表单。使用纯HTML表单,您可以使用jQuery根据行索引为每个元素提供唯一的path参数(类似于Idea 2)。框架应该让您的生活更轻松,所以如果您遇到框架比底层语言/平台更难使用的角落情况,那么回到原始语言/平台是有意义的。


旧答案

首先,你的问题非常基本。你应该开始阅读文档,书籍,教程等,而不是简单地找到你需要的这一件事的快速修复,这样你就可以理解你正在使用的框架背后的架构。

其次,有很多方法可以做你想做的事情。如果您只是想获取表单数据并将其发送到服务器以保持不变,则可以进行简单的表单提交。如果您想要一些更复杂的表单处理,使用Spring MVC // This assumes that each row in the form has the class 'formRow' function addNewRow() { var pathAttr = $(".formRow:last").attr("path"); var pathIndex = parseIndex(pathAttr); var newIndex = parseIndex(pathIndex) + 1; var newRow = createNewRow(); //Creates HTML for new row // Set the path attribute with new index; would have to operate // on all form elements, since each has a path attribute $(newRow).attr("path", "products[" + newIndex + "]"); } function parseIndex(pathAttr) { var start = pathAttr.indexOf('['); var end = pathAttr.indexOf(']'); var indexStr = pathAttr.substring(start + 1, end); return new Number(indexStr); } 标签可能是一个很好的方法。 (注意:如果您使用JavaScript创建表单,则无法创建name标记,因为它们是JSP标记。此外,您可能不应该使用更复杂的JSP表单标记,如果您还不了解更基本的HTML标记。)如果您想在不刷新整个页面的情况下提交数据,可以使用Ajax调用。为了让任何人帮助您,我们需要知道您要做什么。就目前而言,您的问题似乎是将数据传输到服务器的不同方式的混合。

最重要的是,那里有大量的网络技术。如果您不首先了解基本的Web流,那么您不应该尝试做任何复杂的事情。在此之前,您需要了解客户端和服务器之间的区别。在客户端 - 服务器交互方面,您需要了解JavaScript,JSP和Spring MVC所处的位置。您应该阅读的一些内容是Spring MVC,HTML表单提交和Spring特定表单提交。

一些阅读:

Explanation of Client vs. Server

HTML forms

Ajax through JavaScript

Ajax through jQuery

Using the Spring MVC form tags(这是仅限服务器端

Another about Spring MVC

相关问题