【发布时间】:2010-10-10 08:50:26
【问题描述】:
使用 RichFaces 3.3.3、JSF 1.2 和 Facelets。
出于某些演示目的,我需要将一些 div 的内容与其他 div 包装起来,以便能够以某种方式设置它们的样式。
我在编写 HTML 时使用 jQUery 作为它的清洁器,并且可以在一个位置进行控制,否则我必须在每个我想使用它们的地方硬编码额外的 divs。
例如。原始 JSF 生成的 HTML:
<div id="j_id4:main-container">
<div id="j_id4:j_id5:nav">...</div>
</div>
使用 jQUery 后的 HTML 现在看起来像这样:
<div id="j_id4:main-container">
<div class="top"><div></div></div>
<div class="middle">
<div id="j_id4:j_id5:nav">...</div>
</div>
<div class="bottom"><div></div></div>
</div>
这会导致问题吗?我反对来自 jboss richfaces 文档的rule,它说:
任何 Ajax 框架都不应该追加 或删除,但仅替换元素 在页面上。为了成功更新, 具有与中相同 ID 的元素 响应必须存在于页面上。如果 您想将任何代码附加到 页面,为其放置一个占位符(任何 空元素)。出于同样的原因, 建议将消息放入 “AjaxOutput”组件(因为没有 messages 也是一条消息)。
如果我不能这样做,你会建议什么其他方法?
更新 1:
我在一个将rich:tabPanel 控件设置为ajax 模式的页面上进行了尝试,我使第一个(默认)选项卡内容通过jQuery 准备好dom 上的嵌套div。它第一次工作正常,但是当我单击其他选项卡并返回第一个选项卡时,不会出现额外的 div。我认为这是因为 js 仅在 dom 就绪时触发一次,然后在 tabPanel 控件的 Richfaces 重新呈现时重新呈现,就好像它不知道额外的 div 一样。有没有办法避免这种情况?
【问题讨论】:
标签: jquery html jsf richfaces facelets