亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何使用@EJB,@ PersistenceContext,@ Inject,@ Autowired

如何使用@EJB,@ PersistenceContext,@ Inject,@ Autowired

LEATH 2019-08-13 16:25:37
如何使用@EJB,@ PersistenceContext,@ Inject,@ Autowired注入@FacesValidator我怎么可以注入的依賴一樣@EJB,@PersistenceContext,@Inject,@AutoWired,等的@FacesValidator?在我的具體情況下,我需要通過以下方式注入Spring托管bean @AutoWired:@FacesValidator("emailExistValidator")public class EmailExistValidator implements Validator {     @Autowired     private UserDao userDao;     // ...}然而,它沒有被注射,它仍然存在null,導致java.lang.NullPointerException。看來@EJB,@PersistenceContext并且@Inject也不起作用。如何在驗證器中注入服務依賴項以便我可以訪問數據庫?
查看完整描述

1 回答

?
達令說

TA貢獻1821條經驗 獲得超6個贊

@FacesValidator不被注入容器管理。您需要將其設置為托管bean。使用Spring @Component,CDI @Named或JSF @ManagedBean而不是@FacesValidator為了使它成為托管bean,因此有資格進行依賴注入。

例如,假設您要使用JSF @ManagedBean

@ManagedBean@RequestScopedpublic class EmailExistValidator implements Validator {
    // ...}

您還需要#{name}在EL中將其作為托管bean引用,而不是在硬編碼字符串中作為驗證器ID 引用。因此,如此

<h:inputText ... validator="#{emailExistValidator.validate}" />

要么

<f:validator binding="#{emailExistValidator}" />

代替

<h:inputText ... validator="emailExistValidator" />

要么

<f:validator validatorId="emailExistValidator" />

這確實很尷尬。JSF人員證實了這種令人尷尬的疏忽,他們將在即將到來的JSF中成為@FacesValidator(和@FacesConverter)合格的注射目標2.22.3,另見JSF規范問題763。對于EJB,可以通過從JNDI手動獲取它來解決此問題,另請參閱在@FacesConverter和@FacesValidator中獲取@EJB。如果您碰巧使用CDI擴展MyFaces CODI,那么您也可以通過@Advanced在類上添加注釋來解決它


更新:如果您碰巧使用JSF實用程序庫OmniFaces,因為版本1.6增加了對使用@Inject@EJB@FacesValidator類中的透明支持,而無需任何其他配置或注釋。另請參閱CDI @FacesValidator展示示例。


查看完整回答
反對 回復 2019-08-13
  • 1 回答
  • 0 關注
  • 858 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號