Exception thrown after overriding update on EntityHome class
reyjexter.reyjexter.gmail.com Feb 28, 2008 6:01 PMexception thrown after overriding update method of EntityHome. I'm using a custom hibernate validator that checks if a username already exist on my database.
The entity class (only partial):
@Length(min=3, max=32, message="Username should be 3-32 characters") @NotNull @UsernameExist public String getUsername() { return username; } public void setUsername(String username) { this.username = username; }
The user home class:
@Override public String update() { // cant seem to use hibernate validator for a very complex validation rules such as this one User user = getInstance(); String oldPassword = user.getOldPassword(); String newPassword = user.getNewPassword(); String confirmNewPassword = user.getConfirmNewPassword(); if(oldPassword.length() != 0 || newPassword.length() != 0 || confirmNewPassword.length() != 0 ) { if(!user.getPassword().equals(oldPassword)) { getFacesMessages().add("Old password given not correct"); return null; } if(!newPassword.equals(confirmNewPassword)) { getFacesMessages().add("New password and confirmation password did not matched"); return null; } getInstance().setPassword(getInstance().getNewPassword()); } return super.update(); }
and finally, the username exist validator
public boolean isValid(Object value) { UserHome userHome = (UserHome) Component.getInstance("userHome"); System.out.println("RUNNING VALIDATOR..."); User user = userHome.findUser(value.toString()); // return true if no user with the given value was found if(user == null) { return true; } // return true if the user retrieved is equals to the current instance in home if(user.getId() == userHome.getInstance().getId()) { return true; } // return false if the username exist on our database return true; }
I noticed that the validator is called twice. I'm not sure but i think the part where i try to replace the value of the user home instance (in the user home class) causes entity be validated. see the line below:
getInstance().setPassword(getInstance().getNewPassword());
the exception btw looks like this:
2008-02-29 00:14:53,437 FATAL [javax.enterprise.resource.webcontainer.jsf.application] java.lang.reflect.InvocationTargetException javax.faces.el.EvaluationException: java.lang.reflect.InvocationTargetException at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:91) at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:91)