我试图根据某些条件强调<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。
答案 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"
。