【问题标题】:How to handle non-trivial form input? JSP or Javascript?如何处理非平凡的表单输入? JSP 还是 JavaScript?
【发布时间】:2012-06-15 05:33:30
【问题描述】:

我正在开发一个 Spring MVC 应用程序,它应该允许用户更改列表的内容。

该列表由具有简单属性(如名称和作者)的书籍对象组成。该视图是一个 JSP 页面,它显示书籍列表并允许用户更改内容。

更改列表可能意味着添加、删除书籍或更改列表中书籍的顺序。

问题是,如何将更改后的列表返回到服务器?我可以编写 JavaScript 来控制列表,但是如何将它发布到 Spring 控制器?另一方面,我可以编写一个 JSP 表单来更改模型,这将很容易提交回服务器,但是我是否仅限于表单输入中的基本文本字段?

编辑: 在 JSP 中,使用类似

的形式很容易改变单个模型的属性
<form:form action="myaction" method="post" commandName="mybook">

但是如果你的模型是一个(有序的)对象列表,那么你如何编辑它呢?

在 Javascript 中,我可以从响应中获取对象列表并根据需要进行更改,但是如何将其提交回服务器?类似的东西

$.post("/modifybook.do",{ name: "Spring in Action", author: "Graig Walls" } );

有效,但仅适用于单个对象。

【问题讨论】:

  • 有很多方法可以解决这个问题。 JSP 本身对您的选择没有任何限制,但使用 Spring 表单标签 可能——但无论如何这些最终都是纯 HTML,并且可以像其他任何方式一样进行操作。
  • 你能发布一个你的 JSP 的例子吗?

标签: javascript spring-mvc


【解决方案1】:

从未使用过 Spring,这可能不太合适,但您能否不将列表转换为 XML,然后将其发布回 Java,然后在保留所有复杂性和更改的情况下对其进行处理?

【讨论】:

  • 是的,我已经尝试过 JSON,并且我之前发布过它:stackoverflow.com/questions/11015611/... 问题是将它提交回 Spring,我让它适用于单个对象,但不适用于数组
【解决方案2】:

您应该避免操纵整个列表,句号。当只有一个列表元素被更改(编辑、添加或删除)时,我看不到需要填充整个项目列表并将其发送回服务器的场景。

我通常在我的应用程序中做的是创建一个处理程序(控制器),用于一次性返回整个对象列表,然后添加另一个处理程序来添加、编辑和删除该列表中的单个条目。在这种情况下,我也尝试坚持使用 REST,这样我就有了一个干净的 API 来表示服务器资源,并且前端(AJAX + jQuery)可以使用它。

这个解决方案对我来说非常有效,所以我建议也坚持下去。

【讨论】:

  • 感谢您的回复,您的策略听起来不错,但我不确定它是否适用于所有情况:如果列表是有序的怎么办?那么在元素上添加或删除(或只是更改)会影响所有元素吗?示例见我之前的帖子:stackoverflow.com/questions/11008876/…
猜你喜欢
  • 1970-01-01
  • 2019-04-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-27
  • 2021-12-30
  • 1970-01-01
相关资源
最近更新 更多