如何将验证器方法传递给复合组件

时间:2013-08-20 22:43:44

标签: jsf-2 composite-component customvalidator

我创建了自己的inputText复合组件,它包装了Primefaces 3.4.5中的p:inputText。它运行良好,但我无法弄清楚如何将bean验证器方法传递给p:inputText中的validator属性。我已经读过在复合组件中使用f:validator标签,但我真的需要在p:inputText上使用validator属性。如果我从我的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

谢谢

0 个答案:

没有答案