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 为空的主要内容,如果未能解决你的问题,请参考以下文章