我正在寻找一种在一个XPage应用程序中使用多个主题的方法,每个主题都在应用程序的不同部分中激活。例如,支持单个.nsf应用程序,同时具有面向公众的网站(自定义主题)和具有OneUI主题的CMS。
您可以在“应用程序属性”的“XPage属性”选项卡上设置整个应用程序使用的主题。也可以使用以下代码更改用户会话的主题:
context.setSessionProperty("xsp.theme", <theme_id>)
但是两个选项都为当前.nsf中的所有页面设置了主题,我正在寻找一种方法来为应用程序的一部分指定主题X,为第二部分指定主题Y 。
这可能吗?
答案 0 :(得分:3)
在任何应使用备用主题的页面上,使用以下语法将属性直接应用于视图根目录:
<xp:view>
<xp:this.properties>
<xp:parameter name="xsp.theme" value="alternateThemeName" />
</xp:this.properties>
</xp:view>
答案 1 :(得分:3)
我尝试了以上所有内容,但它们都没有为我工作。但我找到了解决方案:
将其粘贴到视图的beforeRenderResponse事件中:
context.setSessionProperty("xsp.theme", "yourAlternateThemeName")
有一个问题:一旦你使用了这种方式,你必须始终在每个页面上使用它,因为这会设置一个会话属性,只要你登录就会存储它。
答案 2 :(得分:1)
刚刚与同事Tony Mcguckin谈过。
您可以更改每页主题。在XPage的所有属性下选择数据属性并创建名为“xsp.theme”且值为“yourThemeName”的新属性。
答案 3 :(得分:1)
虽然我喜欢根据您描述的特定用例来设置特定于页面的主题,但“正确”的方法是将两个单独的XPage应用程序绑定到同一个后端数据存储。这不仅简化了为每个主题指定不同的主题,还简化了ACL(假设您将有不同的人访问公共站点而不是CMS),通过为每个应用程序设置不同的设置,可以更轻松地调整性能,即使没有特定于应用程序的设置,也应该仅仅因为Java类加载器行为而略微提高性能:每个NSF充当不同的ClassLoader,并且NSF中的每个XPage或自定义控件都会导致存储单独的类文件。因此,理论上,如果您的公共站点的功能要求您创建5个XPage并且CMS功能跨越10个XPage,只需将这些功能拆分为两个单独的应用程序,便可让类加载器更轻松地检索用户加载的任何页面的类,因为它不必忽略该用户永远不需要的类,只是为了找到它当时需要的一个类。所以我仍然想找到一种方法来获取特定于页面的主题仅仅是为了它的“酷”因素,但为了这个特定的目的,我建议完全使用两个不同的应用程序,每个应用程序分配不同的主题
答案 4 :(得分:0)
我不太了解主题,但你不能检查你的主题(有一些ssjs)在哪个viewroot(由id?)你是,并根据包括正确的样式,CSS和其他资源?