問題描述
我們可以在 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: #{...} 不允許在模板正文
- 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:
與問題無關,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的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,也希望大家多多支持html5模板網!