Documentos de Académico
Documentos de Profesional
Documentos de Cultura
La programacin basada en el lenguaje Java es actualmente una eleccin bastante popular en el desarrollo de aplicaciones web, esto gracias a sus caractersticas ya conocidas entre los programadores tales como: orientacin a objetos, escribe una vez, usa en cualquier lugar, etc.
El modelo ofrecido por la tecnologa Java Empresarial define una arquitectura orientada a la implementacin de aplicaciones web multicapas, en las cules es necesario siempre tener en mente conceptos como: Presentacin, Lgica, Datos, etc.
La programacin basada en el lenguaje Java es actualmente una eleccin bastante popular en el desarrollo de aplicaciones web, esto gracias a sus caractersticas ya conocidas entre los programadores tales como: orientacin a objetos, escribe una vez, usa en cualquier lugar, etc.
El modelo ofrecido por la tecnologa Java Empresarial define una arquitectura orientada a la implementacin de aplicaciones web multicapas, en las cules es necesario siempre tener en mente conceptos como: Presentacin, Lgica, Datos, etc.
JavaBeans encargados de gestionar los datos que viajan entre el cliente y el servidor.
Erick Arauco Moreno 6
Componentes Web. Representados por Servlets pginas JSP (Java Server Pages) y/o Tecnologa JSF (Java Server Faces).
Componentes de Negocio. Representan las necesidades de un negocio en particular tal como banca, educacin, etc. Claramente representados por los Enterprise JavaBeans, los cules reciben la informacin desde los clientes y la envan al Enterprise Information System para su respectivo almacenamiento.
La Servlet Application Programming Interface. Un servlet es una aplicacin de lado servidor que opera como un servicio de red. A diferencia de los applets, la parte visual de un servlet esta representada por una pgina web.
10
11
12
13
Type text
Subtype plain,richtext,html,xml
message
application image audio video
email,news
Octect-stream jpeg,gif basic,midi,mp3 Mpeg,quicktime
14
La inexistencia de un contenedor j2ee traera consigo que los desarrolladores se preocupen por elementos como: el despliegue y/o de un componente web, el despliegue y/o de un componente empresarial (EJB), transacciones, etc. Por lo tanto un contenedor representa la interface entre un componente y la funcionalidad de la plataforma que lo soporta. Existen contenedores web (Servlets y JSP) y contenedores EJB (Enterprise JavaBeans), los cuales a su vez forman parte y son gestionados por un contenedor J2ee.
15
16
Glassfish
17
18
Mdulos EJB. Representan las clases Enterprise JavaBeans y su respectivo descriptor de despliegue. Normalmente empaquetados bajo la extensin .jar.
Mdulos Web. Representado por los Servlets, pginas JSP y todo recurso que utilizado por la aplicacin (gif, html, etc). Los mdulos web normalmente son empaquetados bajo la extensin .war (Web Archive). Mdulos para Aplicaciones Cliente. Representado por todas aquellas clases java junto a un descriptor de despliegue. Empaquetados normalmente bajo la extensin .jar. Mdulos de Recurso. Conformado por interfaces java, clases, libreras y otra documentacin necesaria para la aplicacin. Empaquetados normalmente bajo la extensin .rar (Resource Adapter Archive).
19
2.1 Servlets
Un Servlet es una clase java utilizada para extender las capacidades de los servidores que almacenan aplicaciones accesibles bajo el modelo de programacin solicitud respuesta.
Los paquetes javax.servlet y javax.servlet.http proveen las interfaces y clases para la creacin de los servlets. Todos los servlets deben implementar la interface Servlet, la cual provee los mtodos necesarios para atender las solicitudes (Get Post) de los clientes.
20
2.2 Solicitudes
GET /index.html HTTP/ 1.0 Accept: text / html Connection: Keep-Alive Host: www.hungriyminds.com User-Agent: Mozilla/4.02 [en] GET /index.html ?user=earauco&password=123 HTTP /1.0 Accept: text / html Connection: Keep-Alive Host: www.hungriyminds.com User-Agent: Mozilla/4.02 [en] POST /index.html HTTP/ 1.0 Accept: text / html Connection: Keep-Alive Host: www.hungriyminds.com User-Agent: Mozilla/4.02 [en] Content-Length=25 user=earauco&password=123
21
Usamos GET cuando la solicitud no implica ningn cambio en el estado del servidor. Usamos POST en caso contrario.
GET es lo ideal para operaciones de slo lectura. Considerar tambin las limitaciones de usar GET, debido a que los parmetros enviados son adicionados a la direccin, lo cul es visible para el usuario final.
22
init( ). La inicializacin del servlet normalmente est centrada a la ejecucin de actividades que se ejecutan normalmente una sla vez, por ejemplo: inicializar una variable, establecer la conexin con una base de datos, etc. service ( ). Encargado de examinar la peticin del cliente y emitir una respuesta al mismo. Encontramos dos implementaciones: doGet( ) y doPost( ). destroy ( ). Utilizado normalmente para devolver ciertos recursos adquiridos como las conexiones de la base de datos. Despus que el mtodo destroy es invocado, el servlet es marcado para ser recolectado por el recolector de basura.
23
2.4 Servlets
out.println("<html>"+ "<head><title>Bienvenida</title></head>"); out.println( "<body bgcolor=\"#ffffff\">" + "<img src=\"duke.waving.gif\"alt=\"Duke waving\">" + "<h2>Hola, mi nombre es Duke. Cual es el tuyo?</h2>" + "<form method=\"get\">" + "<inputtype=\"text\"name=\"username\"size=\"25\">" + "<p></p>" + "<inputtype=\"submit\"value=\"Submit\">" + "<inputtype=\"reset\"value=\"Reset\">"+ "</form>"); String username = request.getParameter("username"); if ((username != null) && (username.length()> 0)) { //Se obtiene el recurso RequestDispatcher dispatcher = getServletContext() .getRequestDispatcher("/respuestaservlet"); if (dispatcher != null) { //La salida del recurso se incluye en el primer servlet. dispatcher.include(request, response); } } out.println("</body></html>"); out.close(); }
24
2.4 Servlets
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType(CONTENT_TYPE); PrintWriter out = response.getWriter(); String username= request.getParameter("username"); if ((username != null) && (username.length() > 0)) { out.println("<h2>Hola, " + username + "!</h2>"); } }
25
2.5 Filtros.
Un filtro es un objeto asociado a uno o varios servlets que se ejecuta en el servidor de manera previa. Un filtro puede ser usado para alguna de las siguientes tareas:
- Invocar a un servlet normalmente. - Capturar y/o modificar la solicitud que se hace a un servlet. - Invocar al servlet y modificar su respuesta. - Evitar la invocacin al servlet.
26
2.5 Filtros.
publicclass VerificadorServlet implements Filter { private FilterConfig_filterConfig = null; publicvoid init(FilterConfigfilterConfig)throws ServletException{ _filterConfig = filterConfig; } publicvoid destroy() { _filterConfig = null; } public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
String servidor = request.getRemoteAddr(); PrintWriterout=response.getWriter(); if (servidor.equals("192.168.11.54")){ out.println( "<HTML>\n"+ "<HEAD><TITLE>Error</TITLE></HEAD>\n"+ "<BODY GBCOLOR=\'#FDF5E6\'>\n" + "<H1>Página bloqueadapara el IP: " + servidor + " </H1>\n" + "</BODY></HTML>"); } else { chain.doFilter(request, response); }
} }
27
2.5 Filtros.
<?xml version = '1.0' encoding = 'windows-1252'?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"> <description>Empty web.xml file for Web Application</description> <filter> <filter-name>VerificadorServlet</filter-name> <filter-class>parametrosproject.VerificadorServlet</filter-class> </filter> <filter-mapping> <filter-name>VerificadorServlet</filter-name> <servlet-name>RecepcionServlet</servlet-name> </filter-mapping> <servlet> <servlet-name>RecepcionServlet</servlet-name> <servlet-class>parametrosproject.RecepcionServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>RecepcionServlet</servlet-name> <url-pattern>/recepcionservlet</url-pattern> </servlet-mapping> </web-app> Erick Arauco Moreno 28
2.5 Filtros.
public void doFilter(ServletRequestrequest,ServletResponseresponse, FilterChainchain) throwsIOException,ServletException{ HttpServletRequest req = (HttpServletRequest) request; HttpServletResponse res = (HttpServletResponse) response; String nav = req.getHeader("user-agent"); String browser= ""; PrintWriter out=response.getWriter(); if(nav.contains("MSIE")) { browser="Internet Explorer"; out.println( "<HTML>\n" + "<HEAD><TITLE>Bienvenido</TITLE></HEAD>\n"+ "<BODY GBCOLOR=\'#FDF5E6\'>\n" + "<H1>Imposible usar " + browser + "</H1>\n" + "</BODY></HTML>"); } else { chain.doFilter(request,response); } } Erick Arauco Moreno 29
Carga del driver JDBC (Java Database Connectivity). Para cargar el driver, se hace necesario conocer el nombre del mismo utilizando Class.forName. Definir la conexin URL. Es necesario definir la direccin del host, puerto y nombre de la base de datos. Establecer la conexin. Con la conexin URL, usuario y password, se puede establecer una conexin con la base de datos. Crear el objeto Statement. Crear el objeto statement nos va a permitir enviar consultas a la base de datos. Ejecuctar una consulta o actualizacin. execute, executeQuery, executeUpdate ExecuteBatch. Procesar el resultado. Una vez que la consulta ha sido ejecutada, un objeto ResultSet es retornado. Cerrar la conexin. Una vez terminadas las consultas y procesados los resultados, la conexin debera ser cerrada liberando as los recursos asignados a la base de datos.
Erick Arauco Moreno 30
31
- executeBatch. Ejecuta un grupo de comandos como una sola unidad y retorna un arreglo con la cantidad de actualizaciones realizadas por cada comando.
32
DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver()); Connection conn; conn = DriverManager.getConnection("jdbc:oracle:thin:@192.168.16.4:1521:db2ets","U_Profesor", "OraProfesor"); // driver@machineName:port:SID,userid,password Statement stmt = conn.createStatement(); ResultSet rset = stmt.executeQuery("select* from personal"); out.println("<html>"); out.println("<head><title>ViewTableServlet</title></head>"); out.println("<body>"); while (rset.next()) { out.println("<p>"+ rset.getString(1)+ "</p>"); } out.println("</body></html>"); rs.close(); stmt.close(); conn.close(); out.close(); } catch (SQLException ex) { ex.printStackTrace(); } } }
33
Entre las principales ventajas de este tipo de Statement en relacin a los convencionales podemos mencionar:
- Performance. En algunos casos utilizar sentencias precompiladas puede representar el 62% del tiempo total que puede demandar utilizar sentencias simples. - Seguridad. Evitar recibir cadenas mal formadas que comprometan la ejecucin de la aplicacin (SQL Injection). Para lograr anular un ataque SQL Injection al momento de recibir datos desde un formulario HTML, es necesario utilizar sentencias precompiladas procedimientos almacenados con la finalidad de actualizar la base de datos.
Connection connection = DriverManager.getConnection(url,username, password); String template = "UPDATE music SET price = ? WHERE id = ?"; PreparedStatementstatement = connection.prepareStatement(template); float[]newPrices = getNewPrices(); int[]recordingIDs = getIDs(); for(inti=0; i<recordingIDs.length;i++) { statement.setFloat(1,newPrices[i]); // Price statement.setInt(2,recordingIDs[i]); // ID statement.execute(); }
34
Cuando mltiples clientes acceden a la misma aplicacin puede ocurrir un error en el servidor debido a que el mismo intentar siempre atender las solicitudes de todos los clientes y entregar la informacin solicitada.
35
Context ctx; Connection conn=null; try { ctx = new InitialContext(); DataSource ds; ds = (DataSource)ctx.lookup("jdbc/_mirecurso"); conn = ds.getConnection(); } catch (NamingException e) { e.printStackTrace(); }
36
33
UnavailableException
39
40
41
42
5.1. Sesiones.
Una sesin es un contexto de almacenamiento de datos gestionado por el servidor Web que permite identificar a usuarios mientras dure su navegacin en la aplicacin web. Las sesiones son nicas y corresponden a un solo usuario. Una sesin se obtiene utilizando el mtodo getSession(). Si el parmetro de entrada del mtodo es true y la sesin no existe se crea.
43
JSP no es distinto de otros lenguajes para desarrollo web. Genera tambin contenido dinmico. Su principal uso radica en ser parte de la capa de presentacin debido a que es ms simple generar contenido dinmico desde una pgina JSP en lugar de un Servlet Java. El servlet generado extiende la clase HttpJSPServlet. Esta clase contiene los siguientes mtodos:
- jspInit(). Este mtodo es invocado cuando la pgina JSP es inicializada. Equilavente al mtodo init() del servlet. - jspDestroy(). Este mtodo es similar al mtodo destroy() del servlet. - _jspService(). Este mtodo contiene todo el cdigo HTML. Equivalente al mtodo service() de los servlets. Para cada solicitud de los clientes, un hilo (thread) ejecuta este mtodo con el objetivo de satisfacer los requerimientos.
44
Una directiva JSP representa informacin vital para el motor JSP. Podemos encontrar:
- Directiva de Pgina. Una directiva de pgina provee de informacin al motor JSP sobre la pgina que estamos creando. Entre los atributos ms importantes encontramos: - language. Define el lenguaje de script a utilizar. Por defecto java. Los motores JSP slo entienden Java. - extends. Usado cuando la pgina JSP compilada debe extender alguna clase - import. Utilizado en el caso que debemos realizar importacin de clases java. - session. Por defecto verdadero. Valor booleano que define si la pgina debe gestionar sesiones. - contentType. Tipo de contenido a generar. Protocolo MIME.
Erick Arauco Moreno 45
Elementos script:
- Declaraciones. Las pginas JSP pueden contener variables y mtodos definidos como cualquier programa Java. Las variables y los mtodos son declaradas utilizando la siguiente etiqueta: <%! %>. Las variables y los mtodos declarados tienen un alcance a nivel de clase, esto significa que estn disponibles en todo el servlet generado. - Scriptlets. Bloque de cdigo Java situado en el interior del mtodo service() del servlet. Un scriptlet inicia con la etiqueta <% y termina con %>.
- Expresiones. Una expresin representa una salida. Representada por las etiquetas <%= %> .
46
<jsp:useBean id=name scope=page | request | session | application beanName =bean class Name />
Este tipo de elemento permite realizar acciones como: instanciacin de un objeto cambios en el estado del mismo. Entre las principales etiquetas podemos encontrar:
- <jsp:useBean>. Incluye un Bean en la pgina JSP, esto significa que habilita a la pgina para acceder a las propiedades del Bean utilizando los mtodos set / get. - id. Contiene el nombre que usaremos para referirnos al Bean. - scope. Determine el periodo de vida del Bean. Puede ser:
- application. El objeto una vez instanciado est disponible para todos los clientes y permanece
- beanName. Nombre de la clase que representa el Bean.
Erick Arauco Moreno 47
48
Escribir aplicaciones J2ee utilizando Servlets y pginas JSP no es una tarea complicada, pero esto nos puede originar ms de un problema sobre todo si empezamos a observar duplicidad de cdigo en los diversos servlets que conforman nuestra aplicacin.
Una solucin a este problema es la implementacin del patrn MVC (Modelo Vista Controlador) que nos va a permitir ordenar el cdigo de nuestra aplicacin. El patrn mencionado est compuesto por los siguientes elementos:
- Modelo. Representa el acceso a la base de datos. Define uno o varios mtodos que permitan enviar y/o recuperar datos desde cualquiera de las tablas que forman parte de la BD. - Controlador. Encargado de recibir las peticiones y datos desde la vista, decidir que mtodo del modelo ejecutar y devolver el resultado a la vista para su posterior presentacin. Representado tpicamente por los Servlets Java. - Vista. Representado por las pginas JSP encargadas de capturar los datos del cliente y de presentar los resultados.
49
Puntos dbiles: Extensin del controlador: El Servlet controlador puede volverse demasiado complejo y complicado de mantener. Cdigo Java en pginas JSP. Capa Datos: Almacenamiento de la informacin. Solucin: Dividir el controlador en varios sub-controladores. Usar Struts.
49
7.2. Struts
Framework o marco de trabajo desarrollado por el grupo Apache, que proporciona un conjunto de utilidades cuyo objetivo es facilitar el desarrollo de aplicaciones Web con tecnologa J2EE siguiendo el patrn MVC.
Beneficios: Control declarativo de peticiones. Con Struts el programador no tiene que preocuparse por controlar desde cdigo las distintas acciones a realizar en funcin del tipo de peticin que llega al controlador. Utilizacin de direcciones virtuales. Permite asignar direcciones virtuales asociadas a los diferentes objetos. Manipulacin de datos con JavaBean. Struts se encarga automticamente de la instanciacin, rellenado y recuperacin de los mismos. Juego de libreras JSP. Libreras predefinidas para pginas JSP.
49
Adems del descriptor de despliegue web.xml definido por la especificacin J2ee, una aplicacin requiere de otros archivos adicionales, siendo el ms importante:
struts-config.xml ApplicationResource.properties. Definicin de cadenas de texto. Internacionalizacin. validator-rules.xml. Reglad para la validacin automtica de los datos de usuario. tiles-defs.xml. Reutilizacin de modelos de plantillas para la vista.
49
7.4. El Ap Struts
Formado por un conjunto de clases para estructurar las aplicaciones y simplificar su desarrollo. Paquetes org.apache.struts.action y org.apache.struts.actions. Clases: ActionServlet. Constituye el punto de entrada de la aplicacin recibiendo todas las peticiones HTTP que llegan de la capa cliente. Es un Servlet. Cada vez que recibe una peticin desde el cliente y a fin de determinar la operacin a realizar, extrae la ltima parte de la URL y la contrasta con la informacin contenida en el archivo de configuracin (struts-config.xml) a partir de la cual, instancia el JavaBean asociado a la accin, lo rellena con los datos procedentes del formulario y lo pasa al objeto Action correspondiente.
49
7.4. El Ap Struts
Action. Responsables de procesar los distintos tipos de peticiones que llegan a la aplicacin. El principal mtodo con que cuenta esta es execute(), mtodo que ser invocado por ActionServlet al transferir la peticin al objeto. Por cada tipo de peticin que se vaya a controlar, el programador deber implementar el mtodo execute(), se incluyen las acciones para el tratamiento de la peticin, llamadas al modelo, o transferencia de datos a la vista.
49
7.4. El Ap Struts
ActionForm. Tipo especial de JavaBean que facilitan el transporte de datos entre las capas de la aplicacin. Utilizador por ActionServlet para capturar datos procedentes del formulario HTML y envirselo al objeto Action. Normalmente se implementan los mtodos get / set de un JavaBean.
49
7.5. Funcionamiento
struts-config.xml
Action 1
Browser
ActionServlet
Action 2
Modelo
Action 3
Vista ActionForm1
ActionForm2
49
JAAS (Java Authentication and Authorization Service) es un conjunto de libreras disponibles en la mquina virtual java desde la versin 1.4 a travs de las cuales se define un formato estndar para controlar el acceso a las aplicaciones. Autentificacin.
La autentificacin representa el proceso a travs del cul el usuario debe identificarse para poder acceder a un conjunto de servicios.
Autorizacin.
La autorizacin representa el proceso, a travs del cul se controlan las acciones de un usuario ya autentificado, por lo tanto, se le conceden o niegan permisos sobre distintos servicios.
Erick Arauco Moreno
49
JAAS (Java Authentication and Authorization Service) es un conjunto de libreras disponibles en la mquina virtual java desde la versin 1.4 a travs de las cuales se define un formato estndar para controlar el acceso a las aplicaciones. Autentificacin.
La autentificacin representa el proceso a travs del cul el usuario debe identificarse para poder acceder a un conjunto de servicios.
Autorizacin.
La autorizacin representa el proceso, a travs del cul se controlan las acciones de un usuario ya autentificado, por lo tanto, se le conceden o niegan permisos sobre distintos servicios.
Erick Arauco Moreno
49
Un realm es definido en un servidor web de aplicaciones. Contiene una coleccin de usuarios los cules pueden estar o no asignados a un grupo. Una aplicacin frecuentemente ingresar un usuario y contrasea antes de acceder a un recurso protegido. Luego de esto, esta informacin es pasada al servidor quin se encargar de autenticar los datos. En algunas aplicaciones, los usuarios autorizados son asociados a roles, en esta situacin, el rol asignado al usuario debe ser mapeado con un grupo definido en el servidor.
49
49
Autentificacin Bsica.
49
49
49
49
49
49
49
49
49
49
Resumiendo, las aplicaciones JSF estn conformadas por los siguientes elementos:
49
Cada pgina JSP que necesite utilizar elementos JSF para construir la interfaz grfica del usuario deber definir inicialmente las directivas JSF que le permiten utilizar las etiquetas respectivas. En la siguiente figura observamos el uso de las directivas JSF:
<%@ page contentType="text/html"%> <%@ taglib uri="http://java.sun.com/jsf/core" prefix="f"%> <%@ taglib uri="http://java.sun.com/jsf/html" prefix="h"%>
49
Descripcin
Botones. Enlaces. Formulario. Campo de texto. Imprime un mensaje de error.
49
49
Restaurar los componentes de la vista (restore view). El controlador crea una estructura tipo rbol de cada componente grfico utilizado en la pgina. En la siguiente figura observaremos la representacin grfica de la estructura creada.
49
Aplicar valores de la solicitud (apply request values). Una vez creada la estructura de rbol de la vista en memoria; se recuperan los parmetros de entrada y los mismos van siendo almacenados en la propiedad value de cada componente grfico a medida que se recorre el rbol.
UIViewRoot
HtmlForm
HtmlInputT ext
HtmlSelect OneRadio
HtmlSelect OneMenu
49
Procesamiento de las validaciones (process validations). Se inicia la el procedimiento de validacin de los datos almacenados en cada componente segn las reglas definidas en un fichero de configuracin. En este punto podemos decir que si alguno de los campos no supera la validacin respectiva aparecer el mensaje correspondiente.
Validation error.
Invalid email
49
Actualizar los valores del modelo (update model values). Una vez que los datos han sido verificados es tiempo que los datos sean almacenados en el Bean correspondiente.
UIViewRoot
HtmlForm
HtmlInputT ext
HtmlSelect OneRadio
HtmlSelect OneMenu
49
Invocacin a la aplicacin (Invoke application). Se usan los valores del Bean para ejecutar la lgica del negocio. Presentacin de la respuesta (render response). Se delega la autoridad al contenedor JSP para visualizar la pgina de resultado.
49
Invocacin a la aplicacin (Invoke application). Se usan los valores del Bean para ejecutar la lgica del negocio. Presentacin de la respuesta (render response). Se delega la autoridad al contenedor JSP para visualizar la pgina de resultado.
49
49
Antes del desarrollo de aplicaciones java empresariales, los desarrolladores java eran los responsables de la instanciacin y gestin de las propiedades una clase java o un JavaBean. Los Bean gestionados son esencialmente objetos java que almacenan informacin y que a su vez son gestionados por el contenedor j2ee. Estos beans son registrados a travs del fichero de configuracin faces-config.xml.
49
<h:outputText value=#{userBean.firstName}/>
<h:inputText value=#{userBean.firstName}/>
49
<managed-bean> <managed-bean-name>UserBean</managed-bean-name> <managed-bean-class>project1.UserBean</managed-bean-class> <managed-bean-scope>session</managed-bean-scope> <managed-property> <property-name>firstName</property-name> <value>Jane</value> </managed-property> <managed-property> <property-name>lastName</property-name> <value>Hopson</value> </managed-property> </managed-bean>
49
49
10.1. Validaciones
Para la implementacin de validaciones en JSF pone a disposicin de los desarrolladores la interface javax.faces.validator.Validator. Como regla general, esta interface es implementada por objetos que funcionan como validadores. El mtodo contiene algunos parmetros como: FacesContext quien contiene toda la informacin asociada a una peticin, UIComponent, que representa el objeto a validar y Object que presenta el valor sobre el cual se aplicar la validacin.
public void validate (FacesContext context, UIComponent component, Object value)
49
javax.faces.DoubleRange. Valida datos de tipo java.lang.Double en un rango determinado. javax.faces.Length. Valida datos de tipo String verificando que su longitud se encuentre en un espeficado rango. javax.faces.LongRange. Valida que los datos de tipo java.lang.Long se ubiquen en un determinado rango.
49
49
49
49
49