基于此片段( http://openntf.org/XSnippets.nsf/snippet.xsp?id=oneui-on-the-fly-theme-changer ),我尝试根据 Domino 的版本来计算主题。我想在 Domino<9 上使用“oneuiv2.1”,在 9 版本上使用“oneuiv3.0.2”。
编辑:要明确的是:我已经可以识别版本,问题是在正确的时间计算和设置主题,因为我的以下方法似乎做得太晚了。页面呈现,然后主题被设置 - 但这是我的印象。
这些是我的第一个方法:
- 在主题的“extends”属性中计算主题名称 - 不起作用。
- 在我的 Xpage 的 beforeRenderResponse 和 beforePageLoad 事件中计算并设置 session 属性“xsp.theme”的值 - 这也失败了
- 设置一个 bean 来计算值并在初始化 bean 时设置 session 属性 - 相同的结果
当然,您可以在主题文件中计算(渲染)OneUIv2.1 和 OneUIv3 所需的所有样式表和脚本,但是,嘿,对于这么多资源来说,这是相当麻烦的,不是吗?
所以我的问题是:您还有其他想法如何实现这一目标吗?如果您的应用程序可以使用具有相同布局的两个主题,并且独立于应用程序运行的位置(无论是在 8.5.x 还是 9 计算机上),那么这将非常方便使用。
期待讨论:-)
最佳答案
您可以在 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));
}
}'>
诀窍是设置 session 属性“xsp.theme”并且重定向到同一页面如果主题必须更改。
redirectToPage()
每个 session 仅发生一次,因为 Notes 版本在 session 期间不会更改。
关于themes - 根据安装的 Domino 版本使用 OneUI 主题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17379316/