• No results found

Results: rethinking blockchain’s design principles – equi table design ≠ equitable politics

Esta etiqueta permite la asignación de un valor a una propiedad de un JavaBean. Como en el caso de la etiqueta <jsp:getProperty>, antes se debe haber usado una etiqueta <jsp:useBean> para que el JavaBean esté disponible en la página. Esta etiqueta también

puede utilizarse para transferir los valores resultantes de un formulario a las propiedades de un JavaBean. Los atributos siguientes permiten la configuración de esta etiqueta. name: este atributo permite identificar el JavaBean cuya propiedad o propiedades se modificarán.

property: este atributo precisa el nombre de la propiedad que va a modificar esta etiqueta. También puede usarse el valor * en este atributo. En este caso, la etiqueta busca en la petición HTTP los parámetros que tengan el mismo nombre que las propiedades del JavaBean y transfiere el valor de estos parámetros a las propiedades correspondientes de éste. Por supuesto, en el diseño del formulario de introducción de datos HTML hay que utilizar en los campos los mismos nombres que los usados para las propiedades del JavaBean que se actualizará.

value: este atributo tiene que usarse cuando se desea modificar una propiedad de un JavaBean. Es el que indica el valor a transferir a la propiedad del JavaBean.

El primer ejemplo, mostrado a continuación, recupera un JavaBean en la sesión y le asigna un valor a su propiedad horaConexion.

<jsp:useBean id="cliente" scope="session" class="pk1.Cliente" type="pk1.Cliente"/>

<jsp:setProperty name="cliente" property="horaConexion" value="<%=new Date().toLocaleString()%>"/>

El código Java generado por estas dos etiquetas:

k1.Cliente cliente = null; synchronized (session) { cliente = (pk1.Cliente) _jspx_page_context.getAttribute("cliente", PageContext.SESSION_SCOPE); if (cliente == null) {

cliente= new pk1.Cliente();

_jspx_page_context.setAttribute("cliente", cliente, PageContext.SESSION_SCOPE); } } org.apache.jasper.runtime.JspRuntimeLibrary.handleSetProperty(_jspx _page_context.findAttribute("cliente"), "horaConexion", new Date().toLocaleString());

El segundo ejemplo utiliza el formulario HTML siguiente para permitir la introducción del nombre y los apellidos del cliente.

<html> <head>

<title></title>

<meta http-equiv="Content-Type" content="text/html; charset=UTF- 8">

</head> <body>

<table> <tbody> <tr>

<td>nombre</td>

<td><input type="text" name="nombre" value="" /></td> </tr>

<tr>

<td>apellidos</td>

<td><input type="text" name="apellidos" value="" /></td> </tr> <tr> <td></td> <td></td> </tr> <tr>

<td><input type="submit" value="Validar" name="validar" /></td>

<td><input type="submit" value="Anular" name="anular" /></td> </tr> </tbody> </table> </form> </body> </html>

Los datos recopilados en este formulario se envían a la página JSP mostrada a continuación que inicializa un JavaBean y muestra a continuación sus propiedades.

<%@page contentType="text/html" pageEncoding="UTF-8"%> <%@page import="java.util.*" %>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html> <head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

<title></title> </head>

<body>

<jsp:useBean id="cliente" scope="session" class="pk1.Cliente" type="pk1.Cliente"/>

<jsp:setProperty name="cliente" property="*"/>

<jsp:setProperty name="cliente" property="horaConexion" value="<%=new Date().toLocaleString()%>"/>

Bienvenido

<jsp:getProperty name="cliente" property="nombre"/> <jsp:getProperty name="cliente" property="apellidos"/> hora de conexion

<jsp:getProperty name="cliente" property="horaConexion"/> </body>

</html>

Las etiquetas JSP generan el código siguiente:

