JSF h:outputStylesheet转换器 - 动态CSS?

5
我刚注意到<h:outputStylesheet/>有一个转换器属性。在将一个虚拟(传递)转换器附加到它之后,什么都没有发生。经过仔细检查,似乎即使点击浏览器刷新按钮,转换器也没有被调用。

这个属性有什么作用吗?它只是因为各种设计决策的副作用而存在吗?

我问这个问题的原因是,希望能够通过less或类似的方式执行一些客户端或服务器端的CSS处理,而我认为这个属性可能会有所帮助。

1个回答

12

这个属性有什么用吗?它只是由于各种设计决策的副作用而存在吗?

确实是“按设计要求”的,因为该组件扩展了UIOutput。它确实没有使用转换器。


我问的原因是,使用类似less或类似的客户端或服务器端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。


感谢@BalusC。我正在考虑使用less选项,因为我不太喜欢将变量(例如尺寸)与CSS分离。(在less期望在脚本之前插入CSS方面存在一些令人讨厌的问题。)但是,您提供的主题想法提供了更有结构和可接受的方法。服务器性能不是问题,因为JSF已经解析了CSS。EL的另一个优点是我可以继续享受NetBeans的CSS语法突出显示和自动完成功能。 - Steve
看起来这个策略行不通。即使使用 JRebel,其所谓的“CDI更改”支持也仅限于对现有bean中现有方法体的更改,几乎每次更改都需要重新部署。如果您有任何解决此问题的建议,我全听着呢。 - Steve
重新部署是为了哪个更改?你是指CSS文件吗?即使在浏览器中按Ctrl+F5也没有帮助吗?尝试升级到最新的JRebel。如果无效,请在Zeroturnaround.com论坛上发布。他们的支持非常出色。 - BalusC
重新部署以更改Bean。 JRebel的CDI支持-至少在GlassFish中-非常有限。新的bean不会被检测到;我可以接受这一点。新方法也没有被检测到,这很痛苦。每次我想在“theme” bean中定义一个新属性,我都需要重新部署才能使用它。不幸的是,当涉及到GlassFish时,JRebel的支持并不那么出色。这个问题在6个月前就提出了,但从未得到解决。你会认为作为参考实现的GlassFish会享有最好的支持而不是最差的。 - Steve
处理Zeroturnaround并取得进展。现在我不需要再添加任何评论了。 - Steve
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接