【问题标题】:Catch new value from InputText that have previous Data from DataBase JSF + PrimeFaces 3.5从具有数据库 JSF + PrimeFaces 3.5 先前数据的 InputText 中捕获新值
【发布时间】:2013-02-24 17:22:39
【问题描述】:

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

}

【问题讨论】:

    标签: jsf primefaces


    【解决方案1】:

    只需将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 代码以将其发送到您的&lt;p:commandButton&gt;:

    <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 而不是 Listar 和 modificar 而不是 Modificar。

    【讨论】:

    • Veo que eres de Peru, eso que me dices lo intente, pero como parametro de mi metodo Modificar no puedo recibr Usuario us y lineas mas abajo volver a instanciar otro Usuario con la mismo variable, me sale un错误定义 que ya existe variable "us" ... y otra pregunta podrias explicarme nuevamente de las capas logicas y porque no deberia usar el dato para manejar mis beans...gracias
    • @J.A. SO中的主要语言是英语,记住世界上其他人可以阅读Q/A和cmets。回到您的问题,您可以发送Usuario us 参数而不使用Usuario us 局部变量,检查我发布的Modificar 函数(我评论了Usuario us 并发布参数调用@ 987654339@为了保持与已经使用us的当前代码的兼容性),当然可以更改参数的名称,但这是Java基本编程。
    • @J.A.关于逻辑层的使用,请参考here 以获得更好的理解。
    • 是的,我明白了,我这样做了,我将“Usuario”参数传递给我的方法“modificar”,我评论了 FacesContext 和 Usuario 的行,该方法有效,它收到了参数但是这个是真正的问题....
    • 第一:我有名字:admin ---(inpuText 来自 DB 的默认值)密码:admin ---(inpuText 来自 DB 的默认值)确定按钮 ---(仅用于测试我的方法“modificar”,在这里我用我输入的新值调用该方法,并且只捕获旧值而不是我输入的新值)
    猜你喜欢
    • 2013-02-06
    • 1970-01-01
    • 1970-01-01
    • 2012-09-02
    • 2021-09-16
    • 1970-01-01
    • 1970-01-01
    • 2014-02-15
    • 1970-01-01
    相关资源
    最近更新 更多