問題描述
我們可以在 HTML 標(biāo)簽中使用 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 版本和使用的視圖技術(shù).您正在尋找的技術(shù)術(shù)語是在模板文本中使用 EL"(即不在任何標(biāo)簽/組件內(nèi)).
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).
根據(jù)您的問題歷史記錄,您在 Websphere 上使用 JSF 1.2.我假設(shè)您仍在使用舊的 JSP,它是 Facelets 的前身.JSF EL #{}
是否適用于模板文本取決于所使用的 JSP 版本.JSP 版本與 Servlet 版本齊頭并進(jìn).
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.
當(dāng)您的容器支持 Servlet 2.5 并且 web.xml
被聲明為符合 Servlet 2.5 時(shí),那么您使用的是 JSP 2.1.在這種情況下,您可以在 JSP 中使用 #{bean}
.JSF EL #{}
即以統(tǒng)一 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}">
但是,當(dāng)您的容器最多支持 Servlet 2.4 時(shí),您基本上使用的是 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}">
這只有一個(gè)前提條件:在同一個(gè)文檔中,在上面的某處通過 ${bean}
引用 JSF bean 的行,你需要確保您已經(jīng)已經(jīng)在 JSF 標(biāo)記中事先通過 #{bean}
引用了同一個(gè) bean,否則不會(huì)預(yù)先創(chuàng)建 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.
當(dāng)您使用 JSP 的繼任者 Facelets 時(shí),甚至雖然在 Servlet 2.4 環(huán)境中,但您可以使用
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 的區(qū)別 - 一點(diǎn) EL 的歷史
- 是否建議對(duì)所有內(nèi)容都使用 h:outputText?一個(gè)>
- PWC6228: #{...} 不允許在模板正文
- 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
See also:
與問題無關(guān),bgcolor
屬性在 HTML 中已棄用.您應(yīng)該改用 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}">
即便如此,上述做法仍被認(rèn)為是糟糕的做法.將 CSS 放入您通過 <link>
/<h:outputStylesheet>
包含的 .css
樣式表文件中,并使用合理的類名(例如.odd
、.even
、.success
、.cancelled
等)并改為渲染 CSS 樣式類.例如,如果顏色取決于某些狀態(tài):
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}">
這篇關(guān)于在純 HTML 屬性中使用 JSF EL的文章就介紹到這了,希望我們推薦的答案對(duì)大家有所幫助,也希望大家多多支持html5模板網(wǎng)!