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:
- 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.
- 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 porip
. - La especificación
iq*=
significa que deben eliminarse todos los parámetros cuyo nombre empiece poriq
. - La especificación
ir1=
indica que debe eliminarse el parámetroir1
.
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.