2016-07-06 13 views
1

Mein Menü wird von einer Datenstruktur gesteuert, die ich als eine Datei in den Ressourcen meiner Datenbank speichern möchte. Es scheint jedoch, dass ich eine mehrzeilige Zeichenfolge nicht als Dateiressource speichern kann oder nicht speichern kann.Xpages: wie man eine Zeichenfolge als Ressourcenbündel in Dateien speichert

Mein String wird wie folgt aussehen:

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

Gibt es eine Möglichkeit, dies als eine Eigenschaft zu speichern.

Antwort

2

Sie suchen nach einem Ort suchen, zu speichern und ein Menü als JSON-Daten zu erhalten.

Sie können dafür eine serverseitige JavaScript-Bibliothek verwenden.
Weisen Sie Ihrer Menüdefinition eine Variable zu. Auf diese Weise haben Sie ein Syntax-Steuerelement enthalten und Sie müssen die JSON-Zeichenfolge nicht analysieren, da es bereits ein JavaScript-Array/-Objekt ist.

Beispiel:

Server-Seite JavaScript-Bibliothek "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

Das funktionierte perfekt! –

+0

Eine kleine Anmerkung zur Vorsicht - Sie verwenden eine globale Variable - abhängig von Ihren Persistenzeinstellungen/Serverleistung/etc - irgendwann wird diese globale Variable aufgrund von Garbage Collection/und/oder wenn die Seite geschrieben wird, undefiniert Festplatte für die Persistenz. Globale javascript serverseitige Variablen sollten als no-no betrachtet werden. Verwenden Sie nur SSJS-Includes zum Aufrufen von Funktionen usw. Sie könnten beispielsweise eine Funktion namens menu() erstellen, die den Inhalt der Zeichenfolge zurückgibt, und dann menu() in Ihrem Wert aufrufen (zB value = "# {javascript: return menu ();} "und es wird sicherer im Maßstab sein. –

1

Warum muss es mehrzeilig sein? Es scheint, dass Sie versuchen, JSON zu speichern - minimieren Sie es und speichern Sie als eine einzige Zeile. Bewahren Sie eine bearbeitbare Version an einer anderen Stelle als Master auf und nehmen Sie eine erneute Minimierung vor, wenn Sie sie bereitstellen möchten.

Aber, wenn Sie es wirklich tun wollen, glaube ich, die richtige Syntax ist:

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