有什么方法可以验证一个只读的jsf输入文本,但是在触发其他一些事件时值会改变吗?
答案 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生命周期模型。
您会注意到Process Validations阶段发生在通常处理事件的Invoke Application阶段之前。这种情况很好地发生,因此验证不会自动发生。