2013-12-09 32 views
0

我正在使用Hibernate + JSF + PrimeFaces。現在我想更新管理員的密碼,但我總是得到錯誤對話框。我無法弄清楚我的代碼有什麼問題。希望有人建議我。使用Hibernate無法更新密碼

loginBean(SessionScoped)

public class loginBean { 

    private Users username; 
    private UsersDao userdao; 

    /** Creates a new instance of loginBean */ 
    public loginBean() { 
     userdao = new UsersDao(); 
     username = new Users(); 
    } 

    public Users getUsername() { 
     return username; 
    } 

    public void setUsername(Users username) { 
     this.username = username; 
    } 

    public void updateUser(){ 
     String msg; 
     if(userdao.updateUser(username)){ 
      msg = "Updated Successfully!"; 
     }else{ 
      msg = "Error. Please check again!"; 
     } 
     FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_INFO, msg, null); 
     FacesContext.getCurrentInstance().addMessage(msg, message); 
    } 
} 

UserDAO.java

public class UsersDao { 
    public boolean updateUser(Users user){ 
     boolean flag; 
     Session session = HibernateUtil.getSessionFactory().getCurrentSession(); 
     try{ 
      session.beginTransaction(); 
      session.save(user); 
      session.beginTransaction().commit(); 
      flag = true; 
     }catch(Exception e){ 
      flag = false; 
      session.beginTransaction().rollback(); 
     } 
     return flag; 
    } 
} 

XHTML

<p:growl id="growl" showDetail="true" life="3000" /> 
<h:form id="tab"> 
     <h:outputLabel>Password</h:outputLabel> 
     <h:inputSecret value="#{loginBean.username.password}" /> 
     <p:commandButton id="loginButton" value="Login" update=":growl" ajax="false" action="#{loginBean.updateUser}"/> 
</h:form> 
+0

你的日誌/控制檯說什麼? 「 –

+0

」錯誤,請再檢查一次!「。我正在使用if ... else ... –

+0

您的DAO的'updateUser'當然會拋出一個異常(之後被捕獲並被標記)。哪個例外?程序員級錯誤跟蹤在這裏很有用,而不是顯示給最終用戶的錯誤。 –

回答

1

你交流對Session執行save的操作,而不是update之一,這就是爲什麼你會遇到違反主鍵的例外情況。您告訴Hibernate添加一個具有相同憑據的新用戶,這受到數據庫的約束。

另外,與具體問題無關,您應該將Users類名更改爲User,因爲它指向具體用戶。

+0

哦,不,我應該用saveOrupdate,非常感謝你:) –

+0

不客氣;-) –

+0

用戶類名由Hibernate生成。我想如果改變,我可能會得到錯誤。 –