0

问题是在我从数据库中获取以前的值并覆盖它们之后获取新值,我想将新值保存在我的 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>

这是我的类,它具有连接到数据库的方法

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;
    }

}
4

1 回答 1

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 的类和函数命名约定,您可以在此处快速查看。例如,您的DAOUsuario函数应该是listar代替Listarmodificar代替Modificar.

于 2013-02-25T03:50:32.963 回答