2013-06-29 35 views
2

基於此片段(http://openntf.org/XSnippets.nsf/snippet.xsp?id=oneui-on-the-fly-theme-changer),我嘗試根據Domino的版本計算主題。我想在Domino9上使用「oneuiv2.1」,在9版本上使用「oneuiv3.0.2」。根據所安裝的Domino版本使用OneUI主題

編輯:要清楚:我已經可以確定版本,問題是關於在正確的時間計算和設置主題,因爲我的以下方法看起來太遲了。頁面渲染,然後設置主題 - 但這是我的印象。

這是我的第一個方法:

  1. 在「擴展」爲主題的財產計算主題名稱 - 沒有工作。
  2. 在我的Xpage的beforeRenderResponse和beforePageLoad事件中計算並設置會話屬性「xsp.theme」的值 - 這也失敗了
  3. 設置一個bean來計算值並在bean被設置時設置session屬性初始化 - 同樣的結果

原因,你可以計算(渲染)所有需要的樣式表,並在主題文件OneUIv2.1和OneUIv3的腳本,但嘿,這是資源的量,」不是個很麻煩它呢?

所以我的問題是:你有任何其他想法如何實現這一目標?如果您的應用程序可以使用相同佈局的兩個主題,並且獨立於應用程序的運行位置(無論是在8.5.x還是9機器上),這將非常方便。

期待:-)

+1

我成功了context.setSessionProperty(「xsp.theme」,theme);方法,但只有當我使用context.redirectToPage(<計算當前頁面在這裏>)設置之後再次將用戶重定向到同一頁面; –

+0

就是這樣Mark!謝謝! –

回答

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版本在會話期間不會更改。

+0

就是這樣!正如Mark寫道:重定向可以做到這一點!感謝您提供代碼! –

+1

我修改了'context.redirectToPage'的參數。現在它也可以在URL中使用參數。 - 對不起,在發佈回覆時沒有看到Mark的評論。 –

0

討論如果使用擴展庫,你可以做到這一點,尋找版本的Domino:

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

謝謝Per,但這不是我的問題來識別版本。我使用session.getNotesVersion()。indexOf(「9」)來檢查是否9 ;-) –

+0

啊,是的,我誤解了你的問題。我以爲得到的版本是問題:-) –

相關問題