在纯HTML属性中使用JSF EL

gre*_*reg 5 html jsf attributes el managed-bean

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

<td bgcolor="#{bean.color}">
Run Code Online (Sandbox Code Playgroud)

Bal*_*usC 6

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

根据你的问题历史,你在Websphere上使用JSF 1.2.我假设您仍在使用旧的JSP,它是Facelets的前身.JSF EL是否#{}在模板文本中工作取决于所使用的JSP版本.JSP版本与Servlet版本密切相关.

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

<td bgcolor="#{bean.color}">
Run Code Online (Sandbox Code Playgroud)

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

<td bgcolor="${bean.color}">
Run Code Online (Sandbox Code Playgroud)

这只有一种prerequirement:在同一文件中,地方,你通过引用JSF豆上面的线${bean},你需要确保你已经通过引用非常相同的bean #{bean}在JSF标签事前,否则豆赢得"是预先创造的.

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

<td bgcolor="#{bean.color}">
Run Code Online (Sandbox Code Playgroud)

也可以看看:


此问题无关,该bgcolor属性在HTML中已弃用.您应该使用CSS style属性.

<td style="background: #{bean.color}">
Run Code Online (Sandbox Code Playgroud)

即使这样,上述情况也被视为不良做法.将CSS放在一个.css你通过包括样式表文件<link>/ <h:outputStylesheet>和使用合理的类名(例如.odd,.even,.success,.cancelled,等)和渲染的CSS样式类来代替.例如,如果颜色取决于某些状态:

<td class="#{bean.status}">
Run Code Online (Sandbox Code Playgroud)