我有一个CDI Bean,它已注入到另一个CDI Bean,
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页面中有一个链接,我运行bean1Controller 的方法changeFlagBoolean()将注入的bean2Controller的属性标志设置为true 。我那样做,但不幸的是,它不起作用。
任何建议或代码中需要更改的内容。 谢谢
答案 0 :(得分:0)
更新的Answear,
经过这样的研究,我找到了解决方案,
问题出在@viewScoped
范围内,我无法更改注入的bean中的flag属性的值,并且在执行bean2.setFlag(true);
后仍然始终为false
从view1.xhtml
到view2.xhtml
的问题是我有一个bean1Controller
的新实例,这就是为什么我总是将false当作值的原因,因为它是基于视图范围的。
解决方法是使用Flash https://memorynotfound.com/passing-variables-in-jsf-flash-scope/。我将值保存在flash中,并将其值设置为'true',然后在bean2Controller中对其进行了调用,以便可以在bean1Controller中使用它,并通过调用flag = (boolean)flash.get("flag");