JSF / Facelets:为什么将JSF / Facelets与HTML标签混合起来不是一个好主意?

时间:2011-03-29 14:29:50

标签: jsf xhtml facelets

我现在已经多次阅读过:一些开发人员不支持在他们的XHTML文件中使用HTML标记交换JSF / Facelets标记。显然,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等标签。

有人可以帮我解决这个问题吗?

2 个答案:

答案 0 :(得分:17)

在JSF 1.0 / 1.1期间,这确实“不是一个好主意”,因为当使用JSP作为视图技术时,所有HTML都不会自动在JSF组件树中获取。在 JSF组件树之前,所有纯HTML都是由JSP呈现引起的。 E.g。

<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诞生了。

另见:

答案 1 :(得分:4)

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

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