2011-05-17 13 views
6

Sé cómo utilizar la invocación de métodos comodín dentro de struts.xml, pero ¿es posible hacer esto con anotaciones? ¿Si es así, cómo?¿Es posible utilizar la invocación de métodos comodín en Struts2 con el complemento de convenciones utilizando solo anotaciones?

+0

¿Puede dar un ejemplo de un mapeo struts.xml que le gustaría hacer con las anotaciones? –

+0

Ha pasado tanto tiempo desde que miré esto ... qué tal "*" que coincida con cualquier cosa de esa manera, puedo señalar a alguien en una página de error si no coincide con ningún otro patrón. Utilizaría el complemento de convenciones. – Quaternion

Respuesta

8

Probablemente ya lo haya resuelto, pero para aquellos que buscan una respuesta, sí, es posible.

Para asignación de comodín, se refieren a: http://struts.apache.org/2.3.1.2/docs/wildcard-mappings.html

Para leer params de la url, anotar su método con esto:

private String id; 

@Action(value = "edit/{id}", 
     results={@Result(name = "success", location = "/WEB-INF/views/devices/edit.ftl")} 
)   
public String edit() { 
    // do something 
    return SUCCESS; 
} 

public void setId(String id) { 
    this.id = id; 
} 

public String getId() { 
    return id; 
} 
  • necesitará un captador/definidor del parámetro id.
  • Debe especificar los resultados ya que struts2 no sabrá qué usar para tener éxito con la url: ... edit/123, de ahí la necesidad de usar @Result para apuntar a su archivo. Un poco defiende el propósito del plugin de convención allí.

En el caso quiero redireccionar a una URL concreta, use esta anotación:

@Action(value = "index", 
     results={@Result(name = "success", location = "/devices/edit/${entityId}", type = "redirect")} 
    ) 

Se necesitaría un captador/definidor de la entityId (String en mi caso).

También puede haber avanzado mapeo wilcard, asignación de comodín espacio de nombres ...

No se olvide de cambiar el struts.xml y añadir las siguientes constantes.

<!-- Used for advanced wilcard mapping --> 
<constant name="struts.enable.SlashesInActionNames" value="true"/> 
<constant name="struts.mapper.alwaysSelectFullNamespace" value="false"/> 
<constant name="struts.patternMatcher" value="regex" /> 
Cuestiones relacionadas