【问题标题】:Is it suggested to use h:outputText for everything?是否建议对所有内容都使用 h:outputText ?
【发布时间】:2011-07-29 05:37:47
【问题描述】:

我是 JSF 的新手(4 天前才开始学习它),我对 h:outputText 的用法有点困惑。我知道这是一个简单的标签,但在我见过的大多数示例中,它用于输出非常简单(无需转义)的非 i18n 文本。例如(取自here

<h:outputText value="Transport" />

可以替换为

Transport 

所以,我想知道我是否遗漏了什么,或者我看到的大多数示例是否过于复杂到疯狂的程度。

【问题讨论】:

    标签: jsf text jsf-2


    【解决方案1】:

    如果您使用 JSF 2.x 和 Facelets 2.x 而不是 JSP,那么两者同样有效。更重要的是,Facelets 隐式地将内联内容包装在由 &lt;h:outputText&gt; 表示的组件中(换句话说,它被转义!

    仅当您想使用escape="false" 禁用转义,或者想以编程方式分配idstyleonclick 等,或者想使用转换器(通过@987654327 显式@ 或通过forClass 隐含),那么你需要&lt;h:outputText&gt;

    我自己不会在不必要的时候使用&lt;h:outputText&gt;。没有它,源代码变得更好的可读性。你可以像#{bean.text}那样在模板文本中内联EL,而不是&lt;h:outputText value="#{bean.text}"&gt;。在 JSF 2.0 之前,在 JSP 和 Facelets 1.x 中,这是不可能的,因此 &lt;h:outputText&gt; 是强制性的。如果您的 IDE 对此给出警告,则很可能是 JSF 1.x 已配置/有意识。

    【讨论】:

    • 这些都是好消息!不知道。 JSF 的另一点。谢谢 BalusC!
    • 谢谢巴鲁斯。我一直在删除该标签并且应用程序没有失败,所以我必须使用 facelets2(因为我没有使用 JSP)。感谢您的信息!
    • 不客气。请注意,Facelets 的另一个答案在技术上是不正确的。
    • @balusc 像这样的完整(甚至部分)约定列表对于使代码在大型团队中易于管理非常有用......你碰巧知道一个吗?除非必要,否则我也喜欢完全删除所有 outputText。这样干净多了。
    • @Lucas:抱歉,我没有想到这样的公开名单。您必须与 JSF 负责人/架构师合作管理您自己的。顺便说一句,您可能会在本文中找到一些对您的项目有用的“最佳实践”或“隐藏功能”:balusc.blogspot.com/2011/09/communication-in-jsf-20.html 那里还提到了隐式输出文本。
    【解决方案2】:

    您引用的示例是用 XHTML(即 XML)编写的。在您要放入的位置可能不允许独立的“传输”,因此您需要将其“转换”为有效的 xml。

    IIrc 这就是所谓的 facelets 和 JSF2 中的默认设置,而在 JSF1 中,表示代码可以使用 JSP 标记作为默认设置,而 facelets 是许多开发人员正在使用的替代方案。

    【讨论】:

    • 天哪,你是对的。很抱歉这个额外的问题,但你知道是否有其他选择吗?也许用 groovy 编写模板?只是额外的复杂性令人惊讶。
    【解决方案3】:

    h:outputText 标记仅在您基于某些渲染条件渲染文本时才需要。 例如:。 如果是简单的输出语句,则不需要使用标签;你可以只使用:运输

    【讨论】:

      猜你喜欢
      • 2018-12-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-25
      • 2021-04-14
      • 1970-01-01
      • 1970-01-01
      • 2017-04-11
      相关资源
      最近更新 更多