Section 8: Building JSP Pages Using Standard Actions


 

8.1 Given a design goal, create a code snippet using the following standard actions: jsp:useBean (with attributes: 'id', 'scope', 'type', and 'class'), jsp:getProperty, and jsp:setProperty (with all attribute combinations).

Las acciones son componentes de negocios con un nombre que pueden ser embebidos en la página web. La idea es poder sacar la lógica de los JSPs (de los scriplets, declaraciones, etc) y ponerlas en una clase que podrá ser incluida en el JSP. Existen 2 clases de acciones: Estandar (previstas en la especificación) y custom (hechas especificamente para algo). Las 3 acciones de este punto son estandares.

<jsp:useBean id="ejemplo" class="net.scwcd.ejemplo" o type="net.scwcd.interface" scope="page" o "request" o "session" o "context" >

- id va a ser el nombre del javabean (dentro del método es una variable global. Fuera de él, es el nombre de un atributo)

- class es el nombre completo de la clase (paquete + nombre de clase). Esta clase tiene que estar dentro de WEB-INF/classes o en WEB-INF/lib.

- type puede ser usado para declarar la variable del javabean como un tipo compatible (gralmente no el mismo). Por ejemplo, puede ser un supertipo o una interface que la clase implemente.

- scope define el scope del javabean.

<jsp:setProperty name="ejemplo" property="beleza" value="blabla" o param="nombre_del_param">

Esta acción permite setear una propiedad del javabean. 

- name define el nombre del javabean.

- property define el valor de la propiedad a ser seteada (en realidad es el nombre del setter).

- value es el valor a setear. Aquí podemos usar una expresión (<%= %>). Podemos poner param + el nombre de uno de los parametros recibidos en el 'request'. Si el nombre del parametro coincide con el nombre de alguna propiedad del bean, entonces se asignara el valor recibido. Si en vez de poner los atributos value/param, ponemos solamente un atributo llamado - property="*" - esto asignará a todas las propiedades (que concuerden) los valores  recibidos en los parametros.

<jsp:getProperty name="ejemplo" property="beleza">

Esta es la más fácil. Solamente tenemos que poner el 'name' del java bean y la 'property' que queremos.

** Es importante acordarse que dentro de useBean se utiliza el atributo 'id' para identificar el java bean. Sin embargo, en setProperty y getProperty se utiliza el atributo 'name'.

8.2 Given a design goal, create a code snippet using the following standard actions: jsp:include, jsp:forward, and jsp:param

<jsp:include>

Esta  acción estandar permite incluir la salida de otro archivo en la salida. La sintaxis es la siguiente: 

<jsp:include page="test.jsp" flush="true|false">  

Es muy similar a RequestDispatcher.include(). La diferencia clave con la directiva <@ include> es que la directiva incluye el contenido en tiempo de compilación, mientras que la acción lo incluye en tiempo de ejecución. Esto tiene las siguientes consecuencias:

1. Se pueden usar una expresión para especificar el archivo (osea que es mucho más flexible). Ejemplo>

<jsp:include page='<%=request.getParameter("nombre") %>'>

2. El archivo que se incluye puede no existir (osea puede ser generado en tiempo de ejecución)

 

<jsp:forward>

Esta acción estandar forwardea la responsabilidad de la creación de la respuesta a otro recurso. Todo el contenido por el jsp original es completamente ignorado (osea que si ya se ha hecho un commit del buffer, se arrojará un IllegalStateException.

La sintaxis es la siguiente:

,<jsp:forward page="lalala.jsp' />


<jsp:param>

Esta acción puede ser embebida en <jsp:include> y <jsp:forward> para agregar paramétros al request.  Por ejemplo:

,<jsp:forward page="lalala.jsp' >

      <jsp:param name="nombre" value="Carlos">

</jsp:forward>

Los paramétros viven en el recurso forwardeado o incluido y dps. desaparecen.