【问题标题】:JSF h:outputStylesheet converter - dynamic css?JSF h:outputStylesheet 转换器 - 动态 css?
【发布时间】:2012-02-03 05:48:33
【问题描述】:

我刚刚注意到<h:outputStylesheet/> 有一个转换器属性。在将虚拟(直通)转换器连接到它之后,什么也没发生。仔细观察,尽管点击了浏览器刷新按钮,但似乎甚至没有调用转换器。

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

我问的原因是,使用 less 或类似的方法执行一些客户端或服务器端 css 处理会很好,我认为这个属性可能会有所帮助。

【问题讨论】:

    标签: java css jsf-2


    【解决方案1】:

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

    这确实是“设计使然”,因为该组件扩展了 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。

    【讨论】:

    • 感谢@BalusC。我正在寻求使用 less 的选项,因为我对从 CSS 中分离变量(例如尺寸)并不完全满意。 (关于不太期望在脚本之前插入 css 存在一些令人讨厌的问题。)但是,您对主题的想法提供了一种更有条理和可接受的方式来做到这一点。服务器端性能不是问题,因为 JSF 已经在解析 CSS。 EL 的另一个优点是我继续享受 NetBeans 的 CSS 语法高亮和自动完成功能。
    • 看起来这种策略是行不通的。几乎每次更改都需要重新部署,即使 JRebel 声称的“CDI 更改”支持仅限于对现有 bean 中现有方法主体的更改。如果您有任何解决此问题的建议,我会全力以赴。
    • 针对哪个变更重新部署?在 CSS 文件中,你的意思是?即使浏览器中的 Ctrl+F5 也无济于事?尝试升级到最新的 JRebel。如果无效,请在 Zeroturnaround.com 论坛发帖。他们的支持非常好。
    • 重新部署以进行 bean 更改。 JRebel 的 CDI 支持(至少在 GlassFish 中)非常少。未检测到新豆;我可以忍受这一点。也没有检测到新方法,这很痛苦。每次我想在theme bean 中定义一个新属性时,我都需要重新部署来获取它。不幸的是,对于 GlassFish,JRebel 的支持并不是那么出色。这个问题是在 6 个多月前提出的,但没有任何结果。您会认为作为参考实现的 GlassFish 将获得最好的支持而不是最差的支持。
    • 应对零周转并取得进展。我现在不需要在这里添加更多的 cmets。
    猜你喜欢
    • 2013-04-30
    • 2011-10-09
    • 2012-12-26
    • 1970-01-01
    • 2015-12-05
    • 1970-01-01
    • 2023-03-03
    • 2011-11-29
    • 2018-12-24
    相关资源
    最近更新 更多