pk1.Cliente cliente = null; synchronized (session) { cliente = (pk1.Cliente)

if (cliente == null){

cliente = new pk1.Cliente();

_jspx_page_context.setAttribute("cliente", cliente, PageContext.SESSION_SCOPE); } } out.write("\n"); out.write(" "); org.apache.jasper.runtime.JspRuntimeLibrary.introspect(_jspx_page_ context.findAttribute("cliente"), request); out.write("\n"); out.write(" "); org.apache.jasper.runtime.JspRuntimeLibrary.handleSetProperty(_jspx _page_context.findAttribute("cliente"), "horaConexion", new Date().toLocaleString()); out.write("\n"); out.write(" Bienvenido\n"); out.write(" "); out.write(org.apache.jasper.runtime.JspRuntimeLibrary.toString(((( pk1.Cliente)_jspx_page_context.findAttribute("cliente")).getNombre())) ); out.write("\n"); out.write(" "); out.write(org.apache.jasper.runtime.JspRuntimeLibrary.toString(((( pk1.Cliente)_jspx_page_context.findAttribute("cliente")).getApellidos( )))); out.write("\n");

out.write(" hora de conexion\n"); out.write(" "); out.write(org.apache.jasper.runtime.JspRuntimeLibrary.toString(((( pk1.Cliente)_jspx_page_context.findAttribute("cliente")).getHoraConexi on())));

4. Etiqueta <jsp:include>

Esta etiqueta realiza la misma función que el método include del objeto

RequestDispatcher debido a que permite incluir en la respuesta el contenido de otro recurso estático o dinámico. Cuando se incluye un recurso dinámico, por ejemplo un servlet, se le pueden pasar parámetros añadiendo en el interior de esta etiqueta una o varias etiquetas <jsp:param>. Esta etiqueta acepta dos atributos.

page: la URL del recurso que se incluirá en la respuesta HTTP se indica con este parámetro. El recurso que se incluirá tiene que pertenecer a la misma aplicación. flush: el valor booleano de este atributo indica si el buffer tiene que ser enviado al cliente antes de que el recurso se haya incluido.

La etiqueta <jsp:param>, que permite transmitir parámetros al recurso incluido, espera el atributo name para especificar el nombre del parámetro y el atributo value para especificar el valor del parámetro.

El ejemplo siguiente de página JSP realiza una llamada a un servlet que buscará en la base de datos el número de pedidos del cliente cuyo código se ha pasado en una petición HTTP.

<%@page contentType="text/html" pageEncoding="UTF-8"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html> <head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>JSP Page</title> </head> <body> <h1>Usted ha enviado <jsp:include page="/NumPedidos"> <jsp:param name="codigo" value=’<%=request.getParameter("codigoCliente") %>’ /> </jsp:include> pedidos </h1> </body> </html>

El código Java generado por esta etiqueta:

out.write(" <h1>Usted ha enviado\n"); out.write(" ");

org.apache.jasper.runtime.JspRuntimeLibrary.include(request, response, "/NumPedidos" + (("/NumPedidos").indexOf(’?’)>0? ’&’: ’?’) +

org.apache.jasper.runtime.JspRuntimeLibrary.URLEncode("codigoCliente", request.getCharacterEncoding())+ "=" +

org.apache.jasper.runtime.JspRuntimeLibrary.URLEncode(String.valueOf (request.getParameter("codigoCliente") ),

request.getCharacterEncoding()), out, false); out.write("\n");

out.write(" pedidos </h1>\n");

El código del servlet llamado:

import java.io.IOException; import java.io.PrintWriter; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.util.logging.Level; import java.util.logging.Logger; import javax.naming.InitialContext; import javax.naming.NamingException; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.sql.DataSource;

protected void processRequest(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

PrintWriter out = response.getWriter(); try { InitialContext cx; Connection cn; DataSource ds; cx=new InitialContext(); ds=(DataSource)cx.lookup("java:comp/env/jdbc/northwind"); cn=ds.getConnection(); PreparedStatement sm; ResultSet rs;

sm=cn.prepareStatement("select count(orderid) from orders where customerid=?");

sm.setString(1,request.getParameter("codigo")); rs = sm.executeQuery();

rs.next();

out.println(rs.getString(1));

} catch (SQLException ex) {

Logger.getLogger(NumPedidos.class.getName()).log(Level.SEVERE, null, ex);

} catch (NamingException ex) { Logger.getLogger(NumPedidos.class.getName()).log(Level.SEVERE, null, ex); } } @Override

protected void doGet(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException { processRequest(request, response); }

@Override

protected void doPost(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException { processRequest(request, response); }

}