【问题标题】:How to append query params in URL in case of input forward?如果输入转发,如何在 URL 中附加查询参数?
【发布时间】:2013-09-05 11:43:03
【问题描述】:

我在维护在 URL 中发送的查询参数的值时遇到了麻烦,由于验证错误而在输入转发期间丢失。

我有一个链接链接这个

<a href="/somelink/testpage?param1=value1&param2=value2" id="test">Test</a>

单击此链接将打开一个新页面,该页面具有一个带有两个隐藏字段(从这些参数中获取值)的表单。这个页面有两个按钮savecancel。我的问题是

  1. 我点击链接,这个动作对应的输入页面是test.jsp。这会呈现页面。(例如,URL 是 https:host/somelink/testpage?param1=value1&amp;param2=value2)。

  2. 我填写表格并单击提交表格的保存按钮。在 Action 类中,我获取参数并在 request 中设置并进行验证。由于验证错误,控制转到输入页面(但 url 中没有查询参数)。现在输入页面有错误信息,网址是https:host/somelink/testpage

  3. 现在在test.jsp 中,从请求中填充表单中的隐藏字段。

  4. 错误显示在输入页面中。现在,如果我再次单击保存按钮,控件将转到 Action 类并提交表单。在这种情况下,我可以访问这些参数(提交表单时)

  5. 1234563页面中,查询参数未设置在 url 中,因此现在如果发送请求,则无法获取参数的值,因为它不在 url 中并且表单未提交。)

有什么方法可以保持参数的值吗?我无法将其附加到 URL 作为其输入转发。我发现保留参数值的唯一方法是在会话中添加并从会话中获取。但我不确定它是否可取。

【问题讨论】:

  • 动作表单(或 Struts 2 的动作)应该具有这些字段的属性。表单应该对隐藏字段使用普通的 Struts 表单标签。完成。
  • 是的,我使用 Struts 表单标签。但这些字段不是操作表单的一部分。
  • (例如,如果它确实,则无需执行任何特殊操作即可重新填充值,无需操作 URL 等.)
  • 我的理解是即使我在Action Form中有它们,也只有在提交表单时才能获得Action类中的值对吗?
  • 你什么时候需要它们?

标签: java jsp url parameters struts


【解决方案1】:

当您提交表单时,您没有在 url 中传递参数。要使其正常工作,您应该在表单标签的action 属性中包含参数。

喜欢

<html:form action="/somelink/testpage?param1=value1&param2=value2">

或者在URL中提交不带参数的表单,但是要传递参数你需要添加 html:hidden 表单的字段,它将保存值。

【讨论】:

  • 是的,我使用struts表单标签,隐藏字段的值是在Action类的request中设置的,唯一的问题是在没有提交表单的情况下请求指定的action。感谢您将参数添加到操作属性对我有帮助。
  • 此解决方案适用于我的问题,但是在我的应用程序中,动作属性是动态生成的,因此更改生成它的代码对我来说并不简单。我想知道是否有可能更改输入页面的路径。
  • @SpreeTheGr8 你可以随意改变它,request.setAttribute("myUrl","/somelink/testpage?param1=value1&amp;param2=value2"); &lt;html:form action=${myUrl}&gt;
  • 我们扩展了 struts 标记并具有我们的附加属性,因此 form 标记在 url 中附加了一些其他上下文特定信息。因此,为了更改 url,我必须向表单标签引入一个属性,该属性采用参数值并使 FormTag.java 使用这些参数生成 url。
  • 该值来自action属性,你不应该修改这部分,反正你可以在那里得到参数。
猜你喜欢
  • 1970-01-01
  • 2014-11-28
  • 1970-01-01
  • 2023-03-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-27
相关资源
最近更新 更多