0

問題は、DB から以前の値を取得して上書きした後に新しい値を取得することです。新しい値を Bean の「変数」に保存し、DB からの値をこのコンポーネントに表示したいのですが、「Usuario. nombre"、DB からの値が表示されません。"datos.nombres" を入力すると、DB からの値が表示されます。助けてください

ここに私の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>

これが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;
    }

}
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の代わりにListar、のmodificar代わりに使用する必要がありModificarます。

于 2013-02-25T03:50:32.963 に答える