如何在 CSS 资源中获取 @ViewScoped bean 属性?
How to get @ViewScoped bean property in CSS resource?
我有一个 @ViewScoped
豆子:
@Named
@ViewScoped
public class testBean implements Serializable {
private static final long serialVersionUID = 1L;
private String color;
@PostConstruct
public void postConstruct() {
color = "red";
}
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
}
在我的 JSF 页面中,我可以通过 #{testBean.color}
访问 属性 颜色,但在我的 CSS 资源中它不起作用。
html, body {
height: 100%;
width: 100%;
margin: 0;
padding: 0;
border: 0;
background-color: #{testBean.color};
}
它抛出以下异常:
org.jboss.weld.context.ContextNotActiveException: WELD-001303: No active contexts for scope type javax.faces.view.ViewScoped
at org.jboss.weld.manager.BeanManagerImpl.getContext(BeanManagerImpl.java:680) [weld-core-impl-2.1.2.Final.jar:2014-01-09 09:23]
at org.jboss.weld.bean.proxy.ContextBeanInstance.getInstance(ContextBeanInstance.java:79) [weld-core-impl-2.1.2.Final.jar:2014-01-09 09:23]
at org.jboss.weld.bean.proxy.ProxyMethodHandler.invoke(ProxyMethodHandler.java:78) [weld-core-impl-2.1.2.Final.jar:2014-01-09 09:23]
at com.unifik.core.subdomain.admin.WidgetLoginBean$Proxy$_$$_WeldClientProxy.getWidgetLogin(Unknown Source) [classes:]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) [rt.jar:1.7.0_67]
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) [rt.jar:1.7.0_67]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) [rt.jar:1.7.0_67]
at java.lang.reflect.Method.invoke(Method.java:606) [rt.jar:1.7.0_67]
at javax.el.BeanELResolver.getValue(BeanELResolver.java:363) [jboss-el-api_3.0_spec-1.0.3.Final.jar:1.0.3.Final]
... 46 more
如果我将 @ViewScoped
更改为 @SessionScoped
,那么它会起作用,但我不希望这样。
bean 不能为此查看范围。在检查检索到的 HTML 页面后指示下载 CSS 文件时,在由网络浏览器发起的完全独立的 GET 请求期间请求 CSS 文件。 CSS 文件的这个特定请求对 JSF 视图状态一无所知,因此任何引用 JSF 视图范围 bean 的 EL 表达式将无法找到所需的 bean,因为在任何地方都无法找到 JSF 视图状态在处理 CSS 文件的请求期间。
选择另一个 bean 作用域,或者将其内联到 HTML 页面的 <style>
元素中。请求、会话或应用程序作用域的 bean 应该可以工作。另见 How to choose the right bean scope?
我在我的 CSS 文件中做了这个并且正在工作:
.color {color: #{initParam['icons_color']} !important;}
a.color {color: #{initParam['icons_color']} !important;}
a.color:hover, a.color:focus {color: #1faabe;}
.bg-color {
background-color: #{initParam['icons_color']} !important;
}
如果会话或类似内容需要,您可以使用上下文参数。
为此,必须使用标签 h:outputStylesheet 将 CSS 放在页面中,例如:
<h:outputStylesheet library="css" name="my.css">
我试过这样使用:
<link rel="stylesheet" type="text/css" href="settings.css" />
并且不起作用。
我有一个 @ViewScoped
豆子:
@Named
@ViewScoped
public class testBean implements Serializable {
private static final long serialVersionUID = 1L;
private String color;
@PostConstruct
public void postConstruct() {
color = "red";
}
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
}
在我的 JSF 页面中,我可以通过 #{testBean.color}
访问 属性 颜色,但在我的 CSS 资源中它不起作用。
html, body {
height: 100%;
width: 100%;
margin: 0;
padding: 0;
border: 0;
background-color: #{testBean.color};
}
它抛出以下异常:
org.jboss.weld.context.ContextNotActiveException: WELD-001303: No active contexts for scope type javax.faces.view.ViewScoped
at org.jboss.weld.manager.BeanManagerImpl.getContext(BeanManagerImpl.java:680) [weld-core-impl-2.1.2.Final.jar:2014-01-09 09:23]
at org.jboss.weld.bean.proxy.ContextBeanInstance.getInstance(ContextBeanInstance.java:79) [weld-core-impl-2.1.2.Final.jar:2014-01-09 09:23]
at org.jboss.weld.bean.proxy.ProxyMethodHandler.invoke(ProxyMethodHandler.java:78) [weld-core-impl-2.1.2.Final.jar:2014-01-09 09:23]
at com.unifik.core.subdomain.admin.WidgetLoginBean$Proxy$_$$_WeldClientProxy.getWidgetLogin(Unknown Source) [classes:]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) [rt.jar:1.7.0_67]
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) [rt.jar:1.7.0_67]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) [rt.jar:1.7.0_67]
at java.lang.reflect.Method.invoke(Method.java:606) [rt.jar:1.7.0_67]
at javax.el.BeanELResolver.getValue(BeanELResolver.java:363) [jboss-el-api_3.0_spec-1.0.3.Final.jar:1.0.3.Final]
... 46 more
如果我将 @ViewScoped
更改为 @SessionScoped
,那么它会起作用,但我不希望这样。
bean 不能为此查看范围。在检查检索到的 HTML 页面后指示下载 CSS 文件时,在由网络浏览器发起的完全独立的 GET 请求期间请求 CSS 文件。 CSS 文件的这个特定请求对 JSF 视图状态一无所知,因此任何引用 JSF 视图范围 bean 的 EL 表达式将无法找到所需的 bean,因为在任何地方都无法找到 JSF 视图状态在处理 CSS 文件的请求期间。
选择另一个 bean 作用域,或者将其内联到 HTML 页面的 <style>
元素中。请求、会话或应用程序作用域的 bean 应该可以工作。另见 How to choose the right bean scope?
我在我的 CSS 文件中做了这个并且正在工作:
.color {color: #{initParam['icons_color']} !important;}
a.color {color: #{initParam['icons_color']} !important;}
a.color:hover, a.color:focus {color: #1faabe;}
.bg-color {
background-color: #{initParam['icons_color']} !important;
}
如果会话或类似内容需要,您可以使用上下文参数。
为此,必须使用标签 h:outputStylesheet 将 CSS 放在页面中,例如:
<h:outputStylesheet library="css" name="my.css">
我试过这样使用:
<link rel="stylesheet" type="text/css" href="settings.css" />
并且不起作用。