2

我正在将 Spring MVC 与 Hibernate 一起使用。我的页面有一个按钮,可以创建一个新的表格行(通过 jQuery),它由输入组成,允许用户选择将插入数据库的新数据。其中一些输入是组合框。我的组合框如下所示:

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

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

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

请在这件事上给予我帮助; 我真的被困住了。

4

1 回答 1

1

更新的答案

看看这个答案:Spring MVC: processing values from timesheet - multiple objects

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

假设您将表单支持对象更改为List被调用对象,products并且每个Product对象都有属性productName。您的 JSP 代码将更改为:

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

当你的 HTML 被渲染时,你会看到这样的 HTML:

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

想法#1

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

想法#2

我不知道你能不能像这样破解系统,但如果它有效,它会比想法1更简单。当你创建一个新的HTML行时,解析path属性并将索引加1。

jQuery 示例:

// 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);
}

想法#3

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


旧答案

首先,您的问题非常基本。您应该从阅读文档、书籍、教程等开始,而不是简单地为您需要的这件事找到一个快速解决方案,以便了解您正在使用的框架背后的架构。

其次,有很多方法可以做你想做的事。如果您只是想获取表单数据并将其发送到您的服务器以进行持久化,您可以进行简单的表单提交。如果您想要一些更复杂的表单处理,使用 Spring MVC<form:___>标签可能是一个不错的方法。(注意:如果您使用 JavaScript 创建表单,则无法创建<form:___>标签,因为它们是 JSP 标签。此外,如果您还不了解更基本的 HTML,您可能不应该使用更复杂的 JSP 表单标签标签。)如果您想提交数据而不刷新整个页面,您可以使用 Ajax 调用。为了让任何人帮助您,我们需要知道您到底想做什么. 就目前而言,您的问题似乎是将数据传输到服务器的不同方式的混合。

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

一些阅读:

客户端与服务器的解释

HTML 表单

通过 JavaScript 实现 Ajax

通过 jQuery 实现 Ajax

使用 Spring MVCform标签(这只是服务器端

另一个关于 Spring MVC

于 2012-06-12T16:04:34.370 回答