Как проверить правильность сохранения объекта, хранящегося в @WindowScoped?
Два дня назад я написал этот вопрос:
Как получить объект на @WindowScoped?
и BalusC ответил некоторыми предложениями, теперь у меня есть некоторая проблема, чтобы понять, если моя проблема в том, что объект в WindowScoped хранится правильно, или мой код для извлечения неверен!
Ну, как я уже сказал, у меня есть объект, который я сохранил в аннотации @WindowScoped, но я могу получить этот объект только в первый раз! Почему?
У меня просто есть сомнения: расширение CODI MyFaces можно настроить каким-то образом? Или я могу использовать его, просто добавляя файлы 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, но ничего не изменилось...
EDIT: после некоторых новых испытаний я обнаружил странную проблему, на мой 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
CODI является расширением для CDI, поэтому вам следует управлять аннотацией beans по CDI @Named
вместо аннотации JSF @ManagedBean
. Затем вы можете ввести другую bean с помощью аннотации 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;
// ...
}