我在用着 支柱2.

我想从操作返回到调用它的页面。

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

这是相关的 struts.xml 分段:

<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 中使用动态结果。例如:

<action
   name="Visual"
   class="it.___.web.actions.VisualizationAction">
   <result name="next">${next}</result>
</action>

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

这篇文章有更好的解释: 堆栈溢出

其他提示

return INPUT;

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

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

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

public interface TargetAware {
  public String getTarget();
  public void setTarget(String target);
}

拦截器只是确保目标已设置(如果需要):

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 接口(如果您希望必须重定向到它们),那么您可以访问 target 每当您需要时,都可以在 JSP 中添加参数。将该参数传递给您的 VisualizationAction (这也可能实现 TargetAware 界面!),等等 SUCCESS, ,按照 Vincent Ramdhani 的解释进行重定向:

<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 在这方面可能有所不同...)。

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

http://domain.com/myAction.action

您可以使用一些参数作为您想要更改当前设计的指示器:IE。

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

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

好的,在你的类 it.___.web.actions.VisualizationAction 中,你必须返回一个包含 INPUT 的字符串值,然后,在 struts.xml 上你必须设置如下内容:

<action name="Visual" class="it.___.web.actions.VisualizationAction">
   <result name="input">yourJspPage.jsp</result>
</action>

这将引导您到达您想要的页面。这应该可行,我已经在 struts2 上工作了 2 个月了

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top