2

基于此片段(http://openntf.org/XSnippets.nsf/snippet.xsp?id=oneui-on-the-fly-theme-changer),我尝试根据 Domino 的版本计算主题。我想在 Domino<9 上使用“oneuiv2.1”,在 9 版本上使用“oneuiv3.0.2”。

编辑:要明确:我已经可以识别版本,问题是关于在正确的时间计算和设置主题,因为我的以下方法似乎做得太晚了。页面呈现,然后设置主题 - 但这是我的印象。

这些是我的第一个方法:

  1. 在主题的“扩展”属性中计算主题名称 - 不起作用。
  2. 在我的 Xpage 的 beforeRenderResponse 和 beforePageLoad 事件中计算并设置会话属性“xsp.theme”的值 - 这也失败了
  3. 设置一个 bean 来计算值并在 bean 初始化时设置会话属性 - 结果相同

当然,您可以在主题文件中计算(渲染)OneUIv2.1 和 OneUIv3 的所有需要​​的样式表和脚本,但是嘿,这么多资源很麻烦,不是吗?

所以我的问题是:您还有其他想法如何实现这一目标吗?如果您的应用程序可以使用具有相同布局的两个主题,这将非常方便使用,独立于应用程序运行的位置 - 无论是在 8.5.x 还是 9 机器上。

期待讨论:-)

4

2 回答 2

3

您可以更改beforePageLoad活动主题:

<xp:view xmlns:xp="http://www.ibm.com/xsp/core"
    beforePageLoad='#{javascript:
        var theme = session.getNotesVersion().startsWith("Release 8") ? "oneuiv2.1" : "oneuiv3.0.2";
        if ( ! theme.equals(context.getSessionProperty("xsp.theme"))) {
            context.setSessionProperty("xsp.theme", theme);
            context.redirectToPage(context.getUrl().toSiteRelativeString(context));
        }
    }'>

诀窍是设置会话属性“xsp.theme”在必须更改主题重定向到同一页面。

redirectToPage()每个会话只会发生一次,因为 Notes 版本在会话期间不会更改。

于 2013-06-29T19:01:11.343 回答
0

如果您使用扩展库,您可以这样做来查找 Domino 的版本:

@Left(com.ibm.xsp.extlib.util.ExtLibUtil.getExtLibVersion(), 3) == "8.5")
于 2013-06-29T11:51:36.673 回答