RichFaces a4j:support 应该在上下文中更新模型,而不是实体

Posted

技术标签:

【中文标题】RichFaces a4j:support 应该在上下文中更新模型,而不是实体【英文标题】:RichFaces a4j:support should update the model in the context, but not the entity 【发布时间】:2012-12-02 14:34:50 【问题描述】:

我有一个 h:inputTextarea 和一些 a4j:support 来按需更新模型

<h:inputTextarea rows="15" id="taFreetext" value="#customInput.value"
  required="true" 
  onkeyup="textAndLinesCount(#rich:element('taFreetext'),document.getElementById('msgCounterLines'),20, 64);">
     <a4j:support ajaxSingle="true" event="onchange" />
</h:inputTextarea>

我的问题是,当我按下一个键时,不仅我上下文中的模型会更新,而且实体也会自动刷新!

此文件的page.xml 的刷新模式为手动

<begin-conversation join="true" flush-mode="manual"/>

我在 Seam Framework 论坛上阅读了这篇文章:Problems with AJAX and update model,但这并没有真正的帮助。 我的a4j:support 中也有一些action,这使得entityManager.refresh() 如帖子中所写,但随后模型和实体仍处于旧状态...

期待一些好的提示,谢谢!

(我使用 JSF 1.2,RichFaces 3.3.3)

【问题讨论】:

你能再描述一下吗?我认为你需要使用savestate @jubinPatel 你到底想要什么信息?我想帮你回答这个问题,如果你能告诉我,你的膝盖更多......以及:你对savestate 的意思是什么? 哪个实体变为空你的意思是输入文本区域值?还提供你的JS。 savestate 表示当整页重新加载时,您的支持 bean customInput 生成新对象。要保留最后一个对象,请使用 t:savestate。在&lt;body&gt; 标记之后使用&lt;t:saveState value="#customInput"/&gt; t 标记作为战斧库。它可能会解决问题 我们没有使用 tomahawk lib。没有实体变为空,问题是,模型的更新正在自动持久化实体......没有调用保存函数! setter 函数是一个普通的 setter 函数... 嗨@Joerg,您使用的是SEAM 托管的持久性上下文(@In EntityManager)吗?还有 customInput bean 的范围是什么? 【参考方案1】:

使用 reRender 属性更新模型,你所做的就是在 reRender 属性中提到它的 id,你会得到结果。

<a4j:support event="onchange" reRender="userRegistrationForm" action="#UserRegistrationBean.onChangeMenuCountry"></a4j:support>

【讨论】:

以上是关于RichFaces a4j:support 应该在上下文中更新模型,而不是实体的主要内容,如果未能解决你的问题,请参考以下文章

Richfaces:dropDownMenu 操作

带有richfaces 4的动态列

如何停止 Richfaces 向面板和日历添加边框?

JSF / Seam / RichFaces 中是不是有“服务器端注释”?

Richfaces:丰富:数据表行跨度使用丰富:子表

Richfaces 皮肤覆盖样式类