struts2 datatables ognl

Caso de variables de paso de Struts2



datatables ognl (3)

pero Struts2 no puede recibir este tipo de estilo camelcase (solo una primera letra mayúscula y la segunda mayúscula)

Esto en realidad no es cierto . Struts2 puede recibir cualquier nombre de variable que cumpla con la especificación JavaBeans. Pero aparte de la implementación de Java de this especificación. (si desea obtener más información sobre JavaBeans, consulte esta publicación ¿Qué es exactamente un JavaBean? ), está utilizando su propia implementación. Como Struts2 utiliza OGNL para acceder a las propiedades del bean, debe saber qué es una "propiedad" según el lenguaje OGNL.

¿Qué es una propiedad? Aproximadamente, una propiedad OGNL es lo mismo que una propiedad bean, lo que significa que un par de métodos get / set, o alternativamente un campo, define una propiedad (la historia completa es un poco más complicada, ya que las propiedades difieren para diferentes tipos de objetos) ; ver abajo para una explicación completa).

Y la explicación completa que puede encontrar aquí: Refiriéndose a Propiedades .

No profundizaré en los detalles sobre cómo OGNL trata las propiedades del objeto, pero debería seguir el contrato de PropertyAccessor . Hay muchas implementaciones para diferentes tipos de "propiedades". El que OGNL usa para los objetos es ObjectPropertyAccessor . Aquí hay una mera descripción de lo que hace:

Implementación de PropertyAccessor que utiliza la reflexión en la clase del objeto de destino para encontrar un campo o un par de métodos set / get con el nombre de propiedad dado.

Cómo lo está haciendo puede encontrarlo navegando por el código fuente. Solo diré que está capitalizando la primera letra del nombre de la propiedad antes de usarla con el prefijo de método get/set . Entonces, has preguntado

¿Cómo puedo hacer que esto funcione?

Cambiar la firma del método del captador / definidor para propiedades

public String getXTrace() { return xTrace; } public void setXTrace(String xTrace) { this.xTrace = xTrace; }

ACTUALIZAR:

Desde OGNL 3.0.11 la letra minúscula no está en mayúscula.

Estoy usando la paginación ajax del lado del servidor de Datatables y necesito pasar algunas variables al servidor. Mi servidor está ejecutando acciones Struts2 para manejar estas solicitudes de tablas de datos.

Me enfrento a algunos problemas porque las tablas de datos están pasando variables internas predefinidas (como iDisplayStart, iDisplayLength, iColumns, sSearch), pero Struts2 no puede recibir este tipo de estilo camelcase (solo una primera letra mayúscula y la segunda mayúscula).

Para asegurar esto, creé esta acción de prueba:

@Action (value = "dummy", results = { @Result(name="ok", type="httpheader", params={"status", "200"}) } ) @ParentPackage("default") public class DummyAction { private String xTrace; public String execute () { System.out.println( xTrace ); return "ok"; } public String getxTrace() { return xTrace; } public void setxTrace(String xTrace) { this.xTrace = xTrace; } }

Estoy llamando a esta URL:

localhost:8580/sagitarii/dummy?xTrace=thisisatest

La salida es NULL, pero cuando cambio xTrace a xyTrace (y get, set y url también) todo va bien. ¿Cómo puedo hacer que esto funcione?

* EDITAR *

Ya intenté con cualquier palabra con este formato: iPad, iMac, iPhone, correo electrónico, ... Creo que esta podría ser solo mi configuración, pero intente antes de publicar las respuestas.


Lo descubrí recuperando las variables usando HttpServletRequest y evitando los struts.

HttpServletRequest req = (HttpServletRequest)ActionContext.getContext().get(StrutsStatics.HTTP_REQUEST); xTrace = req.getParameter("xTrace");

Esto obtendrá variables correctamente.

EDITAR

Mejor y elegante manera:

Como comentó Aleksandr M, al cambiar los dos nombres de setter consecutivos a mayúsculas, los struts establecen los datos correctamente.


Si la variable es

private String xTrace;

captadores y colocadores deben ser

public String getXTrace() { return xTrace; } public void setXTrace(String xTrace) { this.xTrace = xTrace; }

independientemente de los caracteres dobles consecutivos en mayúsculas. La regla es que el primer carácter después de la parte set / get está en mayúscula, el resto no cambia