JSF根据验证更正bean中值的正确方法

时间:2014-08-19 12:33:43

标签: validation jsf

我有一个与页面关联的bucking bean,我想根据验证失败还是成功来更改其值。

@ManagedBean(name = "testBean")
@ViewScoped()
public class TestBean implements Serializable {

String value="";
int number;

  /*getters-setters*/
}

验证号码是否为正的验证者

@FacesValidator("Validator")
public class NumValidator implements Validator{



    @Override
    public void validate(FacesContext context, UIComponent component,
            Object value) throws ValidatorException {

        int num=(Integer)value;
        if(num<0){
            FacesMessage msg = 
                new FacesMessage(The number is negative");
            msg.setSeverity(FacesMessage.SEVERITY_ERROR);
            throw new ValidatorException(msg);
           }


    }
}

和xhmtl页面:

<h:form>
<h:inputText id="number" value="#{testBean.number}" required="true"
                    requiredMessage="Is">
                    <f:validator validatorId="Validator" />
                    <f:ajax event="blur" render="msg" />
                </h:inputText>
                <h:message id="msg" for="number"/>
</h:form>

我希望bean中的String为value =&#34; negative&#34;或价值=&#34;积极&#34;是否偶然。怎么办呢?

1 个答案:

答案 0 :(得分:0)

您的具体功能要求似乎归结为:

  

如果<h:inputText>出现验证错误,我该如何更改它?

在这种情况下,只需检查EL中的UIInput#isValid()即可。当前的UI组件仅由implicit EL object #{component}提供。

<h:inputText ... styleClass="#{component.valid ? 'positive' : 'negative'}">
    <f:ajax ... render="@this msg" />
</h:inputText>

请注意,我已将@this添加到render,否则组件本身将不会更新。

您不应该使用特定于视图的属性(例如CSS类)来污染模型。你应该尽可能地让它们保持在视图方面。这将最终成为更“自然”的解决方案。