JSF/Facelets:为啥将 JSF/Facelets 与 HTML 标签混合不是一个好主意?
Posted
技术标签:
【中文标题】JSF/Facelets:为啥将 JSF/Facelets 与 HTML 标签混合不是一个好主意?【英文标题】: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 神话的受害者?有关更多历史记录,请参阅***.com/questions/3273595/… 【参考方案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" />
要解决此问题,您需要将<f:verbatim>
带入。
<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 开始,有了新的视图处理程序,<f:verbatim>
就不再需要了。开发人员现在可以松一口气了。此外,新的视图处理程序允许 JSF 使用与 JSP 不同的视图技术,Facelets 就是这样诞生的。
另见:
What are the main disadvantages of Java Server Faces 2.0? Why Facelets is preferred over JSP as the view definition language from JSF2.0 onwards? Is it possible to use JSF+Facelets with HTML 4/5? JavaServer Faces 2.2 and HTML5 support, why is XHTML still being used【讨论】:
+1 简洁的解释和完美的例子。我事先就知道这一点,但说得很好。 请注意,使用纯 html 而不是给出相同结果的组件 (div vs t:div) 可能会有较小的性能优势,因为这会减少解析时间。但是要知道 html 标记不作为组件包含在视图根 (afaik) 中 @Steven:它对视图构建时间没有影响。无论如何都会对其进行解析和检查(并转换为专用的UIInstructions
组件)。如果您的视图渲染时间相对较多,则视图渲染时间可能会显着加快,因为它们被渲染为没有任何状态和属性的“模板文本”(但仍具有 EL 评估支持)。【参考方案2】:
作为一般规则,我在布局/模板页面中混合使用 betweek HTML 和 Facelets 标签。但是对于实际的内容页面,我尝试只使用我选择的 JSF 库(JSF + RichFaces)中可用的 JSF 标签。
这样我可以更好地控制要显示和隐藏的元素,以及每个元素中的内容,但我仍然可以在 facelets 模板文件中硬编码我的主页布局。
【讨论】:
以上是关于JSF/Facelets:为啥将 JSF/Facelets 与 HTML 标签混合不是一个好主意?的主要内容,如果未能解决你的问题,请参考以下文章
JSF,facelets 上的 actionlistener
找不到 http://java.sun.com/jsf/facelets 的标记库描述符
JSF/Facelets:使用 <h:outputStylesheet> 标记无法识别 CSS 文件