【问题标题】:How to redirect user to different pages based on the submit button in Struts 2如何根据 Struts 2 中的提交按钮将用户重定向到不同的页面
【发布时间】:2014-03-28 02:29:15
【问题描述】:

首先,请注意我知道以下代码不在 JavaScript 或 jQuery 中,但我只是将它们添加为这个问题的标签,希望使用 Javascript 或 jQuery 找到解决方案。

我有一个带有三个提交按钮的表单。问题是,当我使用任一按钮提交表单时,结果页面将被发送到同一地址。我需要它位于不同的地址。

目的:

代码应该在称为视图的页面中显示特定类别的项目列表。用户选择几个项目并提交表单。服务器需要在名为 update 的页面中显示所选项目的详细信息(与查看页面的单独地址)。然后用户可以编辑项目的详细信息并提交表单以更新这些项目的详细信息。

要求:

假设地址是

myexample.com/Product/view      //shows view page

点击编辑后,它应该重定向到以下地址。

myexample.com/Product/update     //shows update page ( show details of selected products)

潜在解决方案:

根据 Roman C 的回答,收到请求后,我将产品列表传递给另一个动作以显示更新页面,但它在地址上显示如下;因此,更新页面无法将产品参数识别为列表。

...products=[1%2C+2]&id=1

Java:

List <Integer> products = new ArrayList();
   

Struts 重定向:

   <result name="updateProducts" type="redirectAction">
            <param name="actionName">update</param>
            <param name="namespace">/products/Update</param>
            <param name="products">${products}</param>
            <param name="id">${id}</param>
   </result>

即使我手动发送以下请求,操作类也不会将产品参数识别为列表。它显示它的大小为零。

 ...products=[1,2]&id=1

【问题讨论】:

  • 我想,这意味着当发出请求时,后端应该收到来自 myAction 的请求并将用户重定向到来自 myAction 的单独地址。
  • @RomanC 是的,没错。 J888 完全正确。
  • @developerwjk 问题已更新
  • 框架很棒,如果你不是每 10 分钟就被一个新的“你如何在 this 框架中做那个简单的事情”问题卡住。没有理由避免在适合会话的情况下进行会话。如果请求更合适,请使用请求属性而不是会话。但显然在某些情况下 session 是合适的,比如在用户登录时存储用户名,所以从那时起在所有页面中你都知道这个用户是谁。

标签: java jsp struts2 actionresult post-redirect-get


【解决方案1】:

您应该将redirectAction 结果添加到处理提交请求的操作的操作配置中。在您的情况下,它有一个 edit 名称,这令人困惑,应该命名为 saveupdate 因为当您将其命名为 edit 时,许多程序员认为您正在请求填充一些文本字段。但这不是真的,您的 edit 操作不会填充,而是提交给服务器。提交后,您应该按照Post-Redirect-Get pattern 并将redirectActionredirect 结果返回到其他操作或URL,而不是viewedit 操作,如果您不想在重定向后留在页面上.删除编辑操作配置,因为它已被通配符映射覆盖。添加保存按钮

<s:submit id="saveBtn" action="save" value="Save"/>

save 操作添加并返回重定向操作结果

<action name="save" method="save" class="myexample.Product">
  <result type="redirectAction" name="list" />
</action>   

【讨论】:

  • 好的,谢谢,请注意项目将在查看页面中被选中,选中项目的详细信息将显示在更新页面上进行更新;因此,在这种情况下,我还需要将所选项目的列表或包含它们的对象都发送到新操作,因为第二个操作应该显示要编辑的所选项目的详细信息,对吗?
  • 我从 PRG 得到的,是为了避免重复。我的代码应该在名为 view 的页面中显示特定类别的项目列表。用户选择几个项目并提交表单。服务器需要在名为 update 的新页面中显示所选项目的详细信息(与查看页面的单独地址)。然后用户可以编辑项目的详细信息并提交表单以更新这些项目的详细信息。
  • 不仅重复,当您重定向到新/其他地址时,请求被清除,您很乐意再次用数据填充它,没有必要它应该具有相同的JSP 也可以映射到不同的操作。
  • 问题是如何将选中项目列表发送到新动作?问题已更新。
  • @JackMoore 选择项列表或参数数组随请求一起发送,您可以通过实现ParameterAware 接口获取它,参见How could I get a parameter in JSP?
【解决方案2】:

如何根据按下的表单的提交按钮将用户重定向到不同的页面:

URL 重定向是一种万维网技术,用于使网页在多个URL address 下可用。当 Web 浏览器尝试打开已重定向的 URL 时,会打开具有不同 URL 的页面。

For example, www.example.com is redirected to example.iana.org. 

