首先是我问题的一些先决条件,我使用struts2+tiles2+toplink。根本没有春天。
最简单的方案是在页面上显示实体列表。为了优化解析JPA的EntityManager,我想创建一个帮助器(JPareSourceBean),它实现实体管理器的延迟加载。为此,我将使用struts2的bean声明:
<bean name="myfactory" class="my.model.JPAResourceBean" scope="session" optional="false"/>
为什么bean既没有在会话中实例化?(我正在使用s:property进行调试)
... <s:property value="#session.myfactory" default="buka.1"/> ...
也不在纯bean列表中:
... <s:property value="#myfactory" default="buka.2"/> ...
可能是问题的第二部分——如何从Java代码中解析这个bean?
我找到了解决办法。
问题在于struts使用lazy load(按需解析)方法来实例化bean,因此当我通过以下语法访问jparesourcebean时,成功地解析了它:
ActionContext.getContext().getContainer().getInstance(JPAResourceBean.class);