【问题标题】:Using JSF EL in a plain HTML attribute在纯 HTML 属性中使用 JSF EL
【发布时间】:2011-09-11 02:48:09
【问题描述】:

我们可以在 HTML 标签中使用 JSF EL 吗?例如,在纯 HTML <td> 元素中,我们可以将 EL #{bean.color} 用于 bgcolor 属性吗?

<td bgcolor="#{bean.color}">

【问题讨论】:

    标签: html jsf attributes el managed-bean


    【解决方案1】:

    答案取决于 JSF 版本和使用的视图技术。您正在寻找的技术术语是“在模板文本中使用 EL”(即不在任何标签/组件内)。

    根据您的问题历史记录,您在 Websphere 上使用 JSF 1.2。我假设您仍在使用旧的 JSP,它是 Facelets 的前身。 JSF EL #{} 是否在模板文本中工作取决于所使用的 JSP 版本。 JSP 版本与 Servlet 版本齐头并进。

    当您的容器支持 Servlet 2.5 并且声明 web.xml 符合 Servlet 2.5 时,那么您使用的是 JSP 2.1。在这种情况下,您可以在 JSP 中使用 #{bean}。 JSF EL #{} 即从 JSF 1.1 移至 JSP 2.1,名称为“统一 EL”。

    <td bgcolor="#{bean.color}">
    

    但是,当您的容器最多支持 Servlet 2.4 时,您基本上使用的是 JSP 2.0,而您必须改用 ${bean}

    <td bgcolor="${bean.color}">
    

    这只有一个先决条件:在同一个文档中,上述行中您通过${bean} 引用 JSF bean 的某处,您需要确保您已经 事先在 JSF 标记中通过 #{bean} 引用了相同的 bean,否则不会预先创建 bean。

    当你使用 JSP 的后继者Facelets 时,即使在 Servlet 2.4 环境中,你也可以使用

    <td bgcolor="#{bean.color}">
    

    另见:


    与问题无关bgcolor 属性在 HTML 中已弃用。您应该改用 CSS style 属性。

    <td style="background: #{bean.color}">
    

    即便如此,上述做法仍被认为是糟糕的做法。将 CSS 放入您通过 &lt;link&gt;/&lt;h:outputStylesheet&gt; 包含的 .css 样式表文件中并使用合理的类名(例如 .odd.even.success.cancelled 等)并呈现 CSS 样式类反而。例如,如果颜色取决于某些状态:

    <td class="#{bean.status}">
    

    【讨论】:

    • 不客气。在以后的问题中,请注意您提及使用的确切 JSF impl/version(例如“Mojarra 1.2_15”)和使用的视图技术(例如 JSP 或 Facelets),最好还提及使用的 servletcontainer make/version。
    【解决方案2】:

    您可以在 facelets 中将 el 与 html 集成。

    示例:

       <td style="background: #{bean.color};"><br /></td> 
    

    示例 2:

    <script type="text/javascript">
        window.location = '#{bean.url}';
    </script>
    

    【讨论】:

    • 根据问题历史,OP 似乎在旧版 JSP 上使用 JSF 1.2。
    • 是的。 Cosmin 的回答更完整,会得到我的投票。我更新得更清楚了。
    • 其实能不能用得看JSP版本。看我的回答。
    【解决方案3】:

    这取决于。如果您使用 Facelets 作为 ViewHandler,是的。如果您使用 JSP,HTML 必须在 &lt;f:verbatim&gt; 标记中。

    【讨论】:

    • 仅在 JSF 1.0/1.1 中需要将 HTML 放入 &lt;f:verbatim&gt;。在 JSF 1.2 中,这不再是必需的了。根据问题历史,OP 使用的是 JSF 1.2。
    • 呃,凭经验 :) 不开玩笑,视图处理程序在 JSF 1.2 中已更改。更重要的是,该标签在 JSF 2.0 中已被弃用。您可能会发现这是一篇有趣的文章:stackoverflow.com/questions/3623911/…
    猜你喜欢
    • 2015-02-15
    • 1970-01-01
    • 2012-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-06
    • 2013-08-23
    相关资源
    最近更新 更多