{"id":642,"date":"2012-04-10T12:08:25","date_gmt":"2012-04-10T10:08:25","guid":{"rendered":"http:\/\/hasselba.ch\/blog\/?p=642"},"modified":"2012-04-10T12:11:18","modified_gmt":"2012-04-10T10:11:18","slug":"lotusscript-in-xpages-3-quick-n-dirty-aktivierung","status":"publish","type":"post","link":"https:\/\/hasselba.ch\/blog\/?p=642","title":{"rendered":"LotusScript in XPages (3): Quick-n-Dirty-Aktivierung"},"content":{"rendered":"<h2>LotusScript in XPages<\/h2>\n<address>Dies ist der dritte Teil des Artikels &#8222;LotusScript in XPages&#8220;. Der erste Teil befindet sich <a title=\"LotusScript in XPages (1): Basics\" href=\"https:\/\/hasselba.ch\/blog\/?p=611\">hier<\/a>, der zweite Teil <a title=\"LotusScript in XPages (2): LotusScript-Wrapper\" href=\"https:\/\/hasselba.ch\/blog\/?p=618\">hier<\/a>.<\/address>\n<p>&nbsp;<\/p>\n<h2>Die Quick-n-Dirty-Aktivierung<\/h2>\n<p>Damit die BindingFactory verwendet werden kann, m\u00fcsste eigentlich ein Plugin erstellt werden, doch es gibt auch eine &#8222;Abk\u00fcrzung&#8220;, denn die Factory kann auch \u00fcber einen angepassten ViewHandler in XPages verwendet werden. Dies ist beim Testen \/ Entwickeln eine sehr praktische Angelegenheit, da sich dadurch der Aufwand deutlich verringern l\u00e4sst (Vielen Dank an dieser Stelle an <a title=\"frostillic.us: Ruby-in-XPages is Inching Towards Practicality\" href=\"http:\/\/frostillic.us\/f.nsf\/posts\/327\" target=\"_blank\">Jesse Gallagher<\/a> f\u00fcr seine Idee).<\/p>\n<p>Der ViewHandler ist einfach aufgebaut und sieht wie folgt aus:<\/p>\n<pre>package ch.hasselba.xpages.jsf.el;\r\n\r\nimport javax.faces.application.ViewHandler;\r\nimport javax.faces.component.UIViewRoot;\r\nimport javax.faces.context.FacesContext;\r\nimport com.ibm.xsp.application.ApplicationEx;\r\nimport com.ibm.xsp.factory.FactoryLookup;\r\n\r\npublic class LSViewHandler extends\r\n   com.ibm.xsp.application.ViewHandlerExImpl {\r\n\u00a0\u00a0 \u00a0public LSViewHandler(ViewHandler paramHandler) {\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0super(paramHandler);\r\n\u00a0\u00a0 \u00a0}\r\n\r\n\u00a0\u00a0 \u00a0@SuppressWarnings({ \"deprecation\" })\r\n\u00a0\u00a0 \u00a0@Override\r\n\u00a0\u00a0 \u00a0public UIViewRoot createView(FacesContext context,\r\n       String paramString) {\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0ApplicationEx app = (ApplicationEx) context.getApplication();\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0FactoryLookup facts = app.getFactoryLookup();\r\n\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0LSBindingFactory lsfac = new LSBindingFactory();\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0if(facts.getFactory(lsfac.getPrefix()) == null) {\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0facts.setFactory(lsfac.getPrefix(), lsfac);\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0}\r\n\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0return super.createView(context, paramString);\r\n\u00a0\u00a0 \u00a0}\r\n\r\n}<\/pre>\n<p>Der aktuellen <em>Application<\/em>-Instanz wird hierbei die BindingFactory im <em>createView()<\/em> hinzugef\u00fcgt, wenn diese noch nicht vorhanden ist, danach wird die urspr\u00fcngliche <em>createView()<\/em>-Methode der erweiterten Klasse <em>com.ibm.xsp.application.ViewHandlerExImpl<\/em> aufgerufen.<\/p>\n<p>Dann muss nur noch die <em>faces-config.xml<\/em> modifiziert und der neue ViewHandler eingetragen werden:<\/p>\n<pre>&lt;?xml version=\"1.0\" encoding=\"UTF-8\"?&gt;\r\n&lt;faces-config&gt;\r\n\u00a0 &lt;application&gt;\r\n\u00a0\u00a0\u00a0 &lt;view-handler&gt;ch.hasselba.xpages.jsf.el.LSViewHandler&lt;\/view-handler&gt;\r\n\u00a0 &lt;\/application&gt;\r\n&lt;\/faces-config&gt;<\/pre>\n<p>Nun kann in der XPage mit dem neuen &#8222;lotusscript&#8220;-Tag experimentiert werden. Da der Designer den neuen Tag nicht kennt, wird immer eine Warnung ausgegeben werden bzw. die Syntax mit einem Ausufezeichen markiert:<\/p>\n<p><img decoding=\"async\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAtoAAAA4CAIAAABMn8jEAAAI0ElEQVR4nO3dP28URxjH8XsPKAhFyhtAAkQiaInMK6CwIgUpVbqkQNCcQnE2JLISgiJFURwSSIfSIZeUuACBMIqRQgWYf0ncuaJ\/UpyyrOfPM8\/szd7e7X0\/sqy92dnZ8d1593eze7uDjTvbG3e2v\/rxj\/GE\/iOZGiwCAAAWzYA4AgAAukUcAQAAHSOOAACAjhFHAABAx4gjAACgY+XjyHA4HA6H4+k+xZFTo9Gp0ahUtSILjgbR+qPBSJlbd3gghwf7Jurl9RJLI3Z6+355rJ8AgB4oHEfGQaTbODJYWWmpZWNcaBZHJlkwaMI4Us01ahYRYrHDEkfae6EBAFNWMo5UKaSrODJYWanvourjDcHp4ICEMkoRq+wsUm\/cWSRYX2k\/Zjz44QeOenk1d+CpL1Lt+IN5IlbohwY908SGNLJGR\/xZzisOAJhT\/Ykjwd1SPYI45ZZZsdb0h8F0klw8WKJz4kj9YdbBGmciOFdfVvYHET+mxFqbMI6MkUgAYN4ViyNDj0wrjugfkWNDIMFpnT46kowdTuVW44iYR0d0ylCHkz+CscOpbIwjDY77MEwCAHOtlW\/WzM7oiLQZR5TYYSlPtp9kjCON6elBGfbQR1yU9i1L+QgiADDv+hNHJPQR2XKgpMjBmth5Kkofku0nFTlYo8iKI8kjNcmHyXIfgyIA0A9tfdF3mgdrHNX+SY8IyhET40GZernfZvJU1lh\/LKGkOmXViR3OqazNEol+hMWflfxuTvDITux8WOXIjoMgAgC9saCXQSv7lVoAADCJRYwj9kEIAAAwBYsYRwAAwEwhjgAAgI4RRwAAQMfCcaRegzgCAABaFYgjIrK7devl9dMvr5\/e3boltUSS2zpxBAAAJIXjyItfl2RvU\/Y2X\/y2JMQRAADQJjeOiMju1q3n15Zk97bs3n5+bak+QJLbOnEEGKtuFZR1zyAgV9tvsD69gbmU4kwJxJFnv5ySvc2LZw5cPHNA9jafrn8stjjS1S30+ip5cZROLp3S4SVbgtuO8XXi\/VlVeTXLL\/Hrx1rwF9TbCfQnHkeC2\/fcmx3OoHnvv4VzW0r7XSrbe32VZquVZq3dqVmw\/fA7P\/Ufbeq0zTTjCNvzpH1xRERe3Vx+fPWkPLm8svzepU8OypPLj6+efHVzWQzZorpVTaWXcaSNd7DxLjkzYsJeGZ\/A4PbI2JqTG\/xpS1N+5ViFdGFmFknOalxzNs31B3r73lpfsKBYyw3iQrBmqfa1piJbCeNmoeCCDbA9b9iUE0ceXTkhT8\/Lk0vfnj30\/Wfvy1+r8vT8n1dOCHHE+0AcuyeOc9sapxH7jWzk\/zeKskiwcctlZ506sYfBRpSbDhrvDaR\/ylEGHiyFesuxauOHueu1rH3gceZGexvaDfiNxBr3P7UbF1HK671y9j2x+n5\/jCsN9ty43kmen1j7Sv+d7un9URYM9sf4dyld8stjFfSl2mg\/2pQ5jkih7Qnbc\/8vKrI9t3sXR0Tk1c3lR1c+lJ1Vuf\/pu5+d1YfffTQeINE5R2qkX3Ek+HTXXzan3DLLb8cvj7UTbNnSZrJ+sh29xN6Ofd+fVX\/W4ogUGh3Rd3vJFmJ9yCpX9ujJ\/jv1Lf2PrSJWGHuY9fzE2rf03xhTLCXJ10WnB6AJ40jB9ovEEWVWVjtsz\/2SCbfnWfbFkQdrx+X1Vdn6Up6tr5099NPnH8izdXn0hbz+4eHa8ax2+3TuiB79km\/H5NtIqaO3o6fp5Eol9e+nZHZLP51Ggl3yz+1Qetu\/OKJvtVuKIxL\/1J71UTu3\/3p\/lHaM651ktMDYn2R95fmcJI4E21H+XuVPCP5Ruf3Mat\/SgUBhfhyRnO1JbBbb81g\/c7fnDThx5Jj8\/bNsX5CdG6vLB9fOHpKdG7J9Qd6sP1g7ltVun+LI2Fy8fe1znTrKikqlaV\/u6IixkcZxJPcgUeyEO7ek6W5DrznJ7tPSgdgu1rJsbG7bcSSrfoP+ZMWR5AttjyPBzuhajwuF2o8+1W2OjszLx0v7XKfO7GzPs+yLI\/e+Pvpm45z8c0P+\/b3+82bj3L1vjuoNOSeO9C+OSCj6WQaycgf3LNPJlRrXGyx3Vpr19tVHIyvNjvXGKuuFllNZlZiSLDGd3zrFgzXKJ2y9ndxyvfPBuVl99nuur9f4TCafH6WprH46lbPiiPJ62bWeGEq0XySO5G5PlM+WzoT\/kO25r\/y5I+PocPfykeCP2E5l7fG5I5XqeXdeKv9Vj732ytso2Ig\/NzholhyRM759g6tOrsJev+yZ8MpmaxD6am5w21QVKkvZ67s9UfcrscLgaEpsiKU+K1juT+iNB\/e1zeqX6v8k6y37\/ARbS\/5R9QrJftrrK+w1lRaU9U7evtKIPY7kbk8s49xsz4tvzy0C1x0J4jJoWZQgibIK\/jMUkRtHlPL+WZy\/dBa0\/WwXiTvRWY3OHTGtNL8FtufTwR19y4vlWbRBOeejE8H+vL1\/hOnBYPD2\/pFqD9R5f5iezWnlrKxO\/tPZnk8NcQRo13g7y29+89vyGwuLOAK0qL6FZZpppu3TWDTEEQAA0DHiCAAA6BhxBAAAdIw4AgAAOrYocWR2vggKAAAc5eNI\/cKsixBHjF9Jb\/zNdb7yDgDovcJxxLlzTSdxpPFVhBszxoXGqcJZkJEeAEDPlIwjThaRqccR4x1ZY\/cmCF6lP7iUPytY2b9ngUSu8afcmyDY\/kxdhxQAgAkVjiMd3kIv6x4H9QjilFtmxVrTHwbTSXLxYMkYiQQA0A9tjY5M89yR5N2lg+WxIZDgtE4fHUnGDqeyPY4IwyQAgF7oQxwZy7r7vLQZR5TYYSlPtl8hiAAA+qE\/cURCQwXK0Igz4T8scrAmdp6K0odk+8KgCACgX8p\/s6arc0cq1X7acpjGjwjKERPjQZl6ud9m8lTWWH+qcoIIAKBn+nwZtAa7ba7wAQDA9PU5juRSvmoLAADaQxwBAAAdI44AAICOEUcAAEDHiCMAAKBjxBEAANAx4ggAAOjYfzajSikq0tklAAAAAElFTkSuQmCC\" alt=\"\" \/><\/p>\n<p>Dies stellt aber (zumindest unter 8.5.3) kein Problem dar, ist aber erst durch eine &#8222;saubere&#8220; Plugin-L\u00f6sung behebbar.<\/p>\n<p>In den n\u00e4chsten Teilen wird die Plugin-Variante vorgestellt, und ein paar Erweiterungsm\u00f6glichkeiten f\u00fcr den LotusScript-Wrapper gezeigt.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>LotusScript in XPages Dies ist der dritte Teil des Artikels &#8222;LotusScript in XPages&#8220;. Der erste Teil befindet sich hier, der zweite Teil hier. &nbsp; Die Quick-n-Dirty-Aktivierung Damit die BindingFactory verwendet werden kann, m\u00fcsste eigentlich ein Plugin erstellt werden, doch es &hellip; <a href=\"https:\/\/hasselba.ch\/blog\/?p=642\">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,38,89,26,20,74,24],"tags":[33,7,30,88,39,31,86,80,3,85],"class_list":["post-642","post","type-post","status-publish","format-standard","hentry","category-allgemein","category-expression-language","category-extensibility-api","category-java","category-jsf","category-lotus-script","category-xpages","category-xsp","tag-8-5-3","tag-domino","tag-el","tag-expression-language","tag-extenisbility-api","tag-java","tag-jsf","tag-lotus-script","tag-xpages","tag-xsp"],"_links":{"self":[{"href":"https:\/\/hasselba.ch\/blog\/index.php?rest_route=\/wp\/v2\/posts\/642","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=642"}],"version-history":[{"count":5,"href":"https:\/\/hasselba.ch\/blog\/index.php?rest_route=\/wp\/v2\/posts\/642\/revisions"}],"predecessor-version":[{"id":648,"href":"https:\/\/hasselba.ch\/blog\/index.php?rest_route=\/wp\/v2\/posts\/642\/revisions\/648"}],"wp:attachment":[{"href":"https:\/\/hasselba.ch\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=642"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/hasselba.ch\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=642"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/hasselba.ch\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=642"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}