在纯 HTML 属性中使用 JSF EL [英] Using JSF EL in a plain HTML attribute

查看:23
本文介绍了在纯 HTML 属性中使用 JSF EL的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

Can we use JSF EL inside a HTML tag? For example, inside a plain HTML <td> element, can we use EL #{bean.color} for the bgcolor attribute?

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

推荐答案

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

The answer depends on the JSF version and the view technology used. The technical term you're looking for is "using EL in template text" (i.e. not inside any tag/component).

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

As per your question history you're using JSF 1.2 on Websphere. I assume that you're still using old JSP, the predecesor of Facelets. Whether JSF EL #{} works in template text depends on the JSP version used. JSP version goes hand in hand with Servlet version.

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

When your container supports Servlet 2.5 and the web.xml is declared conform Servlet 2.5, then you're using JSP 2.1. In that case, you can just use #{bean} in JSP. The JSF EL #{} was namely moved from JSF 1.1 to JSP 2.1 under the name "unified EL".

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

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

However, when your container supports at most Servlet 2.4, then you're basically using JSP 2.0 and you have to use ${bean} instead.

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

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

This has only one prerequirement: in the same document, somewhere before the above line where you reference the JSF bean by ${bean}, you need to ensure that you've already referenced the very same bean by #{bean} in a JSF tag beforehand, otherwise the bean won't be precreated.

当您使用 JSP 的继任者 Facelets 时,甚至虽然在 Servlet 2.4 环境中,但您可以使用

When you're using the JSP's successor Facelets, even though in a Servlet 2.4 environment, then you can just use

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

另见:

  • JSP EL、JSF EL 和 Unified EL 的区别 - 一点 EL 的历史
  • 是否建议对所有内容都使用 h:outputText?
  • PWC6228: #{...} 不允许在模板正文
  • See also:

    • Difference between JSP EL, JSF EL and Unified EL - A bit of history of EL
    • Is it suggested to use h:outputText for everything?
    • PWC6228: #{...} not allowed in a template text body
    • 与问题无关bgcolor 属性在 HTML 中已弃用.您应该改用 CSS style 属性.

      Unrelated to the problem, the bgcolor attribute is deprecated in HTML. You should be using CSS style attribute instead.

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

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

      Even then, the above is considered poor practice. Put CSS in a .css stylesheet file which you include via <link>/<h:outputStylesheet> and use sensible classnames (e.g. .odd, .even, .success, .cancelled, etc) and render a CSS style class instead. For example, if the color depends on some status:

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

      这篇关于在纯 HTML 属性中使用 JSF EL的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