将会话 bean 注入请求 bean 重新部署问题
Injecting session bean into request bean redeploy problems
我 运行 在尝试将会话范围的 bean 注入请求范围的 bean 时遇到了问题。我在这个 post 的末尾包含了一个 MWE,并试图找出模块停止工作的确切情况。
我第一次使用注入的会话范围 bean 部署模块(实际上是一个 Liferay portlet)时,一切都按预期进行。我可以随心所欲地重新部署,它似乎一直在工作,直到我真正让容器创建 bean 和会话。从那时起,每次重新部署时都会出现以下异常:
Caused by: java.lang.IllegalArgumentException: Can not set com.test.sessionscope.TestSessionBean field com.test.sessionscope.TestBean.bean to com.test.sessionscope.TestSessionBean
注入和作用域是使用 Spring 完成的,使用的 servlet 容器是 Tomcat。
一个最小的(不总是)工作示例:
TestSessionBean
@Named
@Scope("session")
public class TestSessionBean implements Serializable {
}
TestBean
@Named
@Scope("request")
public class TestBean implements Serializable {
@Inject private TestSessionBean bean;
private String name;
@PostConstruct
public void init() {
name = "session test";
}
public String getName() {
return name;
}
}
XHTML
<f:view xmlns="http://www.w3.org/1999/xhtml" xmlns:f="http://java.sun.com/jsf/core" xmlns:h="http://java.sun.com/jsf/html">
<h:head>
</h:head>
<h:body>
#{testBean.name}
</h:body>
</f:view>
将@Scope("session")
更改为@SessionScoped
和@Scope("request")
到@RequestScoped
解决了我的问题。显然这是由于错误设置了 Liferay-属性(private-session-attributes 被设置为 false 而不是 true)。
更多信息可以在这个线程中找到:https://www.liferay.com/community/forums/-/message_boards/message/48105922。
我 运行 在尝试将会话范围的 bean 注入请求范围的 bean 时遇到了问题。我在这个 post 的末尾包含了一个 MWE,并试图找出模块停止工作的确切情况。
我第一次使用注入的会话范围 bean 部署模块(实际上是一个 Liferay portlet)时,一切都按预期进行。我可以随心所欲地重新部署,它似乎一直在工作,直到我真正让容器创建 bean 和会话。从那时起,每次重新部署时都会出现以下异常:
Caused by: java.lang.IllegalArgumentException: Can not set com.test.sessionscope.TestSessionBean field com.test.sessionscope.TestBean.bean to com.test.sessionscope.TestSessionBean
注入和作用域是使用 Spring 完成的,使用的 servlet 容器是 Tomcat。
一个最小的(不总是)工作示例:
TestSessionBean
@Named
@Scope("session")
public class TestSessionBean implements Serializable {
}
TestBean
@Named
@Scope("request")
public class TestBean implements Serializable {
@Inject private TestSessionBean bean;
private String name;
@PostConstruct
public void init() {
name = "session test";
}
public String getName() {
return name;
}
}
XHTML
<f:view xmlns="http://www.w3.org/1999/xhtml" xmlns:f="http://java.sun.com/jsf/core" xmlns:h="http://java.sun.com/jsf/html">
<h:head>
</h:head>
<h:body>
#{testBean.name}
</h:body>
</f:view>
将@Scope("session")
更改为@SessionScoped
和@Scope("request")
到@RequestScoped
解决了我的问题。显然这是由于错误设置了 Liferay-属性(private-session-attributes 被设置为 false 而不是 true)。
更多信息可以在这个线程中找到:https://www.liferay.com/community/forums/-/message_boards/message/48105922。