我開始使用Spring MVC編寫應用程序,然後決定用Tapestry代替。我想保留最初使用的無XML配置方法。我第一次嘗試這樣的:是否可以使用tapestry-spring實現Servlet 3.0無XML配置?
public class ServletConfig implements WebApplicationInitializer {
@Override
public void onStartup(ServletContext servletContext) throws ServletException {
// Spring //
AnnotationConfigWebApplicationContext rootContext = new
AnnotationConfigWebApplicationContext();
rootContext.register(PersistenceContext.class, ApplicationContext.class);
servletContext.addListener(new ContextLoaderListener(rootContext));
// Tapestry //
servletContext.setInitParameter("tapestry.app-package", "...");
FilterRegistration.Dynamic filter = servletContext.addFilter("app", TapestrySpringFilter.class);
filter.addMappingForUrlPatterns(null, false, "/*");
}
}
這裏的問題是,掛毯創建另一個ContextLoaderListener的,使用空的構造。它不是接收WebApplicationContext,而是查看contextClass和contextConfigLocation初始參數。所以,我想這一點:
@Override
public void onStartup(ServletContext servletContext) throws ServletException {
// Spring //
servletContext.setInitParameter("contextClass",
"org.springframework.web.context.support.AnnotationConfigWebApplicationContext");
servletContext
.setInitParameter(
"contextConfigLocation",
"...config.PersistenceContext ...config.ApplicationContext");
// Tapestry //
servletContext.setInitParameter("tapestry.app-package", "...");
FilterRegistration.Dynamic filter = servletContext.addFilter("app", TapestrySpringFilter.class);
filter.addMappingForUrlPatterns(null, false, "/*");
}
導致了這一現象:
java.lang.IllegalArgumentException: When using the Tapestry/Spring integration library, you must specifiy a context class that extends from org.apache.tapestry5.spring.TapestryApplicationContext. Class org.springframework.web.context.support.AnnotationConfigWebApplicationContext does not. Update the 'contextClass' servlet context init parameter.
TapestryApplicationContext從org.springframework.web.context.support.XmlWebApplicationContext繼承。所以我的問題是:有沒有一種方法可以使用這種方法進行基於註釋的配置工作?如果沒有,是否有另一種方法可以讓我使用它?或者是沒有辦法避免XML?
我試圖恢復到的ServletConfig的第一個版本我豎起就在這裏,但我加
servletContext.setInitParameter("tapestry.use-external-spring-context", "true");
我不再收到錯誤消息,但頁面沒有加載任何。當我嘗試加載/應用/,而不是加載索引頁面我得到這個:
<html>
<head>
<title>Error</title>
</head>
<body>/app/index.jsp</body>
</html>
我不知道是什麼導致了這一點,我無法找到日誌什麼說明任何問題。我在考慮調度員服務存在某種問題。有沒有人看過這種類型的錯誤?我不確定這是否與我原來的問題無關,或者這是我的方法無效的症狀。如果有人能告訴我這是一個單獨的問題,我會採取適當的行動。