【问题标题】:JSF/Facelets: why is it not a good idea to mix JSF/Facelets with HTML tags?JSF/Facelets:为什么将 JSF/Facelets 与 HTML 标签混合不是一个好主意?
【发布时间】:2011-07-25 08:31:56
【问题描述】:

我已经读了好几遍了:一些开发人员不提倡在他们的 XHTML 文件中将 JSF/Facelets 标记与 HTML 标记交错。显然 HTML 标签不会成为 UI 组件树的一部分,但这样做有什么缺点呢?

我经常找到作者进行这种混合的代码示例:

http://www.ibm.com/developerworks/java/library/j-facelets/

http://www.packtpub.com/article/facelets-components-in-jsf-1.2

http://oreilly.com/catalog/9780596529246

“Seam in Action”还交织 JSF/Facelets 和 HTML 标签。

我对实际使用什么感到困惑。我开始混合标签,但我开始相信这可能不是正确的选择。但是,我不明白为什么纯粹的方法更可取。

我确定我有一个表格,其中 JSF 数据表没有给我足够的灵活性来显示我需要的内容,因此不可能纯粹地这样做。

此外,我想知道为什么上面的示例都没有使用 f:view 等,而不是硬编码的 html、head、body 等标签。

谁能帮我解决这个问题?

【问题讨论】:

  • 查看this question关于JSF/HTML标签
  • 好的,这有帮助。至少关于 div 和 span,但我如何管理 p、br,尤其是标题?
  • 来自我在引用问题中的回答:“在实践中,我发现很难遵循这个建议,最终混合使用了 html 和 jsf,例如对于标题或换行符,我使用 html。”
  • 嗯,令人失望。不应该有JSF方式吗?
  • 我不明白为什么这不是一个好主意,而且这令人失望。也许您是 JSF 1.0/1.1 时代造成的混合 JSF+HTML=bad 神话的受害者?有关更多历史记录,请参阅stackoverflow.com/questions/3273595/…

标签: jsf xhtml facelets


【解决方案1】:

在 JSF 1.0/1.1 时代,这确实“不是一个好主意”,因为当使用 JSP 作为视图技术时,所有的 HTML 都不会自动获取到 JSF 组件树中。所有纯 HTML 都被 JSP 急切地呈现在 JSF 组件树之前。例如

<p>Lorem ipsum <h:outputText value="#{bean.value1}"> dolor sit amet<p>
<p>Consectetur adipiscing <h:inputText value="#{bean.value2}" /> elit</p>

被渲染为

<p>Lorem ipsum dolor sit amet<p>
<p>Consectetur adipiscing elit</p>

value1
<input type="text" value="value2" />

要解决此问题,您需要将&lt;f:verbatim&gt; 带入。

<f:verbatim><p>Lorem ipsum </f:verbatim><h:outputText value="#{bean.value1}"><f:verbatim> dolor sit amet<p></f:verbatim>
<f:verbatim><p>Consectetur adipiscing </f:verbatim><h:inputText value="#{bean.value2}" /><f:verbatim> elit</p></f:verbatim>

这是一个真正的维护痛苦。这是 JSF 1.0/1.1 如此受人憎恨的主要原因之一。

从 JSF 1.2 开始,有了新的视图处理程序,&lt;f:verbatim&gt; 就不再需要了。开发人员现在可以松一口气了。此外,新的视图处理程序允许 JSF 使用与 JSP 不同的视图技术,Facelets 就是这样诞生的。

另见:

【讨论】:

  • +1 简洁的解释和完美的例子。我事先就知道这一点,但说得很好。
  • 请注意,使用纯 html 而不是给出相同结果的组件 (div vs t:div) 可能会有较小的性能优势,因为这会减少解析时间。但是要知道 html 标记不作为组件包含在视图根 (afaik) 中
  • @Steven:它对视图构建时间没有影响。无论如何都会对其进行解析和检查(并转换为专用的UIInstructions 组件)。如果您的视图渲染时间相对较多,则视图渲染时间可能会显着加快,因为它们被渲染为没有任何状态和属性的“模板文本”(但仍具有 EL 评估支持)。
【解决方案2】:

作为一般规则,我在布局/模板页面中混合使用 betweek HTML 和 Facelets 标签。但是对于实际的内容页面,我尝试只使用我选择的 JSF 库(JSF + RichFaces)中可用的 JSF 标签。

这样我可以更好地控制要显示和隐藏的元素,以及每个元素中的内容,但我仍然可以在 facelets 模板文件中硬编码我的主页布局。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-10-30
    • 2010-09-10
    • 2012-07-12
    • 2010-09-18
    • 2010-12-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多