2013-02-24 25 views
0

问题是在从数据库中取出先前的值并覆盖它们之后,重新绘制新值,我想将新值保存在我的beans“变量”中,然后也显示de DB在这个组件中的值,但是如果我把“Usuario.nombre”,它不显示来自DB的值,并且如果我把“datos.nombres”显示来自DB的值,请帮助从InputText中捕获具有以前数据的新值从DataBase JSF + PrimeFaces 3.5

这里是我的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; 
    } 
} 

,这里是我的豆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; 
    } 

} 

回答

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

+0

我们的秘鲁,我希望我们能够做到这一点,我们可以为您提供更好的服务,我们可以为您提供最优质的服务。 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 – MitoCode 2013-02-25 17:21:59

+0

@JA SO中的主要语言是英语,请记住世界上其他人可以阅读Q/A和评论。回到你的问题,你可以发送'Usuario us'参数,而不是使用'Usuario us'局部变量,检查我发布的'Modificar'函数(我评论过'Usuario us'并发布参数调用'us'以保持与已经使用'us'的当前代码的兼容性),当然,您可以更改参数的名称,但这是Java基本编程。 – 2013-02-25 17:30:08

+0

@ J.A。关于使用逻辑层,请参阅[这里](http://stackoverflow.com/a/13012973/1065197)以获得更好的理解。 – 2013-02-25 17:37:12

相关问题