«Cualquiera puede hablar. Enséñame el código.» -Linus Torvalds
martes, 2 de junio de 2015
domingo, 16 de marzo de 2014
jueves, 13 de marzo de 2014
Description Resource Path Location Type Method must have signature "String method(), String method(), String method(String)... bla bla bla
Seguramente habrás visto alguna vez este error en eclipse trabajando con JSF:
Description Resource Path Location Type Method must have signature "String
method(), String method(), String method(String), String method(String,
String), String method(String, String, String), String method(String, String,
String, String), String method(String, String, String, String, String), String
method(String, String, String, String, String, String), String method(String,
String, String, String, String, String, String), String method(String, String,
String, String, String, String, String, String), String method(String, String,
String, String, String, String, String, String, String), String method(String,
String, String, String, String, String, String, String, String, String), String
method(String, String, String, String, String, String, String, String, String,
String, String), String method(String, String, String, String, String, String,
String, String, String, String, String, String), String method(String, String,
String, String, String, String, String, String, String, String, String, String,
String), String method(String, String, String, String, String, String, String,
String, String, String, String, String, String, String), String method(String,
String, String, String, String, String, String, String, String, String, String,
String, String, String, String), String method(String, String, String, String,
String, String, String, String, String, String, String, String, String, String,
String, String), String method(String, String, String, String, String, String,
String, String, String, String, String, String, String, String, String, String,
String), String method(String, String, String, String, String, String, String,
String, String, String, String, String, String, String, String, String, String,
String), String method(String, String, String, String, String, String, String,
String, String, String, String, String, String, String, String, String, String,
String, String)" but has signature "void method()" DOC.xhtml/Class/WebContent line 17 Facelet
Validator
![]() |
Error incómodo ! |
Es un error producido por la firma de incompatibilidades, podemos solucionar este bug inhabilitando este tipo de avisos de la siguiente manera:
Windows > Preferences
Web > JavaServer Faces Tools > Validation
Y marcamos como Ignore la línea Method expression signature incomtability después Ok!
Aviso incómodo no incomoda más !
domingo, 9 de marzo de 2014
ManagedBean
Páginas del tipo XHTML son las responsables de recibir las informaciones del usuario y enviarlas a nuestro bean (ManagedBean), no se colocan reglas de negocio, solo reglas básicas de visualización.
Nuestro bean es el responsable de decidir que pasará cuando estas informaciones sean recibidas, es decir, las acciones a ser realizadas. Sirve como un canal entre la interfaz gráfica (página web) y la parte interna de nuestra aplicación (back-end).
ManagedBean no debe realizar operaciones en la base de datos (Insert, update, remove) directamente, solo tiene que recibir la requisición y llamar a la clase correspondiente.
Teoría
Práctica
- Creamos una clase modelo Persona:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | package Model; public class Persona { //Variables private String nombre; private String edad; //Getters & Setters public String getNombre() {return nombre;} public void setNombre(String nombre) {this.nombre = nombre;} public String getEdad() {return edad;} public void setEdad(String edad) {this.edad = edad;} //Full constructor public Persona(String nombre, String edad) { super(); this.nombre = nombre; this.edad = edad; } //Empty constructor public Persona() { super(); this.nombre = ""; this.edad = ""; } } |
- Creamos nuestro bean PersonaBean:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | package Controller; import javax.faces.bean.ManagedBean; import Model.Persona; @ManagedBean public class PersonaBean { //Instances private Persona objPersona; //Constructor public PersonaBean(){ this.objPersona = new Persona(); } //Getters & Setters public Persona getObjPersona() {return objPersona;} public void setObjPersona(Persona objPersona) {this.objPersona = objPersona;} } |
- Creamos la página xhtml persona.xhtml:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | <?xml version="1.0" encoding="ISO-8859-1" ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xmlns:h="http://java.sun.com/jsf/html"> <head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" /> <title>Insert title here</title> </head> <h:body> <h:form id="frm"> <h:outputLabel value="Nombre: " for="nombre" /> <h:inputText value="#{personaBean.objPersona.nombre}" id="nombre" /><br /> <h:outputLabel value="Edad: " for="edad" /> <h:inputText value="#{personaBean.objPersona.edad}" id="edad" /><br /> <h:commandButton value="Registrar" /><hr/> <h:outputLabel value="Nombre digitado: #{personaBean.objPersona.nombre} " /><br /> <h:outputLabel value="Edad digitada: #{personaBean.objPersona.edad} " /> </h:form> </h:body> </html> |
jueves, 6 de marzo de 2014
Archivo WEB.XML
Es un archivo de configuración de aplicaciones web Java, determina como nuestra aplicación se tiene que comportar, vamos a analizar el archivo:
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?xml version="1.0" encoding="UTF-8"?> | |
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" | |
xmlns="http://java.sun.com/xml/ns/javaee" | |
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" | |
version="3.0"> | |
<!-- | |
Determinamos el estado de nuestro projecto, de esta forma los errores son mostrados de forma | |
mas detallada. | |
--> | |
<context-param> | |
<param-name>javax.faces.PROJECT_STAGE</param-name> | |
<param-value>Development</param-value> | |
</context-param> | |
<!-- | |
Nombre de projecto que aparece en el panel administrativo de Tomcat. | |
--> | |
<display-name>Conociendo el archivo de configuración WEB.XML</display-name> | |
<!-- | |
Este Faces Servlet es el que recibe todas las requisiciones. | |
--> | |
<servlet> | |
<servlet-name>Faces Servlet</servlet-name> | |
<servlet-class>javax.faces.webapp.FacesServlet</servlet-class> | |
<load-on-startup>1</load-on-startup> | |
</servlet> | |
<!-- | |
que son mapeadas a una URL, por defecto "/faces/". | |
Con *.xhtml executaremos todas las páginas con extensión "xhtml" | |
sin necesidad de colocar /faces/, básicamente padronizamos nuestra URL. | |
Si utilizamos /faces/* el usuário puede digitar www.site.com/index.xhtml y podrá | |
ver todo nuestro código, para evitar esto, lo solucionamos también con *.xhtml | |
y de este modo serán procesadas todas las páginas xhtml. | |
--> | |
<servlet-mapping> | |
<servlet-name>Faces Servlet</servlet-name> | |
<url-pattern>*.xhtml</url-pattern> | |
</servlet-mapping> | |
<!-- | |
Determinamos donde serán guardados los estados de lo componentes, en JSF por defecto es en el servidor, | |
pero por defecto, eclipse lo cambia para el cliente. | |
--> | |
<context-param> | |
<description>State saving method: 'client' or 'server' (=default). See JSF Specification 2.5.2</description> | |
<param-name>javax.faces.STATE_SAVING_METHOD</param-name> | |
<param-value>client</param-value> | |
</context-param> | |
<!-- | |
Habilitamos uso de localización, para poder usar internalización. | |
--> | |
<context-param> | |
<param-name>javax.servlet.jsp.jstl.fmt.localizationContext</param-name> | |
<param-value>resources.application</param-value> | |
</context-param> | |
<!-- | |
Específico de la implementación Mojarra, es un listener que se activa en el inicio de la aplicación, | |
valida si las configuraciones estan OK. | |
--> | |
<listener> | |
<listener-class>com.sun.faces.config.ConfigureListener</listener-class> | |
</listener> | |
</web-app> |
domingo, 2 de marzo de 2014
jueves, 27 de febrero de 2014
Implementación JSF
Teoría
En primer lugar hay que dejar bien claro que JSF no es ningún producto, no se compra, no es algo físico !
JSF es la especificación, lo que necesitamos para para comenzar a programar en JSF es una implantación, la cual conseguiremos bajar, es el producto final. Hay varias implementaciones, las mas conocidas son MyFaces y Mojarra.
Mojarra es una implementación de referencia (JSF RI), significa que es una implentación modelo, es compatible 100% con la especificación JSF.
MyFaces es una implementación open-source de Apache, menos usada que Mojarra.
Podría ser perfectamente comparado con el sistema GNU/Linux, Linux es el Kernel y a partir de el surgieron muchas distribuciones, digamos que Mojarra es la implementación "Kernel" y MyFaces seria un Ubuntu. Tambien existen implentaciones que son de pago.
Personalmente escojo Mojarra por causa de la gran comunidad que existe de programadores trabajando en con esta implementación, la limpieza en el código, en caso de bug, seria fácil de solucionar gracias al soporte que existe.
Práctica
Ok, muy bonita la teoría, pero en la práctica que es una implementación? Simplemente es un archivo/biblioteca JAR que puede ser bajado en este link (Mojarra). Los pasos de instalación están explicados en el primer capitulo de la sección Junior.
Suscribirse a:
Entradas (Atom)