1 回答

TA貢獻(xiàn)1821條經(jīng)驗(yàn) 獲得超6個(gè)贊
在@FacesValidator
不被注入容器管理。您需要將其設(shè)置為托管bean。使用Spring @Component
,CDI @Named
或JSF @ManagedBean
而不是@FacesValidator
為了使它成為托管bean,因此有資格進(jìn)行依賴(lài)注入。
例如,假設(shè)您要使用JSF @ManagedBean
:
@ManagedBean@RequestScopedpublic class EmailExistValidator implements Validator { // ...}
您還需要#{name}
在EL中將其作為托管bean引用,而不是在硬編碼字符串中作為驗(yàn)證器ID 引用。因此,如此
<h:inputText ... validator="#{emailExistValidator.validate}" />
要么
<f:validator binding="#{emailExistValidator}" />
代替
<h:inputText ... validator="emailExistValidator" />
要么
<f:validator validatorId="emailExistValidator" />
這確實(shí)很尷尬。JSF人員證實(shí)了這種令人尷尬的疏忽,他們將在即將到來(lái)的JSF中成為@FacesValidator
(和@FacesConverter
)合格的注射目標(biāo)2.22.3,另見(jiàn)JSF規(guī)范問(wèn)題763。對(duì)于EJB,可以通過(guò)從JNDI手動(dòng)獲取它來(lái)解決此問(wèn)題,另請(qǐng)參閱在@FacesConverter和@FacesValidator中獲取@EJB。如果您碰巧使用CDI擴(kuò)展MyFaces CODI,那么您也可以通過(guò)@Advanced
在類(lèi)上添加注釋來(lái)解決它
更新:如果您碰巧使用JSF實(shí)用程序庫(kù)OmniFaces,因?yàn)榘姹?.6增加了對(duì)使用@Inject
和@EJB
在@FacesValidator
類(lèi)中的透明支持,而無(wú)需任何其他配置或注釋。另請(qǐng)參閱CDI @FacesValidator
展示示例。
添加回答
舉報(bào)