{"id":8,"date":"2006-04-27T19:43:00","date_gmt":"2006-04-27T18:43:00","guid":{"rendered":"http:\/\/euve3303.vserver.de\/stefan\/blog\/?p=11"},"modified":"2011-12-02T20:34:17","modified_gmt":"2011-12-02T19:34:17","slug":"facelets-integrieren-third-party-jsp-taglibs","status":"publish","type":"post","link":"https:\/\/cogito-ergo-blog.de\/blog\/2006\/04\/27\/facelets-integrieren-third-party-jsp-taglibs\/","title":{"rendered":"Facelets integrieren Third-Party-JSP Taglibs"},"content":{"rendered":"<p>Eine erste Version steht. Was mir bislang bei Facelets in einem ersten produktiven Projekt gefehlt hat, geht nun: <\/p>\n<p><b>Wie integriere ich Third-Party-JSP Taglibs, wenn meine Views gar keine JSPs verwenden? <\/b><\/p>\n<p>Die Idee beruht auf einer L\u00f6sung wie sie die Template-Engine <a href=\"http:\/\/www.freemarker.org\/\">Freemarker<\/a> verwendet. Eine Container unabh\u00e4ngige JSP-Umgebung, die eine Taglib laden und aufrufen kann. Auf diese Weise werden in Freemarker JSP-Fragmente eingebettet und genauso lassen sich in Facelet-Views auch Third-Party-Taglibs integrieren. <\/p>\n<p>Die Java-Sourcen sind weitgehend von Freemarker \u00fcbernommen und noch nicht vollst\u00e4ndig angepasst, aber das Prinzip wird deutlich und es funktioniert mit SimpleTags bereits. <\/p>\n<p>Das Beispiel geht davon aus, dass man das Starterkit aus Facelets als WebApplikation installiert alles weitere ist in der <a href=\"http:\/\/www.lookingeye.de\/download\/facelet-jsp.zip\">Zip-Datei<\/a> im Anhang zu finden. <\/p>\n<p><!--more--><\/p>\n<p>Eine Taglib wird integriert \u00fcber ein CustomTag, welches im einer Facelet-Taglib beschrieben wird: <\/p>\n<pre><code><font face=\"Lucida Console\" color=\"#008080\">&lt;!DOCTYPE facelet-taglib PUBLIC\r\n  &quot;-\/\/Sun Microsystems, Inc.\/\/DTD Facelet Taglib 1.0\/\/EN&quot;\r\n  &quot;http:\/\/java.sun.com\/dtd\/facelet-taglib_1_0.dtd&quot;&gt;<\/font><\/code><\/pre>\n<pre><code><font face=\"Lucida Console\" color=\"#808080\">&lt;<\/font><font face=\"Lucida Console\" color=\"#000080\">facelet-taglib<\/font><font face=\"Lucida Console\" color=\"#808080\">&gt;\r\n  &lt;<\/font><font face=\"Lucida Console\" color=\"#000080\">namespace<\/font><font face=\"Lucida Console\" color=\"#808080\">&gt;<\/font><font face=\"Lucida Console\" color=\"#000000\">http:\/\/www.rinke-solutions.de\/facelets\/ext<\/font><font face=\"Lucida Console\" color=\"#808080\">&lt;\/<\/font><font face=\"Lucida Console\" color=\"#000080\">namespace<\/font><font face=\"Lucida Console\" color=\"#808080\">&gt;\r\n  \r\n  &lt;<\/font><font face=\"Lucida Console\" color=\"#000080\">tag<\/font><font face=\"Lucida Console\" color=\"#808080\">&gt;\r\n\t&lt;<\/font><font face=\"Lucida Console\" color=\"#000080\">tag-name<\/font><font face=\"Lucida Console\" color=\"#808080\">&gt;<\/font><font face=\"Lucida Console\" color=\"#000000\">taglib<\/font><font face=\"Lucida Console\" color=\"#808080\">&lt;\/<\/font><font face=\"Lucida Console\" color=\"#000080\">tag-name<\/font><font face=\"Lucida Console\" color=\"#808080\">&gt;\r\n\t&lt;<\/font><font face=\"Lucida Console\" color=\"#000080\">handler-class<\/font><font face=\"Lucida Console\" color=\"#808080\">&gt;<\/font><font face=\"Lucida Console\" color=\"#000000\">rinke.solutions.faclets.tag.jsp.JspTaglibTag<\/font><font face=\"Lucida Console\" color=\"#808080\">&lt;\/<\/font><font face=\"Lucida Console\" color=\"#000080\">handler-class<\/font><font face=\"Lucida Console\" color=\"#808080\">&gt;\r\n  &lt;\/<\/font><font face=\"Lucida Console\" color=\"#000080\">tag<\/font><font face=\"Lucida Console\" color=\"#808080\">&gt;\r\n&lt;\/<\/font><font face=\"Lucida Console\" color=\"#000080\">facelet-taglib<\/font><font face=\"Lucida Console\" color=\"#808080\">&gt;<\/font>\r\n<\/code><\/pre>\n<p>Im View selbst wird die Taglib dann mit diesem Tag &quot;taglib&quot; aufgerufen: <\/p>\n<pre><code><font face=\"Lucida Console\" color=\"#000080\">&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;<\/font><font face=\"Lucida Console\" color=\"#008080\">&lt;!DOCTYPE html PUBLIC &quot;-\/\/W3C\/\/DTD XHTML 1.0 Transitional\/\/EN&quot; \r\n &quot;http:\/\/www.w3.org\/TR\/xhtml1\/DTD\/xhtml1-transitional.dtd&quot;&gt;<\/font><font face=\"Lucida Console\" color=\"#808080\">&lt;<\/font><font face=\"Lucida Console\" color=\"#000080\">html <\/font><font face=\"Lucida Console\" color=\"#008000\">xmlns<\/font><font face=\"Lucida Console\" color=\"#808080\">=&quot;<\/font><font face=\"Lucida Console\" color=\"#0000ff\">http:\/\/www.w3.org\/1999\/xhtml<\/font><font face=\"Lucida Console\" color=\"#808080\">&quot;\r\n  <\/font><font face=\"Lucida Console\" color=\"#008000\">xmlns:h<\/font><font face=\"Lucida Console\" color=\"#808080\">=&quot;<\/font><font face=\"Lucida Console\" color=\"#0000ff\">http:\/\/java.sun.com\/jsf\/html<\/font><font face=\"Lucida Console\" color=\"#808080\">&quot;\r\n  <\/font><font face=\"Lucida Console\" color=\"#008000\">xmlns:f<\/font><font face=\"Lucida Console\" color=\"#808080\">=&quot;<\/font><font face=\"Lucida Console\" color=\"#0000ff\">http:\/\/java.sun.com\/jsf\/core<\/font><font face=\"Lucida Console\" color=\"#808080\">&quot;\r\n  <\/font><font face=\"Lucida Console\" color=\"#008000\">xmlns:x<\/font><font face=\"Lucida Console\" color=\"#808080\">=&quot;<\/font><font face=\"Lucida Console\" color=\"#0000ff\">http:\/\/www.rinke-solutions.de\/facelets\/ext<\/font><font face=\"Lucida Console\" color=\"#808080\">&quot;\r\n  &gt;\r\n&lt;<\/font><font face=\"Lucida Console\" color=\"#000080\">head<\/font><font face=\"Lucida Console\" color=\"#808080\">&gt;\r\n\t&lt;<\/font><font face=\"Lucida Console\" color=\"#000080\">meta <\/font><font face=\"Lucida Console\" color=\"#800000\">http-equiv<\/font><font face=\"Lucida Console\" color=\"#808080\">=&quot;<\/font><font face=\"Lucida Console\" color=\"#ff0000\">Content-Type<\/font><font face=\"Lucida Console\" color=\"#808080\">&quot; <\/font><font face=\"Lucida Console\" color=\"#800000\">content<\/font><font face=\"Lucida Console\" color=\"#808080\">=&quot;<\/font><font face=\"Lucida Console\" color=\"#ff0000\">text\/html; charset=UTF-8<\/font><font face=\"Lucida Console\" color=\"#808080\">&quot; \/&gt;\r\n\t&lt;<\/font><font face=\"Lucida Console\" color=\"#000080\">title<\/font><font face=\"Lucida Console\" color=\"#808080\">&gt;<\/font><font face=\"Lucida Console\" color=\"#000000\">My First Facelet<\/font><font face=\"Lucida Console\" color=\"#808080\">&lt;\/<\/font><font face=\"Lucida Console\" color=\"#000080\">title<\/font><font face=\"Lucida Console\" color=\"#808080\">&gt;\r\n&lt;\/<\/font><font face=\"Lucida Console\" color=\"#000080\">head<\/font><font face=\"Lucida Console\" color=\"#808080\">&gt;\r\n&lt;<\/font><font face=\"Lucida Console\" color=\"#000080\">body<\/font><font face=\"Lucida Console\" color=\"#808080\">&gt;\r\n  \r\n  &lt;<\/font><font face=\"Lucida Console\" color=\"#000080\">x:taglib <\/font><font face=\"Lucida Console\" color=\"#800000\">uri<\/font><font face=\"Lucida Console\" color=\"#808080\">=&quot;<\/font><font face=\"Lucida Console\" color=\"#ff0000\">http:\/\/www.rinke-solutions.de\/taglibs\/jsftest<\/font><font face=\"Lucida Console\" color=\"#808080\">&quot; <\/font><font face=\"Lucida Console\" color=\"#800000\">tagname<\/font><font face=\"Lucida Console\" color=\"#808080\">=&quot;<\/font><font face=\"Lucida Console\" color=\"#ff0000\">simpleInsert<\/font><font face=\"Lucida Console\" color=\"#808080\">&quot; <\/font><font face=\"Lucida Console\" color=\"#800000\">value<\/font><font face=\"Lucida Console\" color=\"#808080\">=&quot;<\/font><font face=\"Lucida Console\" color=\"#ff0000\">Test<\/font><font face=\"Lucida Console\" color=\"#808080\">&quot;\/&gt;\r\n  \r\n&lt;\/<\/font><font face=\"Lucida Console\" color=\"#000080\">body<\/font><font face=\"Lucida Console\" color=\"#808080\">&gt;\r\n&lt;\/<\/font><font face=\"Lucida Console\" color=\"#000080\">html<\/font><font face=\"Lucida Console\" color=\"#808080\">&gt;<\/font>\r\n<\/code><\/pre>\n<p>Was jetzt noch fehlt, ist die Integration komplexerer Tags mit Body oder Iteration. <\/p>\n","protected":false},"excerpt":{"rendered":"<p>Eine erste Version steht. Was mir bislang bei Facelets in einem ersten produktiven Projekt gefehlt hat, geht nun: Wie integriere ich Third-Party-JSP Taglibs, wenn meine Views gar keine JSPs verwenden? Die Idee beruht auf einer L\u00f6sung wie sie die Template-Engine &hellip; <a href=\"https:\/\/cogito-ergo-blog.de\/blog\/2006\/04\/27\/facelets-integrieren-third-party-jsp-taglibs\/\">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":[9],"tags":[],"_links":{"self":[{"href":"https:\/\/cogito-ergo-blog.de\/blog\/wp-json\/wp\/v2\/posts\/8"}],"collection":[{"href":"https:\/\/cogito-ergo-blog.de\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/cogito-ergo-blog.de\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/cogito-ergo-blog.de\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/cogito-ergo-blog.de\/blog\/wp-json\/wp\/v2\/comments?post=8"}],"version-history":[{"count":1,"href":"https:\/\/cogito-ergo-blog.de\/blog\/wp-json\/wp\/v2\/posts\/8\/revisions"}],"predecessor-version":[{"id":10005,"href":"https:\/\/cogito-ergo-blog.de\/blog\/wp-json\/wp\/v2\/posts\/8\/revisions\/10005"}],"wp:attachment":[{"href":"https:\/\/cogito-ergo-blog.de\/blog\/wp-json\/wp\/v2\/media?parent=8"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/cogito-ergo-blog.de\/blog\/wp-json\/wp\/v2\/categories?post=8"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/cogito-ergo-blog.de\/blog\/wp-json\/wp\/v2\/tags?post=8"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}