将会话bean注入请求bean重新部署问题

时间:2015-01-21 15:41:01

标签: spring jsf liferay

尝试将会话范围的bean注入请求范围的bean时,我遇到了一个问题。我在本文末尾加入了一个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>

2 个答案:

答案 0 :(得分:2)

解决了我的问题。显然,这是由于错误设置的Liferay属性(private-session-attributes设置为false而不是true)。

可在此主题中找到更多信息:https://www.liferay.com/community/forums/-/message_boards/message/48105922

答案 1 :(得分:0)

@Scope("session")更改为@SessionScoped

@Scope("request")@RequestScoped