可以从验证器类设置 xp:control 的样式类吗?



对于表单,我已经为编辑框设置了一个验证器,例如:

<xp:inputText
id="inpRiskFactors" 
styleClass="inputEscalation"
value="#{matterBean.matter.escRiskFactors}" 
validator="#{matterValidators.valEscRiskFactors}"...

这是我的验证方法的一个片段:

public void valEscRiskFactors(FacesContext facesContext, UIComponent component, Object value) {        
utils.printToConsole(this.getClass().getSimpleName().toString() + " - valEscRiskFactors(...), value = " + value.toString());
String msg = null;
if (value.toString().replaceAll("\s+","").equals("")){
msg = matterProp.getProperty("msg_valid_esc_risk_factors");
FacesMessage message = new FacesMessage(msg);
throw new ValidatorException(message);
}       
}

我想知道我是否可以从此方法更改/设置调用组件(UIComponent 组件(的 styleclass 属性?

对于用户来说,最好在xp:controls上应用一些CSS,这些CSS是必需的,但未通过验证。

有人知道如何实现这一目标吗?

大多数(所有?(标准 XPages 控件使用 WAI-ARIA 标准进行验证,因此在控件无效时自动将aria-invalid属性设置为"true"。

这意味着您可以使用 CSS 来设置输入控件的样式。例如,当控件无效时,您可以以不同的方式设置背景颜色和边框的样式:

[aria-invalid=true] {
background-color: #fee;
border-color: red;
} 

显式调用setStyleClassUIComponent投射到XspInputText的方法对我有用

((XspInputText)component).setStyleClass("my-class");

如果您不想强制转换,但希望将styleClass应用于支持此类属性的任何组件,Java 反射可以提供帮助:

try {
Method setStyleClass = component.getClass().getMethod("setStyleClass", String.class);
if (setStyleClass != null) {
setStyleClass.invoke(component, "my-class");
}
} catch (SecurityException e) {} 
catch (NoSuchMethodException e) {}
catch (IllegalArgumentException e) {}
catch (IllegalAccessException e) {}
catch (InvocationTargetException e) {}

您可能希望追加样式类而不是替换

try {
String styleClass = null;
Method getStyleClass = component.getClass().getMethod("getStyleClass");
if (getStyleClass != null) {
styleClass = (String)getStyleClass.invoke(component, (Object[])null);
}
Method setStyleClass = component.getClass().getMethod("setStyleClass", String.class);
if (setStyleClass != null) {
String newStyleClass = StringUtil.isNotEmpty(styleClass) ? styleClass.concat(" my-class") : "my-class";
setStyleClass.invoke(component, newStyleClass);
}
} catch (SecurityException e) {} 
catch (NoSuchMethodException e) {}
catch (IllegalArgumentException e) {}
catch (IllegalAccessException e) {}
catch (InvocationTargetException e) {}

相关内容

  • 没有找到相关文章

最新更新