私はグーグルアプリエンジン、スプリング、タイルの構成を使用しており、各コントローラーのアクションにより、ネストされた(タイル)jspのセットがレンダリングされます。jspの要素のいくつかは、(ほぼ)各コントローラーに対して計算/設定されます。たとえば、ページのどこかにあるログイン/ログアウトリンクです。
<%
com.google.appengine.api.users.UserService userService =
com.google.appengine.api.users.UserServiceFactory.getUserService();
com.google.appengine.api.users.User user = userService.getCurrentUser();
if (user != null) {%>
<li class="active"><a href="#feeds">Feeds</a></li>
<li class="active"><a href="<%=userService.createLogoutURL("")%>">Logout</a></li>
<%} else {%>
<li class="active"><a href="<%=userService.createLoginURL("")%>">Login</a></li>
<%}%>
もちろん、これは可能であり、そのようなコードを単純化できる静的クラスを作成することもできます。しかし、これは私がjspに入れたいものではありません。さらに、thymeleafのようなテンプレートエンジンではそのようなコードを実行することは(おそらく)不可能です。したがって、どのように私はこのようなことをするのですか?
@RequestMapping("/foo")
public class FooController {
@RequestMapping(value="/{bar}", method = RequestMethod.GET)
public String getMovie(@PathVariable String bar, ModelMap model) {
model.addAttribute("bar", bar);
model.addAttribute("message", "message");
UserService userService = UserServiceFactory.getUserService();
User user = userService.getCurrentUser();
model.addAttribute("isLoggedIn", user==null);
return "somepage";
}
}
要約すると、isLoggedInコードがどこにでも重複するのを防ぐにはどうすればよいですか。できれば、「initUserModel(model)」メソッドを呼び出す必要があるのとは異なるソリューションです。