Ayuda, duda de novato en JavaServer Faces

Publicado en 'Programación' por theluigy13etv, 16 Ago 2015.





  1. theluigy13etv

    theluigy13etv Miembro frecuente

    Registro:
    11 Nov 2014
    Mensajes:
    62
    Likes:
    3




    Verán que he creado una página JSF llamada registro.xhtml en donde tengo un formulario en el que ingreso los datos de una persona y las registro en un arrayList de mi ManagedBean y debajo del formulario una tabla donde voy mostrando la lista de las personas que han sido registradas.

    Tengo dos ManagedBean, uno llamado Usuario.java y otro ListaUsuarios.java

    Usuario.java
    Código fuente: http://pastebin.com/TGGEHJ3U

    package ManagedBean;

    import javax.faces.bean.ManagedBean;
    import javax.faces.bean.RequestScoped;

    @ManagedBean
    @RequestScoped
    public class Usuario {
    private static int contador = 0;
    private int id;
    private String username;
    private String password;
    private String nombres;
    private String apellidoMaterno;
    private String apellidoPaterno;
    private int edad;
    private String sexo;
    private String ciudad;

    public Usuario() {
    this.setId(contador++);
    }

    public int getId() {
    return id;
    }

    public void setId(int id) {
    this.id = id;
    }

    public String getUsername() {
    return username;
    }

    public void setUsername(String username) {
    this.username = username;
    }

    public String getPassword() {
    return password;
    }

    public void setPassword(String password) {
    this.password = password;
    }

    public String getNombres() {
    return nombres;
    }

    public void setNombres(String nombres) {
    this.nombres = nombres;
    }

    public String getApellidoMaterno() {
    return apellidoMaterno;
    }

    public void setApellidoMaterno(String apellidoMaterno) {
    this.apellidoMaterno = apellidoMaterno;
    }

    public String getApellidoPaterno() {
    return apellidoPaterno;
    }

    public void setApellidoPaterno(String apellidoPaterno) {
    this.apellidoPaterno = apellidoPaterno;
    }

    public int getEdad() {
    return edad;
    }

    public void setEdad(int edad) {
    this.edad = edad;
    }

    public String getSexo() {
    return sexo;
    }

    public void setSexo(String sexo) {
    this.sexo = sexo;
    }

    public String getCiudad() {
    return ciudad;
    }

    public void setCiudad(String ciudad) {
    this.ciudad = ciudad;
    }

    @Override
    public int hashCode() {
    int hash = 5;
    hash = 47 * hash + this.id;
    return hash;
    }

    @Override
    public boolean equals(Object obj) {
    if (obj == null) {
    return false;
    }
    if (getClass() != obj.getClass()) {
    return false;
    }
    final Usuario other = (Usuario) obj;
    if (this.id != other.id) {
    return false;
    }
    return true;
    }
    }


    ListaUsuarios.java
    Código fuente: http://pastebin.com/wt6bGSUN

    package ManagedBean;

    import java.util.ArrayList;
    import java.util.List;
    import javax.faces.bean.ManagedBean;
    import javax.faces.bean.SessionScoped;

    @ManagedBean
    @SessionScoped
    public class ListaUsuarios {

    private List<Usuario> usuarios;
    private List<String> ciudades;

    public ListaUsuarios() {
    usuarios = new ArrayList<>();

    ciudades = new ArrayList<>();
    ciudades.add("Lima");
    ciudades.add("Arequipa");
    ciudades.add("Cusco");
    ciudades.add("Tacna");
    ciudades.add("Tumbes");
    ciudades.add("Madre de Dios");
    }

    public List<Usuario> getUsuarios() {
    return usuarios;
    }

    public void setUsuarios(List<Usuario> usuarios) {
    this.usuarios = usuarios;
    }

    public void agregaUsuario(Usuario usuario) {
    usuarios.add(usuario);
    }

    public void eliminaUsuario(Usuario usuario) {
    usuarios.remove(usuario);
    }

    public List<String> getCiudades() {
    return ciudades;
    }

    public void setCiudades(List<String> ciudades) {
    this.ciudades = ciudades;
    }
    }

    El problema lo tengo en mi página JSF llamada registro.xhtml en donde si lo hago de esta manera no tengo ningún problema, los datos se van guardando y apareciendo correctamente en la pantalla:
    Código fuente: http://pastebin.com/8ewH7bDz

    <?xml version='1.0' encoding='UTF-8' ?>
    <!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://xmlns.jcp.org/jsf/html"
    xmlns:f="http://xmlns.jcp.org/jsf/core">
    <h:head>
    <title>Data Table</title>
    </h:head>
    <h:body>
    <h:form>
    <h:panelGrid columns="2">
    <h:outputLabel for="txtValor" value="Valor:"/>
    <h:inputText id="txtValor" value="#{dato.valor}" label="Valor" required="true"/>

    <h:outputLabel for="txtNombre" value="Nombre:"/>
    <h:inputText id="txtNombre" value="#{dato.nombre}" label="Nombre" required="true"></h:inputText>

    <h:outputLabel for="btnAgregar"/>
    <h:commandButton id="btnAgregar" action="#{holaMundo.addValor(dato)}" value="Añadir"/>
    </h:panelGrid>
    </h:form>
    <h:dataTable id="tabla" value="#{holaMundo.datos}" var="dato">
    <h:column>
    <f:facet name="header">
    <h:outputText value="valor"/>
    </f:facet>
    <h:outputText value="#{dato.valor}"/>
    </h:column>
    <h:column>
    <f:facet name="header">
    <h:outputText value="Nombre"/>
    </f:facet>
    <h:outputText value="#{dato.nombre}"/>
    </h:column>
    <h:column>
    <h:form>
    <h:commandButton id="btnBorrar" value="Borrar" action="#{holaMundo.removeValor(dato)}"/>
    </h:form>
    </h:column>
    </h:dataTable>
    <br/>


    </h:body>
    </html>

    [​IMG]

    Como se ve en el código de la página registro.xhtml primero hay un dataTable y segundo un formulario, pero si es que ahora cambio el orden de ambos controles, y primero pongo el formulario y luego el dataTable, el programa no funciona de forma correcta.

    Si cambio a esto:

    Código fuente: http://pastebin.com/2ScMc0FJ

    <?xml version='1.0' encoding='UTF-8' ?>
    <!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://xmlns.jcp.org/jsf/html"
    xmlns:f="http://xmlns.jcp.org/jsf/core">
    <h:head>
    <title>Data Table</title>
    </h:head>
    <h:body>
    <h:dataTable id="tabla" value="#{holaMundo.datos}" var="dato">
    <h:column>
    <f:facet name="header">
    <h:outputText value="valor"/>
    </f:facet>
    <h:outputText value="#{dato.valor}"/>
    </h:column>
    <h:column>
    <f:facet name="header">
    <h:outputText value="Nombre"/>
    </f:facet>
    <h:outputText value="#{dato.nombre}"/>
    </h:column>
    <h:column>
    <h:form>
    <h:commandButton id="btnBorrar" value="Borrar" action="#{holaMundo.removeValor(dato)}"/>
    </h:form>
    </h:column>
    </h:dataTable>
    <br/>

    <h:form>
    <h:panelGrid columns="2">
    <h:outputLabel for="txtValor" value="Valor:"/>
    <h:inputText id="txtValor" value="#{dato.valor}" label="Valor" required="true"/>

    <h:outputLabel for="txtNombre" value="Nombre:"/>
    <h:inputText id="txtNombre" value="#{dato.nombre}" label="Nombre" required="true"></h:inputText>

    <h:outputLabel for="btnAgregar"/>
    <h:commandButton id="btnAgregar" action="#{holaMundo.addValor(dato)}" value="Añadir"/>
    </h:panelGrid>
    </h:form>
    </h:body>
    </html>

    [​IMG]

    Se registran los usuarios pero sus datos están vacíos. No entiendo por qué de esta segunda forma no funciona. Además creo que el programa se vería mejor de la segunda forma pero así no me funciona como yo quisiera o.O.
     
    Última edición: 16 Ago 2015


  2. jreyes1985

    jreyes1985 Miembro diamante

    Registro:
    9 Ago 2013
    Mensajes:
    13,017
    Likes:
    2,146
    post repetido
     
  3. gnox

    gnox Miembro maestro

    Registro:
    3 Ene 2013
    Mensajes:
    794
    Likes:
    252
    Tu código no tiene nada que ver con las imágenes que pones, dato.valor, holaMundo que beans haces referencia? , si pones algo mas cercano a lo que mencionas quizás se te pueda ayudar.
     
    A debugger le gustó este mensaje.
  4. debugger

    debugger Miembro nuevo

    Registro:
    13 Jun 2014
    Mensajes:
    38
    Likes:
    6
    Seria bueno que usaras un repositorio de code fuente, asi como lo veo me da opinar.
    JSF no es tan complicado, el showCase te da una gran ayuda.
     
  5. dajoh

    dajoh Miembro frecuente

    Registro:
    2 Abr 2013
    Mensajes:
    98
    Likes:
    19