关于java:Struts 2:返回调用页面

关于java:Struts 2:返回调用页面

Struts 2: return to calling page

我正在使用 Struts 2。

我想从一个动作返回到调用它的页面。

假设我在页面 x.jsp 中,我调用 Visual 操作来更改会话中的 CSS 首选项;我想返回 x.jsp 而不是固定页面(即 home.jsp)

这里是相关的 struts.xml Fragments:

1
2
3
4
5
action
   name="Visual"
   class="it.___.web.actions.VisualizationAction"
   result name="home"/pages/home.jsp/result
/action

我的VisualizationAction.execute()当然要回家了。

是否有任何"神奇"常量(例如,INPUT_PAGE)可以让我返回来解决问题?

我必须使用更复杂的方法(即提取请求页面并转发到它)吗?

T.I.A.


您可以在 struts.xml 中使用动态结果。例如:

1
2
3
4
5
action
   name="Visual"
   class="it.___.web.actions.VisualizationAction"
   result name="next"${next}/result
/action

然后在您的操作中,您创建一个名为 next 的字段。因此,要调用该操作,您将传递下一个要转发到的页面的名称。然后该操作返回"下一个",struts 将知道要转到哪个页面。

这篇文章有一个更好的解释:Stack Overflow


我的解决方案将涉及一个接口和一个拦截器。您为可能要重定向到的所有操作实现以下接口:

1
2
3
4
public interface TargetAware {
  public String getTarget();
  public void setTarget(String target);
}

如果需要,拦截器只是确保设置了目标:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
public class SetTargetInterceptor extends MethodFilterInterceptor implements Interceptor {
   public String doIntercept(ActionInvocation invocation) {
      Object action = invocation.getAction();
      HttpServletRequest request = (HttpServletRequest) invocation.getInvocationContext().get(StrutsStatics.HTTP_REQUEST);
      if (action instanceof TargetAware) {
         TargetAware targetAwareAction = (TargetAware) action;
         if (targetAwareAction.getTarget() == null)
            targetAwareAction.setTarget(getCurrentUri(request));
      }    
      return invocation.invoke();
   }

   // I'm sure we can find a better implementation of this...
   private static String getCurrentUri(HttpServletRequest request) {
      String uri = request.getRequestURI();
      String queryString = request.getQueryString();
      if (queryString != null && !queryString.equals(""))
         uri +="?" + queryString;
      return uri;
   }

   public void init() { /* do nothing */ }
   public void destroy() { /* do nothing */ }
}

从那时起,一旦这两个位就位并且您的操作实现了 TargetAware 接口(如果您希望必须重定向到它们),那么您可以在您的 JSP 中访问一个 target 参数需要它。将该参数传递给您的 VisualizationAction(也可以实现 TargetAware 接口!),然后在 SUCCESS 上,按照文森特·拉姆丹尼 (Vincent Ramdhanie) 的解释进行重定向:

1
2
3
4
5
6
action name="Visual" class="it.___.web.actions.VisualizationAction"
   result type="redirect"
      param name="location"${target}/param
      param name="parse"true/param
   /result
/action

我没有尝试这个策略的每一个细节。特别要注意围绕 redirect 结果类型的表示法(取决于您的特定版本的 Struts2:2.0.x 和 2.1.x 可能会有所不同...)。


1
return INPUT;

会成功的。 INPUT 常量在 Action 接口本身中定义。它表示动作需要更多输入。

如果您是指将您带到操作输入页面的页面,则通过调用页面,那么您的输入页面将必须在操作的请求范围内存储 HTTP 标头"Referer"。


好的,在你的类中.___.web.actions.VisualizationAction,你必须返回一个包含INPUT的字符串值,然后,在struts.xml上你必须设置这样的东西:

1
2
3
action name="Visual" class="it.___.web.actions.VisualizationAction"
   result name="input"yourJspPage.jsp/result
/action

这会将您带到您想要的页面。
这应该可行,我在 struts2 上工作了 2 个月


我更喜欢通过特定操作引导用户的方式。

http://domain.com/myAction.action

你可以使用一些参数作为指标,你想改变当前的设计:

http://domain.com/myAction.action?changeDesign=silver_theme

那么,你编写了一些struts 2拦截器,其逻辑是检查是否存在这样的参数'changeDesign',这个拦截器将完成改变设计的必要工作并控制工作流程。使用拦截器,您可以将您的操作与横切逻辑分离。


推荐阅读

    linux中清空页面命令?

    linux中清空页面命令?,系统,命令,位置,首页,情况,数据,工具,文件夹,文件,回

    linux清空操作命令?

    linux清空操作命令?,系统,数据,命令,名称,不了,文件夹,文件,环境,回收站,目

    linux操作命令论文?

    linux操作命令论文?,管理,系统,设计,网络,企业,基础,机电设备,技术,发展,机

    linux内核总调用命令?

    linux内核总调用命令?,工作,地址,系统,信息,管理,策略,命令,目录,时间,基础,

    linux编程调用命令?

    linux编程调用命令?,系统,标准,管理,工作,基础知识,情况,环境,设备,基础,首

    linux命令中退出返回?

    linux命令中退出返回?,档案,工作,信息,系统,基础,命令,编辑,目录,冒号,内容,l

    linux操作命令cp?

    linux操作命令cp?,系统,文件,命令,源文件,基本知识,时间,目录,文件夹,选项,

    linux操作命令及用法?

    linux操作命令及用法?,工作,地址,系统,管理,信息,命令,目录,网络,文件,操作,L

    linux基础命令和操作?

    linux基础命令和操作?,工作,地址,基础,命令,管理,标准,系统,目录,单位,信息,l

    linux命令窗口调用?

    linux命令窗口调用?,系统,工具,首页,终端,命令,数据,盘中,代码,密码,快捷键,

    linux中查询操作命令?

    linux中查询操作命令?,信息,系统,名称,命令,地址,数字,指令,用户,历史,文件,

    linux线程操作命令?

    linux线程操作命令?,系统,工作,时间,代码,线程,信息,第一,命令,函数,操作,lin

    查看linux操作的命令?

    查看linux操作的命令?,系统,工作,信息,情况,地址,命令,软件,电脑,第一,名称,l

    linux压缩操作命令?

    linux压缩操作命令?,系统,命令,文件,名称,数据,软件,平台,目录,选项,下面,lin

    linux系统用命令操作?

    linux系统用命令操作?,系统,情况,工作,发行,位置,管理,地址,信息,密码,命令,l

    linux历史操作命令?

    linux历史操作命令?,系统,信息,地址,工作,名称,命令,管理,用户,操作,历史,如

    linux服务器调用命令?

    linux服务器调用命令?,系统,地址,设备,标准,工作,密码,中心,盘中,网络,软件,

    linuxc调用命令框?

    linuxc调用命令框?,系统,工作,标准,情况,设备,环境,命令,函数,语言,程序,如何

    linux命令基本操作?

    linux命令基本操作?,工作,地址,系统,信息,管理,命令,目录,标准,操作,控制台,l

    linux怎么进命令页面?

    linux怎么进命令页面?,系统,工具,密码,终端,电脑,数字,首页,位置,命令,界面,l