【问题标题】:Spring MVC 3: How do I construct a form action restfully?Spring MVC 3:如何从容地构建表单动作?
【发布时间】:2010-03-03 05:08:09
【问题描述】:

鉴于一些典型的搜索表单,我无法在提交表单时构造此表单操作:

/myapp/orders/${orderId)

因为用户正在输入 orderId,所以我无法将其包含在表单操作中。

  1. 在 Spring MVC 3?

  2. 使用拦截器来构造这个怎么样?是 这是一个好的解决方案吗?

  3. 否则我无法使用 javascript 与动作 提交。有趣。

【问题讨论】:

    标签: java spring spring-mvc


    【解决方案1】:

    根据我的经验,典型的搜索查询通常不会像您所描述的那样无缝地一对一地映射到结果。即使您要求他们输入订单 ID,他们也可能希望能够输入部分 ID 并从列表中进行选择,或者他们可能输入错误(并且您希望能够给出有意义的回复选择,而对不存在的资源的错误 GET 调用应该只是 404)。

    我喜欢做的是有一个称为 SearchResult 之类的中间资源(它不必是系统中的实际对象)。然后我的搜索查询是对 /myapp/searchResults/ 的创建调用,其中包括查询参数作为 POST 变量。如果创建的搜索结果指向单个订单,那么您可以重定向到 /orders/741,但如果不是,您有更多的能力来处理它。

    【讨论】:

    • 是的,我们有一些奇怪的要求迫使我处理这种情况。我们没有能力搜索订单表。此外,几乎在每种情况下,用户都会确切地知道他们需要提出哪个订单。我对 Spring MVC 比较陌生,并想确保他们没有自动为我做这件事。在几乎所有其他情况下,您的方法将是更合理的解决方案(也是我会使用的解决方案)。谢谢。
    【解决方案2】:

    我最终编写了一个拦截器,它在 GET 请求中查找“id”参数,如果找到,则将该值附加到 uri 并继续前进。例如,这个:

    /myapp/orders?id=1337
    

    变成

    /myapp/orders/1337?id=1337
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-01-01
      • 2015-08-11
      • 2012-06-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-28
      • 1970-01-01
      相关资源
      最近更新 更多