基于此片段(http://openntf.org/XSnippets.nsf/snippet.xsp?id=oneui-on-the-fly-theme-changer),我尝试根据Domino的版本计算主题。我想使用" oneuiv2.1"在Domino< 9和" oneuiv3.0.2"在9发布。
编辑:要明确:我已经可以识别版本,问题是关于在正确的时间计算和设置主题,因为我的以下方法似乎太迟了。页面渲染然后设置主题 - 但这是我的印象。
这是我的第一个方法:
原因你可以在主题文件中计算(渲染)OneUIv2.1和OneUIv3所需的所有样式表和脚本,但是嘿,这对于那些资源是非常麻烦的,不是吗?
所以我的问题是:你有任何其他想法如何实现这一目标吗?如果您的应用程序可以使用具有相同布局的两个主题,则可以非常方便地使用,无论应用程序运行在哪里 - 无论是在8.5.x还是9机器上。
期待讨论: - )
答案 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")