【发布时间】:2014-01-11 12:18:27
【问题描述】:
我们正在从 JSF 1.2 迁移到 JSF2。 我们在验证中遇到问题。我们正在使用 apache myfaces 2 和 rich faces 4.3 下面是xhtml代码:
<h:form id="form">
<ui:include src="panel1.xhtml"/>
<h:commandButton id="btn1" value="Submit" action="#{bean.submit}"/>
</h:form>
panel1.xhtml 包含如下自定义组件:
<h:panelGrid columns="2">
<h:outputText value="Enter Phone"/>
<h:inputText id="compId" value="#{map['Phone']}" size="12" maxlength="20" required="true"
validator="#{validator.validatePhone}"/>
<!-- other components omitted -->
</h:panelGrid>
public void validatePhone(FacesContext arg0, UIComponent arg1, Object obj)
throws ValidatorException {
String phoneVal = (String) obj;
if(phoneVal .length() <5){
//rest of the code is omitted
}
}
问题是,当没有输入电话值(保留为空)并提交表单时,以下是观察结果。
JSF 2: 使用 Object obj 值(在 validatePhone 方法中)调用 validator.validatePhone 为 null
JSF 1.2: required = "true" 属性首先生效,并且根本不调用 validator.validatePhone(如果 Phone 字段中没有值)和验证 显示错误。
问题是:
1) 为什么 JSF 2 调用 validator.validatePhone ,即使 Phone 字段中没有值? 2)为什么在上述情况下 JSF 1.2 和 JSF 2 的行为会发生变化?
【问题讨论】:
标签: jsf-2 validation jsf-1.2