tutorial tag property mundo hola form examples java url redirect struts2

java - property - struts2 jsp tags



¿Cómo hacer redirecciones URL dinámicas en Struts 2? (6)

Así es como lo hacemos:

En Struts.xml, tenga un resultado dinámico como:

<result name="redirect" type="redirect">${url}</result>

En la acción:

private String url; public String getUrl() { return url; } public String execute() { [other stuff to setup your date] url = "/section/document" + date; return "redirect"; }

De hecho, puede usar esta misma tecnología para establecer valores dinámicos para cualquier variable en su struts.xml usando OGNL. Creamos todo tipo de resultados dinámicos, incluidos elementos como enlaces RESTful. Cosas interesantes.

Estoy intentando que mi aplicación Struts2 se redirija a una URL generada. En este caso, quiero que la URL use la fecha actual, o una fecha que busqué en una base de datos. Entonces /section/document pasa a ser /section/document/2008-10-06

¿Cuál es la mejor manera de hacer esto?


Puede redirigir a otra acción usando la anotación -

@Result( name = "resultName", type = "redirectAction", params = { "actionName", "XYZAction" } )


Si alguien quiere redireccionar directamente en ActionClass :

public class RedirecActionExample extends ActionSupport { HttpServletResponse response=(HttpServletResponse) ActionContext.getContext().get(ServletActionContext.HTTP_RESPONSE); url="http://localhost:8080/SpRoom-1.0-SNAPSHOT/"+date; response.sendRedirect(url); return super.execute(); }

Editar: se agregó una comilla faltante.


También se pueden usar annotations y el complemento de la Convención para evitar la configuración repetitiva en struts.xml:

@Result(location="${url}", type="redirect")

El $ {url} significa "usar el valor del método getUrl"


Terminé subclasificando ServletRedirectResult Struts y sobreescribiendo su método doExecute() para hacer mi lógica antes de llamar a super.doExecute() . se parece a esto:

public class AppendRedirectionResult extends ServletRedirectResult { private DateFormat df = new SimpleDateFormat("yyyy-MM-dd"); @Override protected void doExecute(String finalLocation, ActionInvocation invocation) throws Exception { String date = df.format(new Date()); String loc = "/section/document/"+date; super.doExecute(loc, invocation); } }

No estoy seguro de si esta es la mejor manera de hacerlo, pero funciona.


Uno puede redirigir directamente desde un interceptor sin importar qué acción está involucrada.

En struts.xml

<global-results> <result name="redir" type="redirect">${#request.redirUrl}</result> </global-results>

En Interceptor

@Override public String intercept(ActionInvocation ai) throws Exception { final ActionContext context = ai.getInvocationContext(); HttpServletRequest request = (HttpServletRequest)context.get(StrutsStatics.HTTP_REQUEST); request.setAttribute("redirUrl", "http://the.new.target.org"); return "redir"; }