2011-05-11 46 views
2

我有一个具有公共getter和setter的id,firstName,lastName属性的bean类以及一个updateEmployee方法。如何在JSF中编辑数据库表

我使用以下jsf页面来获取数据库表值。

当我点击更新按钮成功页面显示,但数据库中的值不变。任何人都可以告诉我为什么vales没有在数据库中进行更改的原因吗?

在此先感谢。

JSF页面:

<h:dataTable value="#{tableBean.employeeList}" var="employee" border="1"> 
    <h:column> 
      <f:facet name="header">First name</f:facet> 
      <h:inputText value="#{employee.firstName}" /> 
    </h:column> 

    <h:column> 
      <f:facet name="header">Last name</f:facet> 
      <h:inputText value="#{employee.lastName}" /> 
    </h:column> 
</h:dataTable> 
<h:commandButton value = "update" action="#{employee.updateEmployee}"/> 

Employee.java:

public String updateEmployee(){ 
    String query = "update employee set firstName = ?,lastName = ? where id = 1";   
    pstmt = conn.prepareStatement(query); 
    pstmt.setString(2,this.firstName); 
    pstmt.setString(3,this.lastName); 
    pstmt.executeUpdate(); // execute update statement 
    conn.commit(); 
    committed = true; 
    return "success.xhtml"; 
    }catch (Exception e) { 
     e.printStackTrace(); 
     return null; 
    } finally { 
     try{ 
     if (!committed) conn.rollback(); 
       pstmt.close(); 
      conn.close(); 
     }catch(Exception e){ 
      e.printStackTrace(); 
     } 
    } 
+1

你捕捉/ finally块长相很奇怪。我希望这不是生产代码。使用你的web应用程序知道'System.exit(1)'发生了什么会很有趣......服务器会退出吗? ;-) .....刚刚测试:是的,服务器停机。 – 2011-05-11 10:42:32

+0

这是一个DB/JDBC问题。请从数据访问逻辑中解耦JSF逻辑。使用'main()'方法创建一个独立的Java程序,您可以在其中执行纯JDBC任务,并将其作为问题代码片段提供。 – BalusC 2011-05-11 12:23:39

回答

1

,如果你有你的支持bean相应的属性你的价值观会自动绑定。

您必须提交数据才能更新bean值。在窗体中添加一个命令或commandLink这样的:

<h:form> 
<h:dataTable> ... </h:dataTable> 
<h:commandButton value="Submit" action="tableBean.actionMethod"> 
</h:form> 
+0

@Handy:谢谢你的回复,我编辑了这个问题,请再次检查。 – Adnan 2011-05-11 10:20:33

+1

我强烈建议开始使用调试器。在'updateEmployee'方法的第一行设置一个断点并逐步进行。在每一步之后检查所有变量的状态。您的代码中有一些可疑部分,例如您的表单包含一个输入字段ID,您的查询将id设置为“1”。 – 2011-05-11 10:31:10

1

您在查询只有两个参数占位符,但你指的第二和第三参数后:

pstmt.setString(2,this.firstName); 
pstmt.setString(3,this.lastName);