2

我创建了自己的 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

谢谢

4

0 回答 0