Как установить свойство bean-компонента внедренного bean-компонента CDI из содержащего Bean-компонента? - PullRequest
0 голосов
/ 27 сентября 2018

У меня есть компонент CDI, который вводится в другой компонент CDI,

Bean1Controller:

@ViewScoped
public class bean1Controller
{
    @Inject
    Bean2Controller bean2;
    // + setter and getter

    // here I  initialise the injected Bean2
    @PostConstruct
    public void init()
    {
      bean2 = new Bean2Controller();
    }

 public void changeFlagBoolean()
 {
    bean2.setFlag(true);
 }

}

Bean2Controller:

 @ViewScoped
    public class bean2Controller
    {
       boolean flag=false;
       // + getters+setters
    }

Пример XHTML:

<h:commandLink style="font-size: 10px" 
               value="link"
               action="#{bean1Controller.changeFlagBoolean()}"
               target="content" />

Когда я нажимаю на нее, на моей странице XHTML появляется ссылка. Я запускаю метод changeFlagBoolean () bean1Controller , чтобы установитьзначение свойства true для введенного bean2Controller .Я продолжаю так, но, к сожалению, это не работает.

Любое предложение или что-то должно быть изменено в коде.Спасибо

1 Ответ

0 голосов
/ 27 сентября 2018

Обновленный ответ,

Я получил решение после такого исследования,

Проблема была в области действия @viewScoped, я не мог изменить значение свойства флага в введенномbean, и он всегда остается ложным после выполнения bean2.setFlag(true); проблемы, если я перехожу с view1.xhtml на view2.xhtml У меня есть новый экземпляр bean1Controller, поэтому у меня всегда есть значение false, поскольку оно основано на Scope.

Раствор был со вспышкой https://memorynotfound.com/passing-variables-in-jsf-flash-scope/.Я храню значение во флэш-памяти и устанавливаю его как «true», и я вызвал его в bean2Controller, чтобы оно было доступно в bean1Controller, и получил его, вызвав flag = (boolean)flash.get("flag");

...