【问题标题】:How to edit database table in JSF如何在 JSF 中编辑数据库表
【发布时间】:2011-08-23 02:00:19
【问题描述】:

我有一个具有 id、firstName、lastName 属性的 bean 类,该属性具有公共 getter 和 setter,以及一个 updateEmployee 方法。

我正在使用以下 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();
      }
    }

【问题讨论】:

  • 你的 catch / finally 块看起来很奇怪。我希望这不是生产代码。知道您的 Web 应用程序在System.exit(1) 发生了什么会很有趣……服务器会退出吗? ;-) ..... 刚刚测试:是的,服务器宕机了。
  • 这是一个 DB/JDBC 问题。请将 JSF 逻辑与数据访问逻辑分离。使用 main() 方法创建一个独立的 Java 程序,您可以在其中执行纯 JDBC 任务并将其作为问题代码 sn-p 提供。

标签: jsf jdbc datatable jsf-2


【解决方案1】:

如果您的支持 bean 中有相应的属性,您的值将自动绑定。

您必须提交数据才能更新 bean 值。在您的表单中添加一个 commandButton 或 commandLink,如下所示:

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

【讨论】:

  • @Handy:感谢回复,我已经编辑了问题,请再次检查。
  • 我强烈建议开始使用调试器。在updateEmployee 方法的第一行设置断点,然后逐步进行。在每一步之后检查所有变量的状态。您的代码中有一些可疑部分,例如您的表单包含一个输入字段 id,并且您的查询已将 id 设置为“1”。
【解决方案2】:

您在查询中只有两个参数占位符,但您稍后会引用第二个和第三个参数:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-10
    • 1970-01-01
    • 1970-01-01
    • 2012-10-17
    • 1970-01-01
    • 2023-03-22
    相关资源
    最近更新 更多