同样,Domain redirectiondomain forwarding 是 URL 域中的所有页面都被重定向到不同的域时,就像 wikipedia.comwikipedia.net 被自动重定向到 wikipedia.org 时一样。

URL 重定向可用于 URL 缩短、防止网页移动时断开链接、允许属于同一所有者的 multiple domain 名称引用单个网站、引导导航进出网站,用于隐私保护和网络钓鱼攻击等不太无害的目的。

<form action="http://example.org/ jmail1.java">
<input type="submit" value="Go To jmail1.java">
</form>

<form action="http://example.org/jmail2.java">
<input type="submit" value="Go To jmail2.java">
</form>

技术:

Several different kinds of response to the browser will result in a redirection. These vary in whether they affect HTTP headers or HTML content. The techniques used typically depend on the role of the person implementing it and their access to different parts of the system.

例如,无法控制标题的网络作者可能会使用刷新元标记,而重定向站点上所有页面的网络服务器管理员更可能使用服务器配置。

<action name="foo"> 
   <result type="redirectAction"> 
      <param name="actionName">bar</param> 
      <param name="namespace">/</param> 
   </result> 
</action>

虽然信息路径使您能够在提交后创建自定义消息,但许多用户的要求不止于此。他们对表格让您坐在列表中的方式不满意,这可能会令人困惑。因此,我们有一种方法可以让 InfoPath 表单的功能类似于传统的 Web 表单,您可以在其中填写表单,然后单击“提交”按钮,将用户带到感谢页面

分辨率:

  1. 创建感谢页面并将其保存在您网站的某个位置。我们建议使用任何编辑器(例如记事本或 SharePoint Designer)创建一个带有您选择的消息的 html 页面,例如“感谢您的提交”

  2. 单击该感谢页面并记录 URL I.E.,它将如下所示:http://mydomain.com/sites/YourSite/YourDocLibrary/ThankYou.html

  3. 现在您需要找出 InfoPath 表单的 URL。单击它并记录 URL,或者如果您已将 InfoPath 表单附加到 SharePoint 列表,那么您将需要像这样更改 URL:http://mydomain.com/sites/YourSite/YourList/NewForm.aspx,您可以看到我们刚刚将 NewForm.aspx 添加到末尾。

  4. Take the URL you recorded in step 3 and add the following:? Source=http://mydomain.com/sites/YourSite/YourDocLibrary/ThankYou.html,因此 URL 应如下所示:http://mydomain.com/sites/YourSite/YourList/NewForm.aspx?Source=http://mydomain.com/sites/YourSite/YourDocLibrary/ThankYou.html

  5. 在感谢页面上,您可以添加一个链接以转到另一个页面,或者您可以真正花哨并添加一个元刷新标签以自动将您的用户重定向到您网站的主页.你是怎样做的?简单的。在 HTML 页面的标签之间添加这一行:&lt;meta http-equiv="refresh" content="2;url=http://mydomain.com/sites/yourSite/"&gt;。只是为了多解释一下那条线,在这种情况下,数字 2 代表 2 秒。因此,您可以通过用不同的数字替换该数字来修改它,以使用户在该页面上的时间更长或更短。该网址将是您的主页或您要将用户重定向到的任何其他网站的网址。

<table><tr> <td><s:submit name="update" value="Update" action="update" ></s:submit></td> <td><s:submit name="delete" value="Delete" action="delete" ></s:submit></td> </tr></table>

<action name="update"
        class="net.viralpatel.struts2.action.MemberCrudOpertaions"
        method="updateUser">
        <result>members.jsp</result>
</action>

<action name="delete"
        class="net.viralpatel.struts2.action.MemberCrudOpertaions"
        method="deleteUser">
        <result>members.jsp</result>
</action>`

手动重定向:

最简单的技术是让访问者点击一个指向新页面的链接,通常使用如下 HTML 锚点:

Please follow <a href="http://www.example.com/">this link</a>.

此方法通常用作后备——如果浏览器不支持自动重定向,访问者仍然可以通过链接到达目标文档。

默认重定向:

默认重定向技术是要求访问者点击指向新页面的链接,通常使用带有 JSP 的 HTML,例如:

<html>
<%
String redirectURL = "http://stackoverflow.com/";
response.sendRedirect(redirectURL);
%>
</html>

http://struts.apache.org/release/2.2.x/docs/redirect-action-result.html

http://struts.apache.org/development/2.x/docs/multiple-submit-buttons.html

http://struts.apache.org/development/2.x/docs/submit.html

http://struts.apache.org/release/2.2.x/docs/interceptors.html

相关来源:http://en.wikipedia.org/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-28
    • 2015-11-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多