0

私は以下のクラスを持っています。seam @Outアノテーションが機能するときは?

package org.domain.emlakprojesi.session; 

import java.util.List; 
import javax.persistence.EntityManager; 
import org.domain.emlakprojesi.entity.ziyaretci; 
import org.jboss.seam.ScopeType; 
import org.jboss.seam.annotations.In; 
import org.jboss.seam.annotations.Logger; 
import org.jboss.seam.annotations.Name; 
import org.jboss.seam.annotations.Out; 
import org.jboss.seam.log.Log; 
import org.jboss.seam.security.Credentials; 
import org.jboss.seam.security.Identity; 

@Name("authenticator") 
public class Authenticator 
{ 
    @Logger private Log log; 

    @In Identity identity; 
    @In Credentials credentials; 
    @In EntityManager entityManager; 
    @Out(scope =ScopeType.SESSION,required=false) ziyaretci girisYapanZiyaretci; 


    public boolean authenticate() 
    { 
     log.info("authenticating {0}", credentials.getUsername()); 

     List<ziyaretci> ziyaretciler =entityManager.createQuery("from Ziyaretci where email = #{credentials.username} and sifre = #{credentials.password}").getResultList(); 

     if(ziyaretciler.size() == 1){ 
      this.setGirisyapanziyaretci(ziyaretciler.get(0)); 
      return true; 
     }else 
      return false; 
    } 

    public void setGirisyapanziyaretci(ziyaretci girisyapanziyaretci) { 
     this.girisYapanZiyaretci= girisyapanziyaretci; 
    } 

    public ziyaretci getGirisyapanziyaretci() { 
     return girisYapanZiyaretci; 
    } 

} 

私は、nullポインタ例外に

を取得していたアプリケーションを実行すると、私は@Inおよび@Out注釈が動作したときに、私は実際に尋ねるauthenticateメソッド

でgirisYapanZiyaretciを設定するのですか?

答えて

2

@Inの注入と、の注入@Outの注入が、メソッド呼び出し前後で動作します。

すべて@Inプロパティがメソッドが呼び出される前に注入され、メソッドが例外を発生させない限り、すべての@Outプロパティが呼び出し後に定義されたコンテキストに設定されます。

セッションスコープはイベントスコープよりも広いので、セッションスコープBeanがイベントスコープBeanに挿入された場合、イベントスコープ(およびイベントスコープBean)はセッションスコープBeanの前に破棄されます。

逆に、イベントスコープのBeanをセッションスコープのBean(またはその他のより広いスコープコンテキスト)に注入すると、メソッド呼び出しの前に値が注入され、メソッド呼び出し後に値がnullに設定されます。

注入およびJSFフェーズでは、更新モデルの値がフェーズの後で、呼び出しフェーズの内部で注入されます。しかし、@Filter@Converterはこのルールを破ります。

+0

は大丈夫どうもありがとうございましたし、私も少し疑問を持っている:私は、注入されたフィールドは、(イベントまたはセッションの終わりの終わり) – daemonThread

+0

破壊されたときにBeanをscobedイベントでセッションscobeを持つコンポーネントを注入した場合に何が起こりますか何もバインドしていない場合、値バインディングのためにBeanを使用すると、updateModalValuesフェーズの前に動作しますか? – daemonThread

+0

レスポンスにいくつかの説明が追加されました –

0

@In注釈がツリーパラメータを取得します:value, createrequired Seam documantationでは例エン簡単な説明があります。

各コンポーネント呼び出しの開始時に JSF EL式を評価することによってコンポーネント属性を注入することを指定します。

- コンテキスト変数の名前を指定します。デフォルトでは、コンポーネント属性の名前は です。または、#{...}で囲まれたJSF EL 式を指定します。

を作成 - コンテキスト変数がすべてのコンテキストで (ヌル)に定義されていない場合、Seamがコンテキスト変数として 同じ名前でコンポーネントをインスタンス化することを指定。デフォルトはfalseです。

が必要です - コンテキスト の変数がすべてのコンテキストで定義されていない場合、Seamは例外をスローするよう指定します。

createパラメータがnullの場合はContext Variableを作成します。これは問題の解決に役立ちます。

@In(create = true) 
関連する問題