Spring MVC を使用してアプリの作成を開始し、代わりに Tapestry を使用することにしました。元々使用していた 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");
エラー メッセージは表示されなくなりましたが、ページも読み込まれません。/app/ をロードしようとすると、インデックス ページをロードする代わりに次のようになります。
<html>
<head>
<title>Error</title>
</head>
<body>/app/index.jsp</body>
</html>
何が原因なのかわかりません。ログに問題を示すものは何も見つかりません。ディスパッチャ サービスに何らかの問題があると考えています。このタイプのエラーを以前に見た人はいますか? これが私の元の問題と無関係なのか、それとも私のアプローチが有効でないことの兆候なのかはわかりません。これは別の問題だと誰かが私に言うことができれば、私は適切な行動を取ります.