我正在使用spring portlet mvc和liferay。我需要知道是否有办法在所有@ModelAttribute注释之前调用方法(类似于init方法)。我需要这个,因为我在所有@ModelAttribute方法中使用从db中检索的对象来从对象中提取属性的子集。我使用request参数发送db中行的pk-id。我不想在所有使用上面注释注释的方法中重新检索对象(这会减慢渲染速度,因为我正在与db进行多次连接以检索同一个对象,我可以在应该在任何渲染/动作请求之前调用的类似init的方法。我试过@PostConstruct,但它抛出了一个异常,显然这不是解决方案。我甚至不知道Spring是否正在考虑这个注释,因为它来自核心javax API。
谢谢!
答案 0 :(得分:0)
修改强>
好的,所以如果你需要在@(Action / Request)映射之前调用一个方法,你可以使用Spring MVC框架中的Interceptor。
此link可能有用。
不回答你的问题直接但是我建议创建一个服务来从数据库中检索对象,然后在portlet中注入这个服务:
@Autowired ServiceDao serviceDao
这样您就可以将数据库访问层与视图层分开(控制器不应该直接查询DB)。
然后解决你的问题你可以发布一些代码吗?如果您的每个@ModelAttribute
都需要BD中的某个对象,您可以检索一次,然后将其缓存在您的服务中。
Spring Portlet MVC annotion上可能有用的一些资源。