Pregunta

Estoy usando Struts 2.

Me gustaría volver a partir de una Acción a la página que la invocó.

Decir que estoy en la página x.jsp, Invoco la acción Visual para cambiar CSS preferencias en la sesión;Quiero volver a x.jsp en lugar de una página fijo (es decir, casa.jsp)

Aquí está la pertinente struts.xml fragmento:

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

Por supuesto, mi VisualizationAction.execute() devuelve casa.

Hay alguna "magia" constante (como, por ejemplo, INPUT_PAGE) que puedo volver a hacer el truco?

Debo usar una mayor participación del método (es decir,la extracción de la página de solicitud y expedición de ella)?

T. I. A.

¿Fue útil?

Solución

Puede utilizar una dinámica de resultados en struts.xml.Por ejemplo:

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

A continuación, en su acción, se crea un campo denominado siguiente.Para invocar la acción que se pase el nombre de la página que desea con ansias el próximo.La acción, a continuación, devuelve "siguiente" y puntales se sabe que la página a la que acudir.

No hay una mejor explicación en este post: Desbordamiento De Pila

Otros consejos

return INPUT;

hará el truco.De ENTRADA constante se define en la Acción misma interfaz.Indica que la acción necesita más de entrada.

Llamando a la página si significaba la página a la que te llevó a la acción de entrada de la página, su página de entrada tendrán que almacenar encabezado HTTP "Referer" en el ámbito de petición para la Acción.

Mi solución implicaría una interfaz y un interceptor.Implementar la siguiente interfaz para todas las acciones para que usted probablemente desea redirigir:

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

El interceptor simplemente asegura que el objetivo es establecer, si es necesario:

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 */ }
}

A partir de entonces, una vez que estos dos bits están en su lugar y sus acciones a implementar el TargetAware interfaz (si usted espera tener para redirigir a ellos), entonces usted tiene acceso a una target parámetro en el Jsp siempre que lo necesite.Pasar ese parámetro en el VisualizationAction (que bien podría implementar también el TargetAware interfaz!), y en SUCCESS, redirigir como explica Vicente Ramdhanie:

<action name="Visual" class="it.___.web.actions.VisualizationAction">
   <result type="redirect">
      <param name="location">${target}</param>
      <param name="parse">true</param>
   </result>
</action>

Yo no intente cada uno de los detalles de esta estrategia.En particular, ten cuidado con la notación que rodea el redirect tipo de resultado (dependiendo de la versión específica de Struts2:2.0.x y 2.1.x puede variar en esto...).

Yo prefiero la navegación de los usuarios por acciones particulares.

http://domain.com/myAction.action

Usted podría utilizar algún parámetro como indicador, que desea cambiar el diseño actual:es decir,

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

Así que a continuación, escribir algunos de los struts 2 interceptor, que la lógica es la comprobación de la presencia de dicho parámetro 'changeDesign', y este interceptor hará así lo requiriesen labor de cambiar el diseño y el control de flujo de trabajo.Con interceptor que separar sus acciones transversales de la lógica.

ok, en tu clase.___.web.acciones.VisualizationAction, usted debe devolver un valor de cadena que contiene la ENTRADA, a continuación, en struts.xml usted tiene que establecer algo como esto:

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

esto te llevará a la página que desea.Esto debería funcionar, he estado trabajando en struts2 a lo largo de 2 meses

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top