【发布时间】:2019-08-04 21:18:46
【问题描述】:
我正在尝试使用 jsf 和 CDI 编写一个简单的登录表单。 问题是当我注入我的 SessionScoped bean 时,它并没有像我预期的那样工作。 这是我的豆子
@Named
@SessionScoped
public class LoginInfo implements Serializable {
private String uname;
private String pass;
private String pagename;
private int count;
public LoginInfo() {
}
public void increment() {
count++;
}
}
这是我的控制器:
@Named
@RequestScoped
public class LoginPageMg {
@Inject
LoginInfo lo;
public LoginPageMg() {
}
public void login() {
lo.increment();
lo.setPagename("aaa");
int x = 8;
}
}
还有一个简单的Jsf表单,调用login函数,显示LoginInfo类的counter字段。
<h:form prependId="false" id="mainform" styleClass="login-box">
<p:inputText value="#{loginPageMg.uname}"/>
<p:password value="#{loginPageMg.pass}"/>
<h:outputLabel id="counter" value="#{loginInfo.count}"></h:outputLabel>
<p:commandButton update="counter"
action="#{loginPageMg.login}"
value="login"></p:commandButton>
</h:form>
通过点击登录按钮和调试变量,我可以看到“lo”是这样的:
lo = {LoginInfo$Proxy$_$$_WeldClientProxy@16688}"com.mg.LoginInfo@703ec5d5"
在线 int x=8 我可以看到“lo”变量根本没有改变,但是在我的 jsf 页面中,我可以看到每次按下登录按钮时计数器都会增加,刷新页面后 bean 会保留该值。
- 什么是 WeldClientProxy?
- 为什么有两个不同的 SessionScoped bean 实例?是 那是正常的还是我做错了什么?
- 如何注入与 jsf 相同的实例?
我正在使用 野蝇 15 JSF 2.3.4 CDI 1.1
【问题讨论】:
-
您可能正在混合使用 JSF 和 CDI 注释。你用的
@SessionScoped和@RequestScoped的包到底是什么? -
@NikosParaskevopoulos 不,我正在使用 javax.enterprise.context 包