当@Out注释接缝有效时?

时间:2012-02-08 10:17:03

标签: jsf dependency-injection annotations inversion-of-control seam

我在下面开了一个课;

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;
    }

}

我在认证方法

中设置了girisYapanZiyaretci

当我运行应用程序时,我得到空指针异常

我实际上问@In和@Out注释何时起作用?

2 个答案:

答案 0 :(得分:2)

在方法调用之前和之后

使用@In注入以及所谓的 outjection 并使用@Out工作。

在调用方法之前注入所有@In属性,并且在调用之后在定义的上下文中设置所有@Out属性,除非该方法引发异常。

会话范围比事件范围更广,因此如果在事件范围的bean中注入会话范围bean,则事件范围(以及事件范围bean)将在会话范围bean之前销毁。

相反,如果在会话范围bean(或任何其他更广泛的范围上下文)中注入事件范围的bean,则在方法调用之前注入该值,并在方法调用之后将其设置为null

关于注入和JSF阶段,注入发生在更新模型值阶段之后和调用应用程序阶段之内。不过,@Filter@Converter违反了此规则。

答案 1 :(得分:0)

@In注释获取树参数:value, createrequiredSeam documantation中,有一些简短的解释。

  

指定通过评估a来注入组件属性   每个组件调用开始时的JSF EL表达式。

     

value - 指定上下文变量的名称。默认为   组件属性的名称。或者,指定JSF EL   表达式,由#{...}包围。

     

创建 - 指定Seam应使用实例化实例化组件   如果上下文变量未定义,则与上下文变量同名   (null)在所有上下文中。默认为false。

     

必需 - 指定Seam应该在上下文中抛出异常   变量在所有上下文中都是未定义的。

也许create参数,如果它为空,则创建Context Variable,可以帮助您解决问题。

@In(create = true)