2

嗨,我在 webapp 上与 jboss 一起工作。我有一个类似于论坛页面的页面,您可以在其中发布消息并回复已发布的消息。在我的 jsf 中,我有三个 div 标签,一个用于添加新消息,一个用于列出所有消息,一个用于查看选定的消息。所有标签都嵌入其中,每个标签上都有渲染属性,如下所示:

<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 = "add" 并重定向到 message.xhtml。控制器从外部拾取页面集并呈现添加 div。

因为我无法让扩展的持久性上下文正常工作,所以我在 /* 上设置了过滤器以打开用户事务,然后在 chain.DoFilter 我提交我的事务之后将实体管理器与那个合并。这我需要手动启用延迟加载..

问题是,当我添加回复消息时,带有回复的列表不会立即刷新,我需要返回消息列表,然后再次在视图 div 中打开相同的消息以刷新回复列表.. 或...在添加回复的方法中,我尝试在消息对象拥有的回复列表中手动加载我的回复(这是延迟加载并映射@OneToMany),这样它就可以工作,但我不喜欢那个解决方案。

谁能告诉我天气休眠正在重新加载延迟加载的列表,因为我管理事务并且我假设一旦它加载了我的列表,它就不会自行刷新它。

4

1 回答 1

0

当列表在同一个会话中被修改时,它会被更新。

当列表在不同的会话中被修改时,它不会得到更新。

由于会话对象不是多线程安全的,在您的环境中,可能每个用户都有自己的会话实例,所以您将处于第二种情况。要强制刷新,您可以 evict() 父实例并再次 load() 它,或者 clear() 会话,或者创建并使用新的会话。

注意延迟加载。由于子元素在第一次使用时加载(而不是与父实例一起加载),它们已经可以反映到加载父对象时尚未进行的修改。

于 2012-11-27T10:31:37.827 回答