使用PrimeFaces验证</p:inputtext>突出显示<p:inputtext>

时间:2014-05-14 15:46:41

标签: java spring jsf primefaces

我试图根据某些条件强调<p:inputText>,但最终我什么也没得到。 这是我的xhtml代码:

<p:inputText value="#{loginTo.userName}" id="username" required="true" label="username" maxlength="20"  requiredMessage="#{appLoginParameter['AppLoginNameRequiredMsg']}">
</p:inputText>

这是我的Java代码:

ResourceBundle appLoginBundle = ResourceBundle.getBundle("app/AppLogin");
        FacesContext facesContext = FacesContext.getCurrentInstance();
        UIComponent uiComponent = UIComponent.getCurrentComponent(facesContext);
        String message = "";
        try{
            message = appLoginBundle.getString(userLoginDetailTO.getLoginRemarks());
        }catch(Exception exp){
            message =appLoginBundle.getString("UnknownException");
        }
        FacesMessage facesMessage = new FacesMessage(message);
        facesMessage.setSeverity(FacesMessage.SEVERITY_ERROR);
        facesContext.addMessage("", facesMessage);
        UIInput username= (UIInput) uiComponent.getAttributes().get("username");
        username.setValid(false);

但我得到Null Pointer Exception。

1 个答案:

答案 0 :(得分:0)

试试这个:

public UIComponent findComponent(final String id){
    FacesContext context = FacesContext.getCurrentInstance(); 
    UIViewRoot root = context.getViewRoot();
    final UIComponent[] found = new UIComponent[1];
    root.visitTree(new FullVisitContext(context), new VisitCallback() {     
        @Override
        public VisitResult visit(VisitContext context, UIComponent component) {
            if(component.getId().equals(id)){
                found[0] = component;
                return VisitResult.COMPLETE;
            }
            return VisitResult.ACCEPT;              
        }
    });
    return found[0];

}

此代码将仅找到树中带有您传递的ID的第一个组件。如果树中有2个具有相同名称的组件,则必须执行自定义操作(如果它们位于2个不同的命名容器下,则可以这样做),或者您也可以在表单中设置prependId="false"