2016-07-06 15 views
1

我的菜單是由數據結構驅動的,我想將其作爲文件存儲在我的數據庫的資源中。但是,似乎我無法將多行字符串存儲(或不知道如何存儲)爲文件資源。Xpages:如何將字符串作爲資源包存儲在文件中

我的字符串像這樣:

[ 
{ 
    "mnuNme": "by Author", 
    "mnuTyp": "1", 
    "mnuTrg": "xpNavigator3" 
    }, 
    { 
    "mnuNme": "by Location", 
    "mnuTyp": "1", 
    "mnuTrg": "xpView02" 
    } 
] 

有什麼辦法來存儲這是一個性質。

回答

2

您正在尋找存儲和維護一個菜單JSON數據的地方。

您可以使用服務器端JavaScript庫來實現此目的。
將您的菜單定義分配給一個變量。 這樣你就可以得到一個語法控制,你不需要解析JSON字符串,因爲它已經是一個JavaScript數組/對象。

例子:

服務器端JavaScript庫 「menu.jss」:

var menu = [ 
      { 
       "mnuNme": "by Author", 
       "mnuTyp": "1", 
       "mnuTrg": "xpNavigator3" 
      }, 
      { 
       "mnuNme": "by Location", 
       "mnuTyp": "1", 
       "mnuTrg": "xpView02" 
      } 
      ]; 

的XPage

<?xml version="1.0" encoding="UTF-8"?> 
<xp:view xmlns:xp="http://www.ibm.com/xsp/core"> 
    <xp:this.resources> 
     <xp:script 
      src="/menu" 
      clientSide="false"> 
     </xp:script> 
    </xp:this.resources> 
    <xp:repeat 
     id="repeat1" 
     rows="0" 
     var="entry" 
     value="#{javascript:menu}"> 
     <xp:text 
      escape="true" 
      id="computedField1" 
      value="#{entry.mnuNme}"> 
     </xp:text> 
     <br /> 
    </xp:repeat> 
</xp:view> 
+0

這完美地工作! –

+0

對此有一點小心 - 你正在使用一個全局變量 - 取決於你的持久化設置/服務器性能/等 - 在某些時候,這個全局變量可能變得未定義,因爲垃圾收集/和/或如果頁面被寫入磁盤持久性。全球性的JavaScript服務器端變量應該被認爲是一個no-no。例如,你可以創建一個名爲menu()的函數來返回字符串的內容,然後在你的值中調用menu()(即value =「#{javascript:return menu( );}「並且它會比較安全。 –

1

爲什麼它必須是多行的?看起來你正在嘗試存儲JSON - 縮小它,並存儲爲一行。將可編輯版本保留在其他位置作爲您的主服務器,並在您要部署時重新縮小。

但是,如果你真的想這樣做,我認爲正確的語法是:

menuStructure=[ \ 
{ \ 
    "mnuNme": "by Author",\ 
    "mnuTyp": "1",\ 
    "mnuTrg": "xpNavigator3"\ 
    },\ 
    {\ 
    "mnuNme": "by Location",\ 
    "mnuTyp": "1",\ 
    "mnuTrg": "xpView02"\ 
    }\ 
] 
相關問題