{"id":208,"date":"2011-08-21T16:36:40","date_gmt":"2011-08-21T14:36:40","guid":{"rendered":"http:\/\/blog.hasselba.ch\/?p=208"},"modified":"2011-08-23T14:58:36","modified_gmt":"2011-08-23T12:58:36","slug":"dynamisches-data-binding","status":"publish","type":"post","link":"https:\/\/hasselba.ch\/blog\/?p=208","title":{"rendered":"Dynamisches Data Binding"},"content":{"rendered":"<p>Das <a title=\"lotus.com: Data binding in XPages\" href=\"http:\/\/www-10.lotus.com\/ldd\/ddwiki.nsf\/dx\/10082008104832AMDOCKD8.htm\" target=\"_blank\">Data Binding<\/a> ist eine\u00a0 einfache und komfortable M\u00f6glichkeit, Datenquellen und XPages miteinander zu verbinden. Zum Einen lassen sich Frontend und Backend miteinander koppeln (also z.B. Feld eines Notes Dokumentes mit einem Label auf der XPage), zum Anderen ist eine Speicherung von Informationen innerhalb der XPages-Applikation m\u00f6glich (z.B. das Ablegen eines Wertes im <em>sessionScope<\/em>-Objekt).<\/p>\n<pre>&lt;xp:inputText id=\"inputText1\"\r\n   value=\"#{<strong>document1.feldName<\/strong>}\"&gt;\r\n&lt;\/xp:inputText&gt;<\/pre>\n<p><em>[Data binding einer Datenquelle an ein Textfeld \/\/ In Fett: Die Zuweisung per Expression Language(EL)]<\/em><\/p>\n<p>Data bindings lassen sich auch dynamisch erstellen, da die Zuweisung w\u00e4hrend des Aufbauens des JSF-Baumes geschieht: Wird die Berechnung des Bindings w\u00e4hrenddessen durchgef\u00fchrt, ist es m\u00f6glich, z.B. eine Zuweisung durch die Expression Language (EL) programmatisch zu beeinflussen.<\/p>\n<pre>&lt;xp:inputText id=\"inputText1\"<em>&gt;<\/em>\r\n   &lt;xp:this.value&gt;&lt;![CDATA[<strong><span style=\"color: #ff0000;\">$<\/span><\/strong>{javascript:\r\n      var <strong>fName<\/strong> = \"Test\";\r\n      return '#{document1.' + <strong>fName<\/strong> + '}';\r\n   }]]&gt;&lt;\/xp:this.value&gt;\r\n&lt;\/xp:inputText&gt;<\/pre>\n<p><em>[Fett: Der Name der Variable \/\/ In Rot: &#8222;Compute On Page Load&#8220;]<\/em><\/p>\n<p>Dadurch, dass die Berechnung auf &#8222;<em>Compute On Page Load<\/em>&#8220; gesetzt ist, kann eine Variable programmatisch zugewiesen werden. Im obigen Beispiel existiert jetzt eine Zuweisung der Textfeldes an &#8222;<em>document1.Test<\/em>&#8222;.<\/p>\n<p>Hierdurch lassen sich einige &#8222;Spielereien&#8220; realisieren, z.B. dynamische Zuweisungen von <em>requestScope<\/em>-Variablen:<\/p>\n<pre>&lt;?xml version=\"1.0\" encoding=\"UTF-8\"?&gt;\r\n&lt;xp:view xmlns:xp=\"http:\/\/www.ibm.com\/xsp\/core\"&gt;\r\n\r\n&lt;xp:div id=\"refreshMe\"&gt;\r\n&lt;xp:repeat id=\"repeat1\" rows=\"30\" var=\"varcollection\"\r\n   repeatControls=\"true\" indexVar=\"index\"&gt;\r\n   &lt;xp:this.value&gt;\r\n      &lt;![CDATA[${javascript:return @Explode(\"1,2,3,4,5\",\",\");}]]&gt;\r\n   &lt;\/xp:this.value&gt;\r\n   &lt;xp:radioGroup id=\"radioGroup1\"&gt;\r\n      &lt;xp:this.value&gt;&lt;![CDATA[${javascript:\r\n         var fieldName = \"Radio_\" + index;\r\n         <strong>return '#{requestScope.' + fieldName + '}'<\/strong>;}]]&gt;\r\n      &lt;\/xp:this.value&gt;\r\n      &lt;xp:selectItem itemLabel=\"Value1\"\r\n         itemValue=\"Value1\"&gt;&lt;\/xp:selectItem&gt;\r\n      &lt;xp:selectItem itemLabel=\"Value2\"\r\n         itemValue=\"Value2\"&gt;&lt;\/xp:selectItem&gt;\r\n   &lt;\/xp:radioGroup&gt;\r\n   &lt;xp:br&gt;&lt;\/xp:br&gt;\r\n&lt;\/xp:repeat&gt;\r\n\r\n&lt;xp:label id=\"label1\"&gt;\r\n   &lt;xp:this.value&gt;&lt;![CDATA[#{javascript:var txt = \"\";\r\n      try{\r\n         for( i=0; i&lt;requestScope.size(); i++ ){\r\n            if( requestScope.containsKey( \"Radio_\" + i ) )\r\n            txt += <strong>requestScope.get(\"Radio_\" + i)<\/strong>;\r\n         }\r\n      }catch(e){}\r\n      return txt;}]]&gt;\r\n   &lt;\/xp:this.value&gt;\r\n&lt;\/xp:label&gt;\r\n&lt;\/xp:div&gt;\r\n\r\n&lt;xp:button value=\"Submit\" id=\"button1\"&gt;\r\n   &lt;xp:eventHandler event=\"onclick\" submit=\"true\"\r\n\u00a0\u00a0    refreshMode=\"partial\" refreshId=\"refreshMe\"&gt;\r\n\u00a0\u00a0 &lt;\/xp:eventHandler&gt;\r\n&lt;\/xp:button&gt;\r\n&lt;\/xp:view&gt;<\/pre>\n<p><em>[Dynamische Zuweisung von Radio-Buttons zum Requestscope innerhalb eines RepeatControls \/\/ In Fett: Handling der dynamischen requestScope-Variablen]<\/em><\/p>\n<p>Das hier gezeigte Beispiel legt f\u00fcnf Radio-Button-Gruppen an, die an das <em>requestScope<\/em>-Objekt gebunden werden. Wird der Button angeklickt, werden die Daten an den Server gesendet und die ausgew\u00e4hlten Werte im Label angezeigt.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Das Data Binding ist eine\u00a0 einfache und komfortable M\u00f6glichkeit, Datenquellen und XPages miteinander zu verbinden. Zum Einen lassen sich Frontend und Backend miteinander koppeln (also z.B. Feld eines Notes Dokumentes mit einem Label auf der XPage), zum Anderen ist eine &hellip; <a href=\"https:\/\/hasselba.ch\/blog\/?p=208\">Weiterlesen <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1,29,26,76,74],"tags":[7,30,88,86,5,3],"class_list":["post-208","post","type-post","status-publish","format-standard","hentry","category-allgemein","category-expression-language","category-jsf","category-ssjs","category-xpages","tag-domino","tag-el","tag-expression-language","tag-jsf","tag-ssjs","tag-xpages"],"_links":{"self":[{"href":"https:\/\/hasselba.ch\/blog\/index.php?rest_route=\/wp\/v2\/posts\/208","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/hasselba.ch\/blog\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/hasselba.ch\/blog\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/hasselba.ch\/blog\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/hasselba.ch\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=208"}],"version-history":[{"count":16,"href":"https:\/\/hasselba.ch\/blog\/index.php?rest_route=\/wp\/v2\/posts\/208\/revisions"}],"predecessor-version":[{"id":224,"href":"https:\/\/hasselba.ch\/blog\/index.php?rest_route=\/wp\/v2\/posts\/208\/revisions\/224"}],"wp:attachment":[{"href":"https:\/\/hasselba.ch\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=208"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/hasselba.ch\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=208"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/hasselba.ch\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=208"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}