Xpages 设置一个主题相关的css源,覆盖所有其他源

Xpages 设置一个主题相关的css源,覆盖所有其他源,xpages,Xpages,我的设想如下: 我有一个XPages应用程序,我在其中添加了两个主题——称它们为“红色”和“蓝色”。相同的模板部署在两个不同的服务器上,“红色”和“蓝色”服务器。自定义控件中已经定义了一些css定义,我想在自定义控件中添加最后一个(覆盖定义): <xp:styleSheet href="/custom.css"></xp:styleSheet> <xp:styleSheet href="/bootstrap.min.css"></xp:s

我的设想如下:

我有一个XPages应用程序,我在其中添加了两个主题——称它们为“红色”和“蓝色”。相同的模板部署在两个不同的服务器上,“红色”和“蓝色”服务器。自定义控件中已经定义了一些css定义,我想在自定义控件中添加最后一个(覆盖定义):

    <xp:styleSheet href="/custom.css"></xp:styleSheet>
    <xp:styleSheet href="/bootstrap.min.css"></xp:styleSheet>
    <xp:styleSheet href="/docs.css"></xp:styleSheet>
    <xp:styleSheet href="TRYING TO GET VALUE FROM THEME "   ></xp:styleSheet>

我已将以下控件添加到这两个主题中:

<control>
    <name>ThemeSpecificCss</name>
    <property>
        <name>value</name>
        <value>red.css</value>
    </property>
</control>

特殊CSS
价值
red.css
我想做的是

<xp:styleSheet themeId="ThemeSpecificCSS"></xp:styleSheet>

但这不起作用

我没有像这样将css文件作为资源包括在内:

    <resource> <content-type>text/css</content-type>
    <href>mystylesheet.css</href> </resource>
text/css
mystylesheet.css
因为自定义控件CSSE会覆盖它


我是否遗漏了一些明显的内容?

要回答您的问题,您可以使用SSJS:

var themeName = context.getSessionProperty("xsp.theme");
或使用Java:

FacesContext facesContext = FacesContext.getCurrentInstance();
XSPContext context = (XSPContext) facesContext.getApplication().getVariableResolver().resolveVariable(facesContext, "context");
String themeName = context.getSessionProperty("xsp.theme");
这将为您提供主题的名称。然而,你可能想重新思考你的主题结构。您可以在主题中定义特定于主题的css资源。这将允许您根据选择的主题拥有不同的css文件。因为主题可以从其他主题继承,所以您应该能够构建一个能够实现您的目标的依赖关系结构。例如:

  • baseTheme(包含所有主题所需的css和属性)
  • 红色主题(扩展基本主题)
  • 红色主题(扩展红色主题)
  • 蓝色主题(扩展基本主题)
  • 蓝色主题(扩展蓝色主题)

关于主题继承的一个很好的例子,请看《寻找灵感》。

Keith,这真的很酷。我遇到的问题是,主题css文件在Xpage上的css文件加载之前就被加载了,因此被覆盖了。这就是为什么你应该将它们全部添加到一个主题中。如果您需要为特定元素设置样式,那么我将通过样式块()而不是资源分配来实现。这是天才,应该想到这一点。只需将所有的造型融入主题即可。明亮的非常优雅地解决了我的问题。干杯!