3

我正在寻找一种在一个 XPages 应用程序中使用多个主题的方法,每个主题都在应用程序的不同部分中处于活动状态。例如,支持具有面向公众的网站(自定义主题)和具有 OneUI 主题的 CMS 的单个 .nsf 应用程序。

您可以在应用程序属性的 XPage 属性选项卡上设置整个应用程序使用的主题。也可以使用以下代码更改用户会话的主题:

context.setSessionProperty("xsp.theme", <theme_id>)

但是这两个选项都为当前 .nsf 中的所有页面设置了主题,我正在寻找一种方法来为应用程序的一部分指定主题 X,为第二部分指定主题 Y。

这可能吗?

4

5 回答 5

3

在任何应使用备用主题的页面上,使用以下语法将属性直接应用于视图根:

<xp:view>
<xp:this.properties>
<xp:parameter name="xsp.theme" value="alternateThemeName" />
</xp:this.properties>
</xp:view>
于 2012-02-20T20:18:06.527 回答
3

我尝试了以上所有方法,但没有一个对我有用。但我找到了解决方案:

将此粘贴到视图的 beforeRenderResponse 事件中:

context.setSessionProperty("xsp.theme", "yourAlternateThemeName")

有一个问题:一旦您使用了这种方式,您就必须始终在每个页面上使用它,因为这会设置一个会话属性,只要您登录就会存储该属性。

于 2013-05-02T15:24:33.833 回答
1

Just talked with colleague Tony Mcguckin.

You can change the theme per page. Under all properties of the XPage select data-properties and create a new property with name "xsp.theme" and value "yourThemeName".

于 2012-02-21T12:59:34.283 回答
1

虽然我喜欢拥有特定于页面的主题的想法,但根据您所描述的特定用例,“正确”的做法是将两个单独的 XPage 应用程序绑定到同一个后端数据存储。这不仅使为每个主题指定不同的主题变得简单,而且还简化了 ACL(假设您将有不同的人访问公共站点与 CMS),通过为每个应用程序设置不同的设置更容易调整性能,即使没有特定于应用程序的设置,也应该仅仅因为 Java 类加载器行为而稍微提高性能:每个 NSF 都充当不同的 ClassLoader,并且 NSF 中的每个 XPage 或自定义控件都会导致存储一个单独的类文件。所以,理论上,如果您的公共站点的功能需要您创建 5 个 XPage,而 CMS 功能跨越 10 个 XPage,只需将它们分成两个单独的应用程序,类加载器就可以更轻松地检索用户加载的任何页面的类,因为它没有不必忽略该用户永远不需要的类,只是为了找到它当时确实需要的一个类。所以我仍然很想找到一种方法来让特定于页面的主题只为它的“酷”因素工作,但出于这个特定目的,我建议完全使用两个不同的应用程序,每个应用程序分配一个不同的主题. 不必忽略该用户永远不需要的类,只是为了找到它当时确实需要的一个类。所以我仍然很想找到一种方法来让特定于页面的主题只为它的“酷”因素工作,但出于这个特定目的,我建议完全使用两个不同的应用程序,每个应用程序分配一个不同的主题. 不必忽略该用户永远不需要的类,只是为了找到它当时确实需要的一个类。所以我仍然很想找到一种方法来让特定于页面的主题只为它的“酷”因素工作,但出于这个特定目的,我建议完全使用两个不同的应用程序,每个应用程序分配一个不同的主题.

于 2012-02-22T18:29:22.317 回答
0

我对主题不太了解,但是您不能在哪个视图根目录(通过 id?)检查您的主题(带有一些 ssjs),并据此包括正确的样式、css 和其他资源?

于 2012-02-21T02:28:30.583 回答