1 validation methods jsf composite-component
JSF自定义复合组件input.xhtml
<cc:interface>
<cc:attribute name="validator"/>
</cc:interface>
<cc:implementation>
<h:inputText validator="#{cc.attrs.validator}"/>
</cc:implementation>
Run Code Online (Sandbox Code Playgroud)
*.xhtml
<l:input value = ... validator="#{testValidator.validator}"/>
Run Code Online (Sandbox Code Playgroud)
java代码
@ManagedBean
公共类TestValidator {
public void validator(FacesContext context, UIComponent component, Object value) throws ValidatorException {
System.out.println("Call validator");
}
}
Run Code Online (Sandbox Code Playgroud)
PropertyNotFoundException:
validator="#{testValidator.validator}": The class 'TestValidator' does not have the property 'validator'.
Run Code Online (Sandbox Code Playgroud)
如何解决这个问题呢?我最后的方式:
这确实无法奏效.为了验证器附连到由所述复合所指定的输入部件,则需要输入组件注册为 <cc:editableValueHolder>在<cc:interface>第一.
<cc:interface>
<cc:editableValueHolder name="yourInputName" targets="yourInputId" />
</cc:interface>
<cc:implementation>
<h:inputText id="yourInputId" ... />
</cc:implementation>
Run Code Online (Sandbox Code Playgroud)
这样,<f:validator for="yourInputName">复合组件声明中嵌套的任何内容都将应用于所需的输入组件.
<l:input>
<f:validator validatorId="myValidator" for="yourInputName" />
</l:input>
Run Code Online (Sandbox Code Playgroud)
您只需要通过真正的独立Validator实现替换紧耦合验证器方法.
@FacesValidator("myValidator")
public class MyValidator implements Validator {
// ...
}
Run Code Online (Sandbox Code Playgroud)
注意:标准JSF验证器(如<f:validateLength>,<f:validateRequired>等)也都具有for用于此目的的属性.
| 归档时间: |
|
| 查看次数: |
3956 次 |
| 最近记录: |