これは、恥知らずにインターネットから例をコピーするときに出くわす一種の奇妙な質問です。Spring MVC 4、Apache Tiles 3、Java 8、および Tomcat 8 を使用しています。
私は絶対に views.properties ファイルを持っている必要があります。 しかし、実際のマッピングが含まれている必要はありません。ですから問題は、なぜそれが必要なのかではなく、なぜ必要でないのかということです。
views.properties ファイルからわかるように、userList とはまったく関係のないエントリが 1 つあります。ファイルが完全に欠落している場合、DispatcherServlet は例外をスローします。しかし、この哀れなエントリでは、すべてがうまく機能します。確かに、TilesView クラスがリストされており、JSP を探す場所の一般的なアイデアを提供しています。しかし、私が読んだすべてのことによると、各 JSP は、views.properties ファイルに細心の注意を払ってリストする必要があります。それは単に真実ではありません。
一方では、維持する必要がはるかに少ないため、これは良いことです。しかし、その一方で、私は何か重要なものを本当に失っているように感じます. 免責事項: 私はまだ静的リソース リゾルバーをクラックしていません。これは、Spring がリソースを見つける際の一般的な問題であることを除けば、これとはまったく関係がないようです。
悪名高い views.properties (ファイル全体)
messages.(class)=org.springframework.web.servlet.view.tiles3.TilesView
messages.url=/WEB-INF/xxxx/messages.jsp (for example)
必須のコード例:
@構成クラス
...
@Bean
TilesConfigurer tilesConfigurer() {
TilesConfigurer tilesConfigurer = new TilesConfigurer();
tilesConfigurer.setDefinitions("WEB-INF/tiles/tiles.xml");
return tilesConfigurer;
}
@Bean
ResourceBundleViewResolver viewResolver() {
ResourceBundleViewResolver resourceBundleViewResolver = new ResourceBundleViewResolver();
resourceBundleViewResolver.setBasename("views");
return resourceBundleViewResolver;
}
@Bean
TilesViewResolver tilesVewResolver() {
return new TilesViewResolver();
}
...
tiles.xml
<tiles-definitions>
<definition name="baseLayout" template="/WEB-INF/tiles/maintemplate.jspx">
<put-attribute name="header" value="/WEB-INF/tiles/header.jspx" />
<put-attribute name="menu" value="/WEB-INF/tiles/menu.jspx" />
<put-attribute name="body" value="" />
<put-attribute name="footer" value="/WEB-INF/tiles/footer.jspx" />
</definition>
<!-- USERS -->
<definition name="userEdit" extends="baseLayout">
<put-attribute name="title" value="Edit User" />
<put-attribute name="body" value="/WEB-INF/views/users/edit.jspx" />
</definition>
<definition name="userList" extends="baseLayout">
<put-attribute name="title" value="List Users" />
<put-attribute name="body" value="/WEB-INF/views/users/list.jspx" />
</definition>
...
ユーザーコントローラー.java
...
@PreAuthorize("isAuthenticated()")
@RequestMapping(method = RequestMethod.GET)
public String list(Locale locale, HttpServletRequest request, HttpServletResponse response, Model uiModel) {
themeResolver.setThemeName(request, response, "defaultTheme");
List<User> users = userRepository.findAll();
uiModel.addAttribute("users", users);
return "userList";
}
...