Foros del Web » Programación para mayores de 30 ;) » Java »

Llamar metodos en JSF

Estas en el tema de Llamar metodos en JSF en el foro de Java en Foros del Web. Buenas tardes colegas. En esta ocasion tengo una duda. Estoy empezando en JSF. Nesecito llamar un metodo desde la pagina al BEAN, ejemplo. @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); ...
  #1 (permalink)  
Antiguo 10/07/2015, 13:24
 
Fecha de Ingreso: mayo-2013
Ubicación: bogota
Mensajes: 157
Antigüedad: 11 años
Puntos: 2
Llamar metodos en JSF

Buenas tardes colegas.

En esta ocasion tengo una duda.
Estoy empezando en JSF.
Nesecito llamar un metodo desde la pagina al BEAN, ejemplo.

Código Java:
Ver original
  1. <h:body>
  2.         <h:form>
  3.             digite su nombre
  4.         <h:inputText id="intxt" value="#{Usuario.nombre}"/><br/>
  5.         digite su edad
  6.         <h:inputText value="#{Usuario.edad}"/>
  7.         <h:commandButton value="submit"/><br/>
  8.         su nombre es
  9.             <h:outputText id="outtxt" value="#{Usuario.nombre}"/><br/>
  10.        
  11.             su edad es <h:outputLabel value="#{Usuario.decirEdad}"/>
  12.         </h:form>
  13.     </h:body>

Usuario.decirEdad es el metodo que defino en el MANAGEDBEAN

Código Java:
Ver original
  1. @ManagedBean(name="Usuario")
  2. @SessionScoped
  3. public class Usuario {
  4.     public Usuario() {
  5.     }
  6. private String nombre;
  7. private int edad;
  8.     public String getNombre() {
  9.         return nombre;
  10.     }
  11.  
  12.     public void setNombre(String nombre) {
  13.         this.nombre = nombre;
  14.     }
  15.    
  16.  
  17.     public int getEdad() {
  18.         return edad;
  19.     }
  20.  
  21.     public void setEdad(int edad) {
  22.         this.edad = edad;
  23.     }
  24.  
  25.     public String decirEdad(){
  26.         if(this.getEdad()>=18)
  27.             return "mayor de edad";
  28.         else
  29.             return "menor de edad";
  30.     }
  31.  
  32. }
y cuando ejecuto la pagina me dice que decirEdad no es una propiedad de la
clase Usuario.

Muchas gracias.
  #2 (permalink)  
Antiguo 11/07/2015, 01:55
Avatar de Xerelo  
Fecha de Ingreso: mayo-2009
Mensajes: 2.175
Antigüedad: 15 años
Puntos: 306
Respuesta: Llamar metodos en JSF

Y no lo es.

En java existe una convención que hace que casi todos los atributos de clase tenga un método getter y un setter. De esa forma distintos framework o clases facilitan las cosas usando estos getter y setter.

Desconozco como funciona en jsf, pero será muy aproximado a esto:

Cuando pones Usuario.nombre, en realidad no estás accediendo a la variable nombre, sino al método getNombre. Cuando pones Usuario.decirEdad buscará la propiedad decirEdad o el método getDecirEdad, y ninguna de los dos existe.
__________________
Cada vez que solucionas los problemas de alguien que no se esfuerza, piensa en que el día de mañana puede llegar a ser tu compañero de trabajo, o peor, tu jefe.
  #3 (permalink)  
Antiguo 11/07/2015, 07:35
 
Fecha de Ingreso: mayo-2013
Ubicación: bogota
Mensajes: 157
Antigüedad: 11 años
Puntos: 2
Respuesta: Llamar metodos en JSF

Si, en realidad mi interes es encontrar la forma de que cuando yo escriba en la pagina la edad del usuario, me diga si es mayor de edad o no, por que de hecho Usuario.nombre si me lo devuelve pero por que no es directamente un metodo en el bean sino una variable con su respectivo get y set, Pero Usuario.decirEdad es un metodo que devuelve un String.
Es decir
Usuario.nombre

Código Java:
Ver original
  1. public class Usuario {
  2. //Usuario.nombre
  3. private String nombre;//variable gloval nombre
  4. public String getNombre() {//obtiene el nombre
  5.         return nombre;
  6.     }
  7.  
  8.     public void setNombre(String nombre) {//ajusta o edita el nombre
  9.         this.nombre = nombre;
  10.     }

Pero es que Usuario.decirEdad no es directamente una variable sino un metodo que devuelve un String y que dentro de este metodo sì utiliza la variable edad.
Es decir.
Código Java:
Ver original
  1. @SessionScoped
  2. public class Usuario {
  3.     public Usuario() { }
  4. private int edad;//variable global
  5.    
  6.  
  7.     public int getEdad() {//obtiene la edad que se editò en setEdad()
  8.         return edad;
  9.     }
  10.  
  11.     public void setEdad(int edad) {//ajusta la edad por medio de la variable global edad
  12.         this.edad = edad;                 //para  guardarla en el metodo getEdad()
  13.     }
  14.  
  15. //y aqui es donde esta el problema, utilizo el metodo decirEdad (){getEdad() para comparar la
  16. //edad y asi devolver su respectiva cadena, pero no hace nada. y en la pagina me dice que no
  17. //Usuario.decirEdad no es una propiedad del Bean Usuario.
  18.     public String decirEdad(){
  19.         if(this.getEdad()>=18)//utilizamos la edad guardada en la variable edad
  20. //devuelve su respectivo String
  21.             return "mayor de edad";
  22.         else                                      
  23.             return "menor de edad";
  24.     }
  25.  
  26. }
Espero haberte explicado mejor mi duda. Gracias.

Última edición por dacroma; 11/07/2015 a las 07:41
  #4 (permalink)  
Antiguo 12/07/2015, 04:51
Avatar de Profesor_Falken  
Fecha de Ingreso: agosto-2014
Ubicación: Mountain View
Mensajes: 1.323
Antigüedad: 9 años, 8 meses
Puntos: 182
Respuesta: Llamar metodos en JSF

Buenas,

Cuando desde la página haces Usuario.decirEdad como value del outputText, por detrás está utilizando Java reflection para encontrar la propiedad o accesor al dato expuesto por el bean. Para ello buscar los metodos que empiezan por get, is, etc o si Usuario es un mapa busca la propiedad en éste.

Por lo tanto, si quieres que el método sea accesible, lo más fácil es que lo llames, por ejemplo getDecirEdad y luego desde la página hagas Pagina.decirEdad.

Para más detalle echale un vistazo a este post sobre una consulta similar a la tuya:
http://www.coderanch.com/t/573634/JS...ean-method-JSF

Concretamente a este parrafo:
Cita:
The "value" attribute that appears on most of the JSF HTML data controls is NOT a method "call". It is a reference[/b] to a backing bean [i]property. A data value, not a function. According the the JavaBean convention, that means that there should be public "get" and "set" accessor methods defined in the backing bean ("set" is optional when you're using a display-only control such as outputText).
Un saludo
__________________
If to err is human, then programmers are the most human of us
  #5 (permalink)  
Antiguo 13/07/2015, 16:56
 
Fecha de Ingreso: mayo-2013
Ubicación: bogota
Mensajes: 157
Antigüedad: 11 años
Puntos: 2
Respuesta: Llamar metodos en JSF

Compañeros muchas, muchas, muchas gracias, les agradezco mucho por su aporte.

Profesor_Falken su aporte me sirvio mucho.
problema resuelto.

Etiquetas: netbeans
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 15:11.