この問題をどのように解決したかをさらに明確にするために、私は自分の質問に答えることを選択しました。
1. DigitalJoelの回答で示唆されているように、私はApplicationListener
Beanを作成しました。このリスナーは、コンテキストが更新されるたびに起動されます。
LookupLoader.java
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationListener;
import org.springframework.context.event.ContextRefreshedEvent;
import org.tothought.entities.SkillCategory;
import org.tothought.repositories.SkillCategoryRepository;
public class LookupLoader implements ApplicationListener<ContextRefreshedEvent> {
@Autowired
SkillCategoryRepository repository;
private List<SkillCategory> categories;
public List<SkillCategory> getCategories() {
return categories;
}
public void setCategories(List<SkillCategory> categories) {
this.categories = categories;
}
@Override
public void onApplicationEvent(ContextRefreshedEvent event) {
if(this.categories == null){
this.setCategories(repository.findAll());
}
}
}
2.次に、このBeanをアプリケーション構成に登録しました。
application-context.xml(Spring-Config)
<bean id="lookupLoader"
class="org.tothought.controllers.initializers.LookupLoader" />
3.次に、このBeanを各リクエストにHandlerInterceptorAdapter
配置するために、リクエストが受信されるたびに実行されるaを作成しました。このBeanでは、LookupLoaderを自動配線し、リクエストにリストを設定しました。
LookupHandlerInterceptor.java
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
import org.tothought.controllers.initializers.LookupLoader;
public class LookupHandlerInterceptor extends HandlerInterceptorAdapter {
@Autowired
LookupLoader loader;
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
throws Exception {
request.setAttribute("skillCategories", loader.getCategories());
return super.preHandle(request, response, handler);
}
}
4. SpringMVCWebアプリケーション構成内にHandlerInterceptorを登録します
サーブレット-context.xml
<!-- Intercept request to blog to add paging params -->
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/**"/>
<bean class="org.tothought.controllers.interceptors.LookupHandlerInterceptor" />
</mvc:interceptor>
</mvc:interceptors>
5.JSPおよびJSTLを介してリストにアクセスします
<c:forEach var="category" items="${skillCategories}">
${category.name}
</c:forEach>