GWT vs Spring:如果我更改页面,applicationContext 为空

Posted

技术标签:

【中文标题】GWT vs Spring:如果我更改页面,applicationContext 为空【英文标题】:GWT vs Spring: applicationContext is null if I change the page 【发布时间】:2014-02-03 03:30:57 【问题描述】:

我从一个离开的开发人员那里继承了一个项目,我正在尝试了解 GWT 和 Spring Framework。

导致我走上这条路的原始问题:GWT 有一个模块,我在其中加载了所有第三方 javascript... 这可能会导致冲突。例如,我会在一页中包含图表绘图库等。 可能的解决方案:将图表绘图库放在 iframe 中,这样它就不会与其他第三方 javascript 库冲突......或者在新窗口中打开页面。

我决定使用一个新窗口。

所以我这样做了:

Window.Location.assign(GWT.getHostPageBaseURL()
            + "chartModule.html?gwt.codesvr=127.0.0.1:9997/");

但是,在我的新 chartModule.java (GWT) 中,我遇到的问题是我没有在(Spring 框架)applicationContext.xml 中定义的 bean/类:

@Autowired
ApplicationContext applicationContext;

在我更改了主机页面 url 后 applicationContext 为空...所以我没有尝试自动装配的任何 bean...

是否可以从 applicationContext.xml 重新加载 bean??

这是我的 applicationContext.xml:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
    xmlns:p="http://www.springframework.org/schema/p"
    xsi:schemaLocation="http://www.springframework.org/schema/beans 
            http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
            http://www.springframework.org/schema/context
            http://www.springframework.org/schema/context/spring-context-3.1.xsd">

    <!-- Activates various annotations to be detected in bean classes -->
    <context:annotation-config />

    <!--  This file has properties that are used by other XML files loaded via $var name syntax -->
    <context:property-placeholder location="/WEB-INF/classes/environment.properties" />

    <import resource="spring-security-cas.xml" />

    <!-- Scans the classpath for annotated components that will be auto-registered 
        as Spring beans. For example @Controller and @Service. Make sure to set the 
        correct base-package -->
    <context:component-scan base-package="com.javamango.sixtydegrees" />
    <import resource="mongo-config.xml" />
    <import resource="rabbitmq-context.xml" />
    <import resource="spring-mail.xml" />
</beans>

【问题讨论】:

【参考方案1】:

您不能在客户端使用 spring bean。如果你想在 gwt 中从 spring 中检索一些数据,你可以通过两种方式做到这一点:

1) 使用像gwt-sl 这样的服务器端库在gwt servlet 中注入spring bean

@Service("greetingService")
public class GreetingServiceImpl extends RemoteServiceServlet implements GreetingService

    @SuppressWarnings("unused")
    private static final Logger LOGGER = LoggerFactory.getLogger(GreetingServiceImpl.class);

    @Autowired
    UserFileService userFileService;

    @Autowired
    UserService userService;

现在您可以自动装配 spring bean 并通过 gwt-rpc 获取数据

2) 通过 jsp 将数据放入隐藏的 html 表单字段中并从中检索数据

<input type="hidden" value="7" id="documentid"/>

String id = (InputElement) (Element) DOM.getElementById("documentid").value

【讨论】:

以上是关于GWT vs Spring:如果我更改页面,applicationContext 为空的主要内容,如果未能解决你的问题,请参考以下文章

GWT 应用程序中的页面导航

GWT Spring 安全集成(纯 GWT,无 JSP)

如何集成 Spring Security 和 GWT?

Spring security - 身份验证后的 GWT 重定向

具有SSL安全性的GWT

GWT 超级开发模式 - bindAddress - 未显示更改