我正在使用webapp上的jboss。我有一个类似于论坛页面的页面,您可以在其中发布消息并回复已发布的消息。在我的jsf中,我有三个div标签,一个用于添加新消息,一个用于列出所有消息,另一个用于查看所选消息。嵌入了所有标记,每个标记都有render属性,如下所示:
<h:pannelGroup rendered="#{myController.shouldRender('add')}">
<!-- Here is my html for adding new message -->
</h:pannelGroup>
<h:pannelGroup rendered="#{myController.shouldRender('list')}">
<!-- Here is my html for listing messages -->
</h:pannelGroup>
<h:pannelGroup rendered="#{myController.shouldRender('view')}">
<!-- Here is my html for viewing message and its replys..
also there is hidden div with html for popup to post reply -->
<div id="reply">
<!-- This is hidden html that is shown when clicked reply
link in the message div below.
When shown users can add reply to the message -->
</div>
<div id="message">
<!-- Here is show the message itself -->
</div>
<div id="replyList">
<!-- Here is list replys for the message currently beeing viewed
For listing the replys i used ui:repeate and c:forEach from the jstl core
both resulting with same outcome.
In my message object i have list of replys which i load lazily...
-->
</div>
</h:pannelGroup>
我的支持bean,删除了所有注释和其余代码......
MyController{
String page;
public boolean shouldRender(String view){
return page.equals(view);
}
}
我使用actionListener从菜单项列表设置的页面属性,在我将用户重定向到message.xhtml页面之前,我将myController的属性页面设置为我想要查看的div名称,因此对于例如如果我点击添加链接我设置page =“添加”并重定向到message.xhtml。在那里,控制器从外部获取页面集并呈现添加div。
因为我无法设法使扩展持久性上下文工作,所以我在/ *上设置过滤器以打开用户事务,然后在实现我的事务的chain.DoFilter之后将实体管理器与该实体管理器合并。我需要手动启用延迟加载..
问题是,当我添加回复消息时,带有回复的列表不会立即刷新,我需要返回消息列表然后再次在视图div中打开相同的消息以获取刷新回复列表..或...在添加回复的方法中我试图在消息对象拥有的回复列表中手动加载我的回复(这是懒惰加载和映射的@OneToMany),这种方式可行,但我不喜欢那个解决方案。
有人可以告诉我天气hibernate正在重新加载延迟加载列表,因为我管理事务并且我假设一旦它加载了我的列表,它就不会自己刷新它。
答案 0 :(得分:0)
在同一会话中修改列表时,会更新列表。
在其他会话中修改列表时,它不会更新。
由于会话对象不是多线程安全的,在您的环境中可能每个用户都有自己的会话实例,因此您将处于第二种情况。要强制刷新,您可以逐出()父实例并再次加载(),或者清除()会话,或者创建并使用新实例。
注意延迟加载。由于子元素在首次使用时加载(而不是与父实例一起加载),因此它们已经可以反映出在加载父对象时尚未进行的修改。