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

时间:2018-09-21 06:08:17

标签: jsf xpages

对于表单,我为“编辑框”设置了验证器,例如:

<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。

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

2 个答案:

答案 0 :(得分:5)

大多数(全部?)标准XPages控件使用WAI-ARIA standard for validation,因此在控件无效时会自动将aria-invalid属性设置为“ true”。

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

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

答案 1 :(得分:1)

显式调用强制转换为setStyleClass的{​​{1}}的{​​{1}}方法

UIComponent

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

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

您可能想追加styleClass而不是replace

styleClass