2

spring4gwt在我的项目中使用。

我有以下登录服务实现:

@Service("loginService")
public class LoginServiceImpl extends RemoteServiceServlet implements LoginService {

    @Override
    @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
    public UserBean checkUser(String userName, String password) throws Exception {

        HttpSession httpSession = getThreadLocalRequest().getSession();

    }
}

当我调用loginService.checkUser("test","test")(在托管模式下)时,我得到一个 NullPointerException,因为getThreadLocalRequest()返回 NULL 而不是实际会话。

我还没有尝试在网络模式下。

为什么我会得到一个空会话?它与spring4gwt有关吗?

4

1 回答 1

6

是的,因为spring4gwt,我们需要不同的方法。

我在这里找到了解决方案http://code.google.com/p/spring4gwt/issues/detail?id=2

在 web.xml 中:

<filter>
    <filter-name>springRequestFilter</filter-name>
    <filter-class>org.springframework.web.filter.RequestContextFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>springRequestFilter</filter-name>
    <url-pattern>/your-url/*</url-pattern>
</filter-mapping>

而不是:

 HttpSession httpSession = getThreadLocalRequest().getSession();

采用 :

ServletRequestAttributes attr = (ServletRequestAttributes) RequestContextHolder.currentRequestAttributes();
HttpSession httpSession = attr.getRequest().getSession();
于 2012-10-31T23:29:53.290 回答