使用JSF Validators查询数据库

时间:2013-04-03 17:12:09

标签: java jsf

我正在使用JSF,而我正在构建一个注册网页。我正在尝试使用验证器来检查用户选择的用户名是否已存在。但我没有找到如何查询数据库来检查用户名。我尝试过使用EJB注入,但它没有工作,我有一个空指针异常。

@FacesValidator("usernameUnicityValidator")
public class UsernameUnicityValidator implements Validator {
    @EJB
    private ArticleFacadeLocal articleFacade;

    @Override
    public void validate(FacesContext context, UIComponent component, Object value) throws ValidatorException {
        if (value==null) {
            FacesMessage message = new FacesMessage("The username cannot be empty");
            message.setSeverity(FacesMessage.SEVERITY_FATAL);
            throw new ValidatorException(message);
        }
        if (userFacade.findByUsername((String)value)) {
            FacesMessage message = new FacesMessage("Username already exist");
            throw new ValidatorException(message);
       }
    }
}

1 个答案:

答案 0 :(得分:0)

在Faces 2.2 / 2.3问世之后,不会支持@EJB注入。见http://arjan-tijms.omnifaces.org/p/jsf-22.html

对于JSF2.0 / 2.1,目前还没有一个很好的选择。通常对于这种情况,我所做的是在我的页面的支持bean中进行这种“验证”,然后使用FacesContext.validationFailed()并将通知推回到FacesContext.addMessage(...)的页面。它不是一个理想的解决方案,因为您将表示逻辑与业务逻辑混合在一起。