Когда шов @Out аннотация работает? - PullRequest
0 голосов
/ 08 февраля 2012

У меня есть класс ниже;

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 в методе аутентификации

, когда я запускаю приложение, я получаю исключение нулевого указателя

Iна самом деле спросить, когда аннотации @In и @Out работают?

Ответы [ 2 ]

2 голосов
/ 08 февраля 2012

Инъекция с @In и так называемая выдача с @Out работают до и после вызова метода.

Все свойства @In вводятся до вызова метода, и все свойства @Out устанавливаются в определенном контексте после вызова, если только метод не вызвал исключение.

Область сеанса шире, чем область события, поэтому, если bean-объекты области действия внедряются в bean-объект области действия, область события (и bean-объект области действия) уничтожается перед bean-объектом области действия.

Напротив, если bean-объект области действия вводится в bean-объект области действия (или в любом другом более широком контексте контекста), значение вводится до вызова метода и устанавливается на null после вызова метода.

Относительно этапов впрыска и JSF, впрыск происходит после фазы обновления значений модели и внутри фазы вызова приложения. @Filter и @Converter хотя и нарушают это правило.

0 голосов
/ 22 января 2016

@In аннотация получает параметры дерева: value, create и required В документации по шву есть краткое объяснение в примерах.

Указывает, что атрибут компонента должен быть введен путем оценки JSF EL выражение в начале каждого вызова компонента.

значение - указывает имя переменной контекста. По умолчанию имя атрибута компонента. В качестве альтернативы указывается JSF EL выражение, окруженное # {...}.

create - указывает, что Seam должен создать экземпляр компонента с то же имя, что и переменная контекста, если переменная контекста не определена (ноль) во всех контекстах. По умолчанию false.

обязательно - указывает, что Seam должен выдать исключение, если контекст переменная не определена во всех контекстах.

Может быть, create параметр, который создает Context Variable, если он нулевой, поможет вам в вашей проблеме.

@In(create = true)
...