根据已安装的Domino版本使用OneUI主题

时间:2013-06-29 10:38:25

标签: themes xpages

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

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

这是我的第一个方法:

  1. 计算" extends"中的主题名称。主题的属性 - 没有工作。
  2. 计算并设置会话属性的值" xsp.theme"在我的Xpage的beforeRenderResponse和beforePageLoad事件中 - 这也失败了
  3. 设置bean来计算值并在初始化bean时设置会话属性 - 结果相同
  4. 原因你可以在主题文件中计算(渲染)OneUIv2.1和OneUIv3所需的所有样式表和脚本,但是嘿,这对于那些资源是非常麻烦的,不是吗?

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

    期待讨论: - )

2 个答案:

答案 0 :(得分: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版本在会话期间不会更改。

答案 1 :(得分:0)

如果使用扩展库,则可以执行此操作以查找Domino的版本:

@Left(com.ibm.xsp.extlib.util.ExtLibUtil.getExtLibVersion(), 3) == "8.5")