我创建了自己的 inputText 复合组件,它包装了 Primefaces 3.4.5 中的 p:inputText。它运行良好,但我不知道如何将 bean 验证器方法传递给 p:inputText 中的验证器属性。我已经阅读了有关在复合组件中使用 f:validator 标记的信息,但我确实需要在 p:inputText 上使用验证器属性。如果我从 xhtml 中删除复合组件并仅使用常规 p:inputText,则该方法和验证代码可以正常工作。
我的 cc 属性是:
<composite:attribute name="validator" method-signature="void f(javax.faces.context.FacesContext,
javax.faces.component.UIComponent,
java.lang.Object)" targets="inputTextField"/>
我在复合组件中的 inputText 是:
<p:inputText id="inputTextField"
... other attributes ...
validator="#{cc.attrs.validator}" />
当我使用此复合组件并将验证器方法传递给它时,我收到一条未找到属性的消息...
Exception type: class javax.el.PropertyNotFoundException
Exception message: /view/configuration/dictionaryupdate/DictionaryItem.xhtml @27,123 validator="#{dictionaryUpdateController.validateCode}": The class 'com.ntst.caremanager.feature.dictionaryupdate.controllers.DictionaryUpdateController' does not have the property 'validateCode'.
但是,我确实在视图范围的控制器 bean 中定义了该方法:
public void validateCode(FacesContext context, UIComponent component, Object value) throws ValidatorException {
... code ....
}
有谁知道我错过了什么?
我正在使用 Mojarra 2.1.21
谢谢