我有以下输入字段:
<h:inputText value=".." validator="#{labController.validateValue}"/>
Run Code Online (Sandbox Code Playgroud)
如果该字段为空,将不会验证(validateValue在labController不调用).
但是使用单独的验证器类:
<h:inputText value=".." >
<f:validator validatorId="labDateValidator"/>
</h:inputText>
Run Code Online (Sandbox Code Playgroud)
那么validate即使输入空字段也可以调用它的方法?
这是我观察到的.这种行为是依赖于实现还是版本(我使用的是Mojarra 2.1)?
背景是我想使用我自己的方法/类来完成所有验证任务,包括必需的验证.它只适用于验证器类吗?
你在JSF中受到了疏忽.该validator包装在MethodExpressionValidator其中根据它的源validate()方法确实跳过验证当该值null.
if (value != null) {
try {
ELContext elContext = context.getELContext();
methodExpression.invoke(elContext, new Object[]{context, component, value});
...
Run Code Online (Sandbox Code Playgroud)
这不考虑javax.faces.VALIDATE_EMPTY_FIELDS默认的新JSF 2.0 上下文参数true.它实际上应该做同样的事情UIInput#validate().
if (!isEmpty(newValue) || validateEmptyFields(context)) {
try {
ELContext elContext = context.getELContext();
methodExpression.invoke(elContext, new Object[]{context, component, value});
...
Run Code Online (Sandbox Code Playgroud)
这已被报道为Mojarra问题1508.我已经投了票,并添加了一条新评论来唤醒他们.
| 归档时间: |
|
| 查看次数: |
2241 次 |
| 最近记录: |