在 jsf/richfaces 组件中使用时,在实体内使用 @Formula 注释进行重新渲染问题

发布于 2024-12-21 02:09:10 字数 1228 浏览 3 评论 0原文

我在 rich:scrollableDataTable 上再次重新渲染时遇到问题,我有一个 onrowclick 函数,可以将列表中的项目发送到编辑模式。

这是示例代码:

                <a4j:outputPanel id="reviewerOP" ajaxRendered="true">           
                    <h:outputText id="to" value="#{_folder.reviewerName}">
                    </h:outputText>
                </a4j:outputPanel>          
                <h:selectOneMenu id="sridSO" value="#{folderBean.selectedReviewerId}" style="display: #{_folder.editmode == true ? 'block':'none'}">
                    <s:selectItems id="selectItes" value="#{folderBean.reviewersList}" var="_reviewer" label="#{_reviewer.userName}" itemValue="#{_reviewer.userId}"
                                   noSelectionLabel="--Select a Reviewer--"/>
                </h:selectOneMenu>
        </h:column>

我的表的值指向带有@SessionScope的实体列表。

这种情况是,当用户单击编辑按钮时,该特定行中的项目将处于编辑模式,并且下拉菜单将启用,用户将能够选择该文件夹的审阅者。属性 editmode 是文件夹实体的瞬态属性。到目前为止,我能够正确渲染下拉列表并将所选审阅者保存在数据库中。但我在重新渲染审阅者姓名时遇到问题。在某些情况下,单击“完成”按钮后它不会重新渲染,但在某些情况下它运行良好。

reviewName 属性使用 @Formula 从不同的表中获取名称。

我的问题是:@Formula 是否与重新渲染的延迟或给出问题的实体列表的范围有关。

我正在使用seam.2.2 richfaces 3.x。和 jsf2.0

谢谢:)

I having problem with it comes to reRendering again on rich:scrollableDataTable, I have an onrowclick function that sends the item in my list to be in edit mode.

Here is the sample code:

                <a4j:outputPanel id="reviewerOP" ajaxRendered="true">           
                    <h:outputText id="to" value="#{_folder.reviewerName}">
                    </h:outputText>
                </a4j:outputPanel>          
                <h:selectOneMenu id="sridSO" value="#{folderBean.selectedReviewerId}" style="display: #{_folder.editmode == true ? 'block':'none'}">
                    <s:selectItems id="selectItes" value="#{folderBean.reviewersList}" var="_reviewer" label="#{_reviewer.userName}" itemValue="#{_reviewer.userId}"
                                   noSelectionLabel="--Select a Reviewer--"/>
                </h:selectOneMenu>
        </h:column>

The value of my table point to the entity list with @SessionScope.

The scenario is when the user click the edit button the item in that particular row will be in edit mode and the drop menu will be enabled and the user will be able to select a reviewer for that folder. The property editmode is a transient property from The Folder Entity. So far good i am able to render correctly the drop down and save the selected reviewer in the DB. But i having problem with it comes to reRendering the reviewer name. On some occasion it does not reRender after the done button was clicked but on some part it works well.

The reviewName property used @Formula to get the name from the different table.

My question is: Is the @Formula had something to do on the delayed of reRendering or the scope of the entityList that gives the problem.

I am using seam.2.2 richfaces 3.x. and jsf2.0

Thanks :)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

羁〃客ぐ 2024-12-28 02:09:10

已经解决了问题。

我尝试使用一些日志对从实体列表返回的结果列表运行一些测试。
我发现我的实体的属性在数据库和列表上都已更新。但使用公式的属性不会更新。因此 refresh() 方法将不起作用,并且不会重新读取使用 @Formula 注释的属性。所以我认为我的 @Formula 上的查询由 hibernate 缓存,并且不会在第二次访问实体列表的结果列表时重新读取。

我的解决方案:

我使用的解决方案是使用其 clear() 方法清除 EntityManager。并且列表已正确更新并且重新渲染工作完美。

-干杯

Already solved the problem.

I try to run some test on the result list that are return from my Entity List using some logs.
I found out that the property of my Entity are updated on the DB and as well as on the list. But the property that uses formula is not updated. So refresh() method wont work and will not reread the property annotated using @Formula. So i think that the query on my @Formula are cached by hibernate and will not reread on second access to the result list of Entity List.

My Solution:

The solution i use is to clear the EntityManager using its clear() method. And the list is updated correctly and the rerender works perfectly.

-cheers

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文