Formato de las propiedades de entrada para vistas

Para peticiones web, cuando un mandato de controlador finaliza su ejecución, devuelve el nombre de una vista que debe ejecutarse. Esta vista puede requerir que se le pasen diversas propiedades de entrada.

Puede haber tres fuentes de estos parámetros de entrada:

  • Propiedades predeterminadas almacenadas en la columna PROPERTIES de la tabla CMDREG
  • Propiedades predeterminadas de los archivos de configuración de Struts
  • Propiedades de entrada del URL

Para una respuesta de redirección, se puede dar formato a las propiedades de entradas de una vista utilizando cualquiera de estas técnicas:

  • Reducción a una serie de consulta para dar soporte al redireccionamiento de URL
  • Límites en la longitud del URL de redirección

Para los mandatos reenviar vistas, se examina el tema de enumeración de parámetros de entrada y de establecimiento como atributos en HttpServletRequestObject.

Reducción de parámetros de entrada a una serie de consulta para HttpRedirectView

Todos los parámetros que se pasan a un mandato redirigir vista se reducen a una serie de consulta para redirección de URL. Por ejemplo, suponga que la entrada al mandato redirigir vista contiene las propiedades siguientes:


URL = "MyView?p1=v1&p2=v2";
ip1 = "iv1";   // input to original controller command 
ip2 = "iv2" ;  // input to original controller command
op1 = "ov1";
op2 = "ov2";

Basado en los parámetros de entrada anteriores, el URL final es


MyView?p1=v1&p2=v2&ip1=iv1&ip2=iv2&op1=ov1&op2=ov2

Observe que si el mandato va a utilizar SSL, los parámetros se cifran y el URL final aparece como


MyView?krypto=encrypted_value_of"p1=v1&p2=v2&ip1=iv1&ip2=iv2&op1=ov1&op2=ov2"

Manejo de un URL de redirección de longitud limitada

predeterminado, todos los parámetros de entrada para el mandato de controlador se propagan al mandato redirigir vista. Si hay un límite en el número de caracteres en el URL de redirección, puede producirse un problema. Un ejemplo de cuándo puede limitarse la longitud es si el cliente utiliza el navegador Internet Explorer. Para este navegador, el URL no puede sobrepasar los 2083 bytes. Si los sobrepasa, se trunca el URL. Por lo tanto, puede producirse un problema si hay un gran número de parámetros de entrada o si está utilizando el cifrado, porque una serie cifrada es normalmente dos o tres veces más larga que una serie sin cifrar.

Hay dos maneras de solucionar el problema de URL de redirección de longitud limitada:

  1. Modifique el método getViewInputProperties en el mandato de controlador para que solo devuelva los conjuntos de parámetros que sea necesario pasar a la respuesta de redirección.
  2. Utilice un carácter especial especificado en los parámetros de URL para indicar los parámetros que se pueden eliminar de la serie de parámetros de entrada.

Para demostrar cada una de las acciones anteriores, tomemos, por ejemplo, el siguiente conjunto de parámetros de entrada al mandato de controlador:


URL="MyView"; 
// All of the following are inputs to the original controller command.
ip1="ipv1";
ip2="ipv2";
ip3="ipv3";
iq1="iqv1";
iq2="iqv2";
ir1="ipr1";
ir2="ipr2";
is="isv";

Si modifica el método getViewInputProperties, puede escribir el nuevo método de forma que solo se pasen los siguientes parámetros al mandato de vista:


ir2="ipr2";
is="isv";

Utilizando la segunda opción, puede llamarse al mandato vista utilizando parámetros especiales para indicar que deben eliminarse ciertos parámetros de entrada. Por ejemplo, puede obtener el mismo resultado especificando lo siguiente como parámetro de URL:


URL="MyView?ip*=&iq*=&ir1="

Este parámetro de URL indica lo siguiente a la infraestructura de ejecución de HCL Commerce:

  • La especificación ip*= significa que deben eliminarse todos los parámetros cuyo nombre empiece por ip.
  • La especificación iq*= significa que deben eliminarse todos los parámetros cuyo nombre empiece por iq.
  • La especificación ir1= indica que debe eliminarse el parámetro ir1.

Establecimiento de atributos en el objeto HttpServletRequest para HttpForwardView

El HttpForwardViewCommandImpl predeterminado enumera todos los parámetros pasados al mandato y los establece como atributos en el objeto HttpServletRequest.

Por ejemplo, suponga que el objeto requestProperties pasado al mandato reenviar vista contiene los parámetros siguientes:


p1="pv1";
p2="pv2";
p3=pv3;   // pv3 is an object

A continuación, se pasan los atributos siguientes a la página JSP utilizando el método request.setAttribute().


request.setAttribute("p1", "pv1");
request.setAttribute("p2", "pv2");
request.setAttribute("p3", pv3);
request.setAttribute("RequestProperties", requestProperties);
request.setAttribute("CommandContext", commandContext);

Donde:

requestProperties
El objeto TypedProperty que se ha pasado al mandato.
commandContext
El objeto de contexto de mandato que se ha pasado al mandato.
p1, p2, p3
Los parámetros definidos en el objeto requestProperties.