目前,我的代码用于更改存储在LDAP服务器上的密码。如果更新成功与否,我使用布尔变量来存储结果,之后我通过if
语句检查更新是否失败,并显示错误消息。
我面临的问题是,如果密码更改失败,如何在UI中显示更具体的错误?
例如:
如果有人可以提出建议,我的问题可能是一个很好和整洁的解决方案。以下是重置密码方法的片段:
boolean passwordReset = this.userManagement.update(this.username, this.resetPassword, this.resetOldPassword);
if(!passwordReset){
super.addMessage(FacesMessage.SEVERITY_ERROR,super.getResource("password.error"), super.getResource("user.password.change.error"));
} else {
super.addMessage(FacesMessage.SEVERITY_INFO,super.getResource("change.password.head"), super.getResource("password.changed.success"));
}
答案 0 :(得分:0)
我认为您应该修改userManagement.update
方法以在出现错误时引发异常。因此,根据错误,它可能会抛出InvalidPasswordException
,UsernameException
,BlockedAccoutException
等,或者仅使用自定义消息抛出异常。
在任何情况下,首先您需要从ldap操作中收集此信息。
示例代码:
try {
this.userManagement.update(this.username, this.resetPassword, this.resetOldPassword);
} catch(InvalidPasswordException e) {
super.addMessage(FacesMessage.SEVERITY_ERROR, super.getResource("password.error"), super.getResource("user.password.change.error"));
} catch(UsernameException e) {
super.addMessage(FacesMessage.SEVERITY_ERROR, super.getResource("username.error"), super.getResource("user.name.error"));
} catch(BlockedAccoutException e) {
super.addMessage(FacesMessage.SEVERITY_ERROR, super.getResource("blockaccount.error"), super.getResource(blockaccount.error"));
}
或者:
try {
this.userManagement.update(this.username, this.resetPassword, this.resetOldPassword);
} catch(UpdateUserException e) {
super.addMessage(FacesMessage.SEVERITY_ERROR, super.getResource(e.getErrorCode()));
}
第一种方法的问题是你必须创建几个(或很多)类。 第二个选项不会发生这种情况,但您需要一种方法来获取正确的错误消息。您可以向异常添加错误类型/代码。