【问题标题】:How do I bind HTML table data to a java object in a spring controller?如何将 HTML 表数据绑定到 spring 控制器中的 java 对象?
【发布时间】:2010-05-19 15:40:19
【问题描述】:

我有一个 Spring MVC 应用程序,它使用 JSP 作为我的视图技术和 Jquery for AJAX。我有一个如下表:

<table>
  <tr>
    <td>name1</td>
    <td>value1</td>
    <td>setting1</td>
  </tr>
  <tr>
    <td>name2</td>
    <td>value2</td>
    <td>setting2</td>
  </tr>
</table>

我需要序列化这个表,以便以后可以将它绑定到我的控制器中的一个对象。但是 jquery serialize() 方法仅适用于表单字段。将表数据放入 HTTP 请求以便稍后将其绑定到 java 对象的最佳方法是什么?

编辑:

我有一个 java 对象,它有一个集合,所以

class MyOject {
   private List<AnotherObject> items = new ArrayList<AnotherObject>();

   // standard getters and setters
}

class AnotherObject {
   private name;
   private value;
   private setting;

   // getters and setters
}

在屏幕中,用户正在动态创建新项目。用户完成后,他们提交表单,然后我需要处理列表中的所有项目并用这些项目实例化一个新集合。

为了显示目的,我在创建项目时创建了一个新的表格行。

【问题讨论】:

    标签: java jquery jsp spring-mvc


    【解决方案1】:

    &lt;Form&gt; 标签是您告诉浏览器“将这些内容放入 Web 请求中”的方式。这就是在 Spring 中获取对象绑定的方式。您不使用表格的原因是什么?您不一定必须将其放在页面中的表单中,如果您确实需要,您可以为表格元素提供 ID 并在 javascript 中获取它们的内容。

    编辑:我认为这可能很难回答,因为不清楚为什么您希望浏览器将您最初提供的东西还给您。也许您真正需要的是控制器上的 @SessionAttributes() 注释,以便您可以保留向用户显示的原始页面的状态?

    更多编辑:

    kk,看吧。如果您想要的是 Spring Web 数据绑定,那么在添加更多表行时并行创建一个表单。例如,

    <form id="myObject" action="whateverYouNeedHere.htm" method="post">
    <input type="hidden" id="items[0].name" name="items[0].name" value="foo"/>
    <input type="hidden" id="items[0].value" name="items[0].value" value="bar"/>
    <input type="hidden" id="items[0].setting" name="items[0].setting" value="buzz"/>
    <input type="hidden" id="items[1].name" name="items[1].name" value="foo"/>
    <input type="hidden" id="items[1].value" name="items[1].value" value="bar"/>
    ....
    

    然后只需提交它,它就会为您绑定。如果您确实打算自己处理内容,那么您可能可以像其他人提到的那样使用 XHR。

    【讨论】:

    • 它不必是每个 sai 的表,但是,在当前屏幕中,他们正在“ajaxly”向屏幕添加项目。然后当他们提交时,需要将新项目添加到 java 对象中的集合中。 object.getCollection.add(item) 即
    • 好吧,我不会将最初提供给浏览器的相同信息发送回服务器。事实上,用户正在创建一个新的 MyObject,其中包含 AnotherObject 的集合(参见上面的编辑)。我需要在请求中发送“列表”(在 html 表中表示)以绑定到 MyObject。
    【解决方案2】:

    使用Spring Data Binding and Validation API 将其绑定到您自己设计的Java 对象中。该文档与网络无关;查看后面的章节,了解 Web 层如何利用它。

    我想你会想要一个超越表格的抽象。

    【讨论】:

    • 我想澄清一下:如何将我的表格信息放入 http 请求中?
    • 放入表单域。这就是网络的运作方式,重新发明轮子没有意义吗?我猜你也可以将它全部复制到查询字符串中。
    • Definatley 我不想重新发明轮子。所以我想我可以在 中添加带有 name="item?" 的表单字段在哪里 ?是某种计数器。那么在控制器中我可以解析它们吗?
    • 绝对 - 将它们放在一个表格中。 Spring 将绑定来自 HTTP 请求的参数。这是一个假设。
    【解决方案3】:

    为了将表信息粘贴到 java 对象中,您首先需要将其发送到服务器。为此,您需要通过 XHR 或表单发送它。

    为了序列化对象,您需要编写一些 javascript/jquery。 我可以为你写,但你的要求对于你的表格的外观有些模糊,我也不想猜测你想要添加数据的 java 对象是什么样的。

    【讨论】:

    • 我假设您会为此目的使用 Jquery.data()?我想我可以附加一个提交回调 Jquery.submit("#myForm", function(){});处理表中的项目以将它们序列化并手动将它们添加到请求中?
    猜你喜欢
    相关资源
    最近更新 更多
    热门标签