【发布时间】:2012-02-03 05:48:33
【问题描述】:
我刚刚注意到<h:outputStylesheet/> 有一个转换器属性。在将虚拟(直通)转换器连接到它之后,什么也没发生。仔细观察,尽管点击了浏览器刷新按钮,但似乎甚至没有调用转换器。
这个属性有什么用吗?它只是各种设计决策的副作用吗?
我问的原因是,使用 less 或类似的方法执行一些客户端或服务器端 css 处理会很好,我认为这个属性可能会有所帮助。
【问题讨论】:
我刚刚注意到<h:outputStylesheet/> 有一个转换器属性。在将虚拟(直通)转换器连接到它之后,什么也没发生。仔细观察,尽管点击了浏览器刷新按钮,但似乎甚至没有调用转换器。
这个属性有什么用吗?它只是各种设计决策的副作用吗?
我问的原因是,使用 less 或类似的方法执行一些客户端或服务器端 css 处理会很好,我认为这个属性可能会有所帮助。
【问题讨论】:
这个属性有什么用吗?它只是各种设计决策的副作用吗?
这确实是“设计使然”,因为该组件扩展了 UIOutput。它确实没有将转换器用于任何事情。
我问的原因是,如果执行一些客户端或服务器端的 css 处理会更好,我认为这个属性可能会有所帮助。
您可以在<h:outputStylesheet> 加载的 CSS 资源中按照通常的方式使用 EL。这最初是为了正确解析背景图像资源而实现的。
.some {
background-image: url(#{resource[images/some.png]});
}
上面的例子假设图片在/resources/images/some.png。如果您使用的是库,则需要在资源名称前加上 libraryname:。
.some {
background-image: url(#{resource[somelibrary:images/some.png]});
}
假设图像位于/resources/somelibrary/images/some.png。
但除此之外,您基本上可以将 CSS 资源中的 EL 用于其他任何事情。例如。动态解析颜色、字体等。
.some {
color: #{theme.color};
font: #{theme.font};
}
#{theme} 可以是会话,也可以是应用程序范围的托管 bean。
【讨论】:
theme bean 中定义一个新属性时,我都需要重新部署来获取它。不幸的是,对于 GlassFish,JRebel 的支持并不是那么出色。这个问题是在 6 个多月前提出的,但没有任何结果。您会认为作为参考实现的 GlassFish 将获得最好的支持而不是最差的支持。