jsf(richfaces)只读输入文本验证

时间:2012-03-08 08:26:07

标签: java validation jsf java-ee richfaces

有什么方法可以验证一个只读的jsf输入文本,但是在触发其他一些事件时值会改变吗?

4 个答案:

答案 0 :(得分:13)

仅在呈现响应阶段将readonly属性设置为true。这样,除了渲染响应阶段之外,它不会在所有其他阶段被视为只读。

<h:inputText ... readonly="#{facesContext.currentPhaseId.ordinal eq 6}" />

答案 1 :(得分:2)

回答评论:“在jsf页面支持bean中验证它不是更容易吗?” 您可以在按钮单击或类似事件上执行应用程序级验证。你可以在你的支持bean中做这样的事情并将它链接到事件。

public String login(){
        FacesContext context = FacesContext.getCurrentInstance();
        if(**<<some validation for value in field 'firstName' in form 'userForm'>>**){
            FacesMessage message = new FacesMessage();
            message.setSeverity(FacesMessage.SEVERITY_ERROR);
            message.setSummary("Some Valication check");
            message.setSummary("Some Valication check!!");
            context.addMessage("userForm:firstName", message);//adds validation message for field firstName in form userForm
            return "ERROR";
        }
        return "SUCCESS";
    }

希望这会有所帮助。

答案 2 :(得分:2)

我通过解决方法解决了这个问题。我添加了一个inputHidden字段,其中required属性true不会出现在界面上,但会经过验证:

<h:inputHidden value="#{bean.value}" required="true"
                    requiredMessage="Data must be entered" />

bean.value的值由其他事件更改,在inputHidden的某个reRender上,验证发生。

答案 3 :(得分:1)

您很可能必须直接从您的活动中手动调用验证逻辑。这是IBM的JSF生命周期模型。

enter image description here

您会注意到Process Validations阶段发生在通常处理事件的Invoke Application阶段之前。这种情况很好地发生,因此验证不会自动发生。