从InputText中捕获具有来自DataBase JSF + PrimeFaces 3.5的先前数据的新值

时间:2013-02-24 17:22:40

标签: jsf primefaces

问题是在我从DB获取之前的值并且覆盖它们之后cacth新值,我想在我的bean“变量”中保存新值并且还显示来自此组件中de DB的值,但是如果我放“Usuario.nombre”,它不显示数据库中的值,如果我输入“datos.nombres”它显示数据库中的值,请帮助

这是我的xhtml文件              

        <p:dataTable style="width:450px" value="#{DAOUsuario.Listar()}" var="datos">
            <p:column headerText="Datos Personales" style="background:#19708F ; color: white">
                <p:outputLabel value="Nombre"/>

                <h:inputText value="#{datos.nombre}"/>                                        
                <br/>
                <p:outputLabel value="Clave" />

                <h:inputText value="#{datos.clave}"/>                                        
                <br/>
                <h:commandButton value="Modificar" action="#{DAOUsuario.Modificar()}">                    
                </h:commandButton>                        
            </p:column> 

        </p:dataTable>

    </h:form>

</body>

这是我的Class,它有连接到DB的方法

public void Modificar() throws Exception {

    FacesContext context = FacesContext.getCurrentInstance();
    Usuario us = (Usuario) context.getApplication().evaluateExpressionGet(context, "#{Usuario}", Usuario.class);

    String sql = "UPDATE usuario SET nombre = '" + us.getNombre() + "', clave = '" + us.getClave() + "' "
            + "WHERE codigousuario = 2";

    try {
        this.Insert(sql);
    } catch (Exception ex) {
        throw ex;
    }
}

这是我的Bean Usuario:

public class Usuario {

    private int codigo;
    private String nombre;
    private String clave;

    public int getCodigo() {
        return codigo;
    }

    public void setCodigo(int codigo) {
        this.codigo = codigo;
    }

    public String getNombre() {
        return nombre;
    }

    public void setNombre(String nombre) {
        this.nombre = nombre;
    }

    public String getClave() {
        return clave;
    }

    public void setClave(String clave) {
        this.clave = clave;
    }

}

1 个答案:

答案 0 :(得分:0)

只需将Usuario对象作为参数发送到Modificar函数:

public void Modificar(Usuario us) throws Exception {
    //just to maintain compatibility with your current Usuario us local variable
    //FacesContext context = FacesContext.getCurrentInstance();
    //Usuario us = (Usuario) context.getApplication().evaluateExpressionGet(context, "#{Usuario}", Usuario.class);

    //code goes here...
}

修改JSF代码以将其发送到<p:commandButton>

<p:dataTable style="width:450px" value="#{DAOUsuario.Listar()}" var="datos">
    <p:column headerText="Datos Personales" style="background:#19708F ; color: white">
        <p:outputLabel value="Nombre"/>
        <h:inputText value="#{datos.nombre}"/>
        <br/>
        <p:outputLabel value="Clave" />
        <h:inputText value="#{datos.clave}"/>
        <br/>
        <h:commandButton value="Modificar" action="#{DAOUsuario.Modificar(datos)}" />
    </p:column> 
</p:dataTable>

在问题范围之外,作为建议,不要将您的DAO类用作托管bean,最好通过至少拥有这些逻辑层来利用应用程序中的耦合:

  • 控制器层(用于JSF / CDI托管bean)
  • 业务/服务层(业务逻辑在这里)
  • 数据访问层(此处为DAO类)

另一个建议:请遵循类和命名函数的JavaBeans命名约定,您可以快速查看here。例如,您的DAOUsuario函数应为listar,而不是Listarmodificar,而不是Modificar