1

JSFとマネージドBeanを使用する簡単なアプリケーションを作成しました。マネージドBeanから、データベースにデータを格納するSpringBeanをインスタンス化しようとしています。ただし、nullPointerExcpetionを取得したため、「@Autowired」アノテーションが機能しないようです。SpringでJSFとマネージドBeanを使用する方法に関連するすべてのトピックを読みましたが、問題を解決できませんでした。誰かが次のコードを見てヒントを教えてくれるかもしれません。

########## ManagedBean #########

    @成分
    @Scope( "request")
    @Qualifier( "memberBean")
    パブリッククラスProjectEntityHandlerBean
    {{

      プライベートリストprojectList;

      @Autowired
      プライベートProjectBeanLocalprojectBean;

    public ProjectEntityHandlerBean()
    {{

    }

    public List getProjectList(){  
        projectListを返します。  
    }


        public String getAllProjects()
        {{       
            projectList = projectBean.getAllProjects();
            「true」を返します。      
        }

サービスビーン

    @サービス
    パブリッククラスProjectBeanはProjectBeanLocalを実装します{

          @PersistenceContext
          プライベートEntityManagerem;

        / **
         *デフォルトのコンストラクタ。
         * /

        public ProjectBean(){
            //TODO自動生成されたコンストラクタスタブ
        }

        @Transactional
        パブリックリストgetAllProjects()

        {{   
            System.out.println( "ProjectBeanが呼び出されました");

            クエリquery=em.createQuery( "SELECT p FROM Project p");

            @SuppressWarnings( "unchecked")




        プロジェクトの一覧表示=query.getResultList();                 
            プロジェクトを返す。
        }

faces.config.xml

 <application>
     <el-resolver>org.springframework.web.jsf.el.SpringBeanFacesELResolver</el-resolver>
    </application>

    <managed-bean>
        <managed-bean-name>loginBean</managed-bean-name>
        <managed-bean-class>com.example.controller.LoginBean</managed-bean-class>
        <managed-bean-scope>session</managed-bean-scope>
    </managed-bean>

    <managed-bean>
        <managed-bean-name>ProjectEntityHandlerBean</managed-bean-name>
        <managed-bean-class>com.example.controller.ProjectEntityHandlerBean</managed-bean-class>
        <managed-bean-scope>request</managed-bean-scope>
    </managed-bean>
4

2 に答える 2

1

@component構成がSpringのアナウンスであることがわかる場合。そして、あなたはで主張ProjectEntityHandlerBeanしていfaces-config.xmlます。したがって、まず、ProjectEntityHandlerBeanJSFManagedBeanとしてインスタンス化されます。

したがって、このようにJSFマネージドBeanにサービスクラスを注入する@ManagedPropertyか、注入する必要があります。この特定のケースでは、このように注入するようにBeanを定義しました。<managed-property>faces-config.xml

<managed-bean>
  <managed-bean-name>ProjectEntityHandlerBean</managed-bean-name>
  <managed-bean-class>com.example.controller.ProjectEntityHandlerBean</managed-bean-class>
  <managed-bean-scope>request</managed-bean-scope>
  <managed-property>
   <property-name>ProjectBeanLocal</property-name>
   <property-class>Qualified path for this class</property-class>
   <value>#{projectBeanLocal}</value>
  </managed-property>
 </managed-bean>

上記から削除@AutowiredしますProjectEntityHandlerBean

Important :注釈を使用して注入できるのは、1つのSpringBeanと別の@AutowiredSpringBeanのみです。SpringBeanをJSFManagedBeanに注入する場合または1つのJSFManagedBeanを別のJSFManagedBeanに注入する場合は、JSF2.0以降の@ManagedPropertyバージョンまたは<managed-propety>jsf1.2バージョンを使用している場合に使用します。 。

于 2012-11-20T18:59:32.600 に答える
0

Srinivas、あなたの助けのためのthnx。それはうまくいきました!!!

だから私がしたことは:私はとを削除しまし@Autowire

私はあなたが提案したようにfaces-config.xmlを変更しましたが、わずかな違いは次のとおりです。

<property-name>projectBean</property-name>
<property-class>Qualified path for this class</property-class>
<value>#{projectBean}</value>

私はJSF2.0を使用していることに言及する必要があります。私はを使用しましたが<managed-property>、@ManagedPropertyはどこにも使用しませんでした。それでも問題なく動作します。気になることですか?JSF2.0以降では@ManagedPropertyを使うとおっしゃっていたので

PS:「asnwer」として投稿して申し訳ありませんが、元の質問を更新する方法を見つけることができませんでした。

于 2012-11-21T09:32:48.063 に答える