Как я могу проверить, правильно ли хранится объект, сохраненный с помощью @WindowScoped? - PullRequest
1 голос
/ 20 января 2012

Два дня назад я написал этот вопрос: Как я могу получить объект в @WindowScoped? , и BalusC ответил с некоторыми предложениями, теперь у меня есть некоторая проблема, чтобы понять, если моя проблема в том, что объект в WindowScopedхранится правильно, или мой код для извлечения неверен!

Как я уже сказал, у меня есть объект, который я сохранил в аннотации @WindowScoped, но я могу извлечь этот объект только в первый раз!Почему?

У меня просто есть сомнение: расширение MyDaces для CODI может быть настроено каким-либо образом?Или я могу использовать это простым добавлением jar-файлов в мой проект?

Однако это части моего кода, потому что я не знаю, в чем проблема:

LogicBean.java (объект, который я должен извлечь):

@ManagedBean (name="logicBean" )
@WindowScoped
public class LogicBean implements Serializable 
{
    String pageIncluded;
    // getter and setter methods

    public String action(String value)
    {
        setPageIncluded(value);

        return "include";
    }
}

include.xhtml:

<ui:include src="#{logicBean.pageIncluded}"/> 

ProgettiController.java

@ManagedBean(name = "progettiController")
@SessionScoped
public class ProgettiController implements Serializable {

    private FacesContext context = FacesContext.getCurrentInstance();
    private LogicBean logicBean = context.getApplication().evaluateExpressionGet(context, "#{logicBean}", LogicBean.class);
    //getter and setter methods

    public void testMethod()
    {
        logicBean.action("WEB-INF/jsf/page1.xhtml");
    }
}

Я также пытался использовать @ManagedProperty ("#{logicBean} ") и установив область как WindowScoped, но ничего не изменилось ...


РЕДАКТИРОВАТЬ: после некоторых новых испытаний я обнаружил странную проблему, в моем include.xhtml я добавил # {progettiController.logicBean.getPageIncluded ()} и # {logicBean.getPageIncluded ()} для проверки этих двух полей o?

Хорошо, когда я загружаю приложение в первый раз, переменные установлены правильно, и я вижу то, что хочу,во второй раз первая переменная устанавливается с новым значением, но вторая пуста, и я ничего не вижу, но сейчас идет странная вещь ... если я попробую снова приложение, я должен открыть index.xhtml, где ябыли некоторые формы, подобные этой:

<h:form>
    <h:commandLink action="#{logicBean.action('/WEB-INF/jsf/progetti/List.xhtml')}" value="Show All Progetti Items"/>
</h:form>

и каков результат?Первая переменная остается со старым значением (неправильным), но вторая установлена ​​правильно, поэтому я могу просмотреть страницу, как я!Если кто-то может мне помочь, я буду благодарен ему / ей навсегда!

1 Ответ

1 голос
/ 20 января 2012

CODI является расширением CDI, поэтому вы должны управлять своими компонентами с помощью аннотации CDI @Named вместо аннотации JSF @ManagedBean. Затем вы можете добавить другой компонент с помощью аннотации CDI @Inject. Следующий пример должен работать:

import javax.inject.Named;
import org.apache.myfaces.extensions.cdi.core.api.scope.conversation.WindowScoped;

@Named
@WindowScoped
public class LogicBean implements Serializable {
    // ...
}

и

import javax.enterprise.context.SessionScoped;
import javax.inject.Inject;
import javax.inject.Named;

@Named
@SessionScoped
public class ProgettiController implements Serializable {

    @Inject
    private LogicBean logicBean;

    // ...
}
...