AtNotes Übersicht Willkommen Gast. Bitte einloggen oder registrieren.
25.05.12 - 20:39:42
Übersicht Hilfe Regeln Glossar Suche Einloggen Registrieren
News:
Schnellsuche:
+  Das Notes Forum
|-+  Lotus Notes / Domino 8
| |-+  ND8: Entwicklung - XPages (Moderatoren: eknori, Glombi, Thomas Schulte, m3)
| | |-+  Xpages - Text innerhalb eines Repeat Control in Einzelwerte zerlegen
« vorheriges nächstes »
Seiten: [1] Nach unten Drucken
Autor Thema: Xpages - Text innerhalb eines Repeat Control in Einzelwerte zerlegen  (Gelesen 1018 mal)
eknori
@Notes Preisträger
Moderator
Gold Platin u.s.w. member:)
*****
Offline Offline

Geschlecht: Männlich
Beiträge: 10104


No guts, No glory!!


WWW
« am: 14.09.10 - 13:48:17 »

Ich habe ein RepeatControl, das mir Werte aus einem Dokument darstellt.

Unter anderem wird auch der Inhalt des Items tags dargestellt

Tags: tag1, tag2, tag3

Code:
               <xp:panel
                            style="font-size:7pt;color:rgb(128,128,128);margin-bottom:5.0px">
                            <xp:text escape="true" id="tagLabel" value="Tags: " />
                            <xp:text escape="true" id="tagList" value="#{RowData.tags}" />
                        </xp:panel>

Wie zerlege ich den String aus #{RowData.tags} in seine Einzelwerte.

Ziel ist es, die Einzelwerte mit einem Link zu versehen. Klickt man diesen an werden alle Einträge mit diesem Tag dargestellt.
Ich verzettel mich hier gerade mit mehreren verschachtelten repeat controls. Muss irgendwie einfacher gehen.  ( split in Javascript evtl ?)

Gespeichert

Gruß Ulrich (eknori) Krause

"Reich wird man nicht durch das, was man verdient, sondern durch das, was man spart"

pulmonale Hypertonie e.V.
atbits
Gold Platin u.s.w. member:)
*****
Offline Offline

Geschlecht: Männlich
Beiträge: 637


Bugfree-Development ;-)


WWW
« Antworten #1 am: 14.09.10 - 14:07:52 »

Hallo Ulrich, versuche mal etwas in der Art.
Ist nur Sample-Code (ungetestet)

Code:
<xp:repeat id="repeatTagCloud" var="tagArray"
value="#{javascript:applicationScope.get(compositeData.id).getRepeatValue();}">
<xp:panel style="font-size:7pt;color:rgb(128,128,128);margin-bottom:5.0px">
<xp:text escape="true" id="tagLabel" value="Tags: " />
<xp:text escape="true" id="tagList">
<xp:this.value><![CDATA[#{javascript:@Explode(RowData.tags, ",");}]]></xp:this.value>
</xp:text>
</xp:panel>
</xp:repeat>

nochmal erweitert:

Code:
<?xml version="1.0" encoding="UTF-8"?>
<xp:view xmlns:xp="http://www.ibm.com/xsp/core">
<xp:repeat id="repeatTagCloud" var="tagArray"
value="#{javascript:applicationScope.get(compositeData.id).getRepeatValue();}">
<xp:panel style="font-size:7pt;color:rgb(128,128,128);margin-bottom:5.0px">
<xp:text escape="true" id="tagLabel" value="Tags: " />
<xp:text escape="true" id="tagList">
<xp:this.value><![CDATA[#{javascript:var arr = @Explode(RowData.tags, ",");
var ret = "";
for(counter = 0; counter < arr.length; counter++) {
ret += "<a href='" + dbname + "/myTagView/" + arr[counter] + "'>" + arr[counter] + "</a>";
}

return ret;}]]></xp:this.value>
</xp:text>
</xp:panel>
</xp:repeat>
</xp:view>


Grüße David
« Letzte Änderung: 14.09.10 - 14:18:12 von atbits » Gespeichert

David Schiffer
================================

atBits GmbH & Co. KG - http://www.atbits.de
Softwareentwicklung und Beratung

im Einsatz:
Lotus Domino 6.5.x, 7.x, 8.x, 8.5.x
CooperTeam DesktopManager
eknori
@Notes Preisträger
Moderator
Gold Platin u.s.w. member:)
*****
Offline Offline

Geschlecht: Männlich
Beiträge: 10104


No guts, No glory!!


WWW
« Antworten #2 am: 14.09.10 - 14:28:58 »

hmm, gibt mir irgendwie nichts zurück. Na mal sehen, aber so macht es schon Sinn
Gespeichert

Gruß Ulrich (eknori) Krause

"Reich wird man nicht durch das, was man verdient, sondern durch das, was man spart"

pulmonale Hypertonie e.V.
atbits
Gold Platin u.s.w. member:)
*****
Offline Offline

Geschlecht: Männlich
Beiträge: 637


Bugfree-Development ;-)


WWW
« Antworten #3 am: 14.09.10 - 14:36:07 »

Hast Du mein 2. Beispiel auch versucht?
Gespeichert

David Schiffer
================================

atBits GmbH & Co. KG - http://www.atbits.de
Softwareentwicklung und Beratung

im Einsatz:
Lotus Domino 6.5.x, 7.x, 8.x, 8.5.x
CooperTeam DesktopManager
atbits
Gold Platin u.s.w. member:)
*****
Offline Offline

Geschlecht: Männlich
Beiträge: 637


Bugfree-Development ;-)


WWW
« Antworten #4 am: 14.09.10 - 14:38:23 »

Ist "," überhaupt das richtige Trennzeichen?
Gespeichert

David Schiffer
================================

atBits GmbH & Co. KG - http://www.atbits.de
Softwareentwicklung und Beratung

im Einsatz:
Lotus Domino 6.5.x, 7.x, 8.x, 8.5.x
CooperTeam DesktopManager
atbits
Gold Platin u.s.w. member:)
*****
Offline Offline

Geschlecht: Männlich
Beiträge: 637


Bugfree-Development ;-)


WWW
« Antworten #5 am: 14.09.10 - 14:55:07 »

Hallo Ulrich,

also nochmals ein wenig konkreter, so läuft es in einer Testsite bei mir:

Code:
<?xml version="1.0" encoding="UTF-8"?>
<xp:view xmlns:xp="http://www.ibm.com/xsp/core">
<xp:repeat id="repeatTagCloud" var="tagVar"
value="#{javascript: @Explode('lala,lulu,lolo');}">
<xp:panel style="font-size:7pt;color:rgb(128,128,128);margin-bottom:5.0px">
<xp:text escape="false" id="tagList">
<xp:this.value><![CDATA[#{javascript:
var dbname = @DbName()[1];
var ret = "<a href='/" + dbname + "/myTagView/" + tagVar + "'>" + tagVar + "</a>&nbsp;";

return ret;}]]></xp:this.value>
</xp:text>
</xp:panel>
</xp:repeat>
</xp:view>


Statt dem value="#{javascript: @Explode('lala,lulu,lolo');}"
würdest Du natürlich z.B. ein JS-Function aufrufen, die Dir ein Array von relevanten Tags liefert also z.B.:
value="#{javascript: getAllMyTags();}"

Hoffe das hilft weiter.
Grüße David
Gespeichert

David Schiffer
================================

atBits GmbH & Co. KG - http://www.atbits.de
Softwareentwicklung und Beratung

im Einsatz:
Lotus Domino 6.5.x, 7.x, 8.x, 8.5.x
CooperTeam DesktopManager
eknori
@Notes Preisträger
Moderator
Gold Platin u.s.w. member:)
*****
Offline Offline

Geschlecht: Männlich
Beiträge: 10104


No guts, No glory!!


WWW
« Antworten #6 am: 14.09.10 - 15:00:29 »

yep, so bekomme ich das hin. Danke
Gespeichert

Gruß Ulrich (eknori) Krause

"Reich wird man nicht durch das, was man verdient, sondern durch das, was man spart"

pulmonale Hypertonie e.V.
JulianBuss
Aktives Mitglied
***
Offline Offline

Beiträge: 132


Ich liebe dieses Forum!


« Antworten #7 am: 14.09.10 - 20:28:44 »

Wenn ich das richtig erinnere, ist @Explode übrigens nur eine Abkürzung für die .split() Methode eines Strings.
Demnach müsstet so eine Stück JavaScript auch gehen:
Code:
var s = "eins,zwei,drei";
var l = s.split(",")

Ansonsten find ich auch nix schlechtes an verschachtelten Repeat-Controls, dann könntest Du im inneren Repeat-Control das Link Control nutzen statt HTML selbst zusammenzubauen.
Gespeichert
eknori
@Notes Preisträger
Moderator
Gold Platin u.s.w. member:)
*****
Offline Offline

Geschlecht: Männlich
Beiträge: 10104


No guts, No glory!!


WWW
« Antworten #8 am: 15.09.10 - 10:51:33 »

Danke für die Tipps. Ist im Grunde ganz einfach. Das Problem, das ich hatte: Ich wusste nicht, wie ich an die Daten aus dem "tags" Item im Dokument komme.

Bei David Leedy habe ich dann den ausschlaggebenden Tipp bekommen. http://xpagesblog.com/xpages-blog/2010/3/30/displaying-a-multi-value-field-with-a-repeat-control.html

der Code sieht jetzt bei mir so aus. Das repeat sitzt in einem weiteren repeat, welches RowData liefert.
Jetzt holt man sich mit
Zitat
RowData.getDocument().getItemValue("tags");
die Werte aus dem Item "tags" und übergibt diese Werte an ein weiteres repeat Control

Zitat
                        <xp:panel
                            style="font-size:7pt;color:rgb(128,128,128);margin-bottom:5.0px">
                            <xp:repeat id="repeatTags" rows="250" var="taglist">
                                <xp:this.value><![CDATA[#{javascript:RowData.getDocument().getItemValue("tags");}]]></xp:this.value>
                                <xp:link escape="true" id="tagLink">
                                    <xp:this.text><![CDATA[#{javascript:taglist + " "}]]></xp:this.text>
                                    <xp:eventHandler event="onclick"
                                        submit="true" refreshMode="complete">
                                        <xp:this.action>
                                            <xp:openPage>
                                                <xp:this.name><![CDATA[#{javascript:"/tags.xsp?tag=" + taglist}]]></xp:this.name>
                                            </xp:openPage>
                                        </xp:this.action>
                                    </xp:eventHandler>
                                </xp:link>
                            </xp:repeat>
                        </xp:panel>

Das LinkControl erledigt den Rest. Im OnClick Event baut man sich die URL samt Parametern zusammen.

« Letzte Änderung: 15.09.10 - 11:00:11 von eknori » Gespeichert

Gruß Ulrich (eknori) Krause

"Reich wird man nicht durch das, was man verdient, sondern durch das, was man spart"

pulmonale Hypertonie e.V.
Seiten: [1] Nach oben Drucken 
« vorheriges nächstes »
Gehe zu:  


Einloggen mit Benutzername, Passwort und Sitzungslänge

Powered by MySQL Powered by PHP Powered by SMF 1.1.16 | SMF © 2006, Simple Machines Prüfe XHTML 1.0 Prüfe CSS
Impressum Atnotes.de - Powered by Syslords Solutions - Datenschutz | Partner: Tinte / Toner günstig