Я пытаюсь написать простую форму входа в систему с jsf и CDI.
проблема в том, что когда я внедряю свой компонент SessionScoped, он не работает так, как я ожидаю.
Это мой боб
@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, которая вызывает функцию входа в систему и показывает поле счетчика класса LoginInfo.
<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 я вижу, что счетчик увеличивается каждый раз, когда я нажимаю кнопку входа в систему, и бин сохраняет значение после обновления страницы.
- Что такое WeldClientProxy?
- Почему существуют два разных экземпляра компонента SessionScoped? Является
это нормально или я что то не так делаю?
- Как я могу внедрить тот же экземпляр, что делает jsf?
Я использую
Wildfly 15
Jsf 2.3.4
CDI 1.1