{"id":112,"date":"2016-09-23T11:58:45","date_gmt":"2016-09-23T09:58:45","guid":{"rendered":"https:\/\/www.schoenberg-solutions.de\/arndtblog\/?p=112"},"modified":"2022-12-04T11:59:04","modified_gmt":"2022-12-04T10:59:04","slug":"jee7-jsf-gui-komponenten-auslagern","status":"publish","type":"post","link":"https:\/\/www.schoenberg-solutions.de\/arndtblog\/?p=112","title":{"rendered":"JEE7: JSF Gui Komponenten auslagern"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\">Umgebung<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Wildfly 10<\/li>\n\n\n\n<li>EE7<\/li>\n<\/ul>\n\n\n\n<p>Neben den Java Klassen werden in einer Web-Anwendung auch die JSF-Darstellungskomponenten verwaltet. Dies sind ganze HTML-Seiten, Includes in XHTML-Seiten, Templates, Grafiken und andere Darstellungsbeschreibungen. Auch diese k\u00f6nnen in externe jar-Dateien ausgelagert werden. Bei der Bereitstellung gibt es Einschr\u00e4nkungen (vergl. Ende dieses Abschnitts), die aber keine Einschr\u00e4nkungen f\u00fcr die Entwicklung und die Auslagerung in separate Projekte f\u00fcr die Wiederverwendung darstellen. Das Auslagern von EJB Bestandteilen ist in <a href=\"https:\/\/www.schoenberg-solutions.de\/roller\/arndtsBlog\/entry\/jee7-mehrere-archive-f%C3%BCr-entit%C3%A4ten\" target=\"_blank\" rel=\"noreferrer noopener\">diesem Post<\/a> und das Auslagern von Java Komponenten aus JSF ist in <a href=\"https:\/\/www.schoenberg-solutions.de\/roller\/arndtsBlog\/entry\/jee7-managed-beans-und-jsf\" target=\"_blank\" rel=\"noreferrer noopener\">diesem Post<\/a> besprochen worden.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Ablage in jar-Archiven<\/h2>\n\n\n\n<p>Bei Start des Anwendungs-Servers werden folgende Ordner nach Ressourcen durchsucht<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Im Wurzelverzeichnis der Webanwendung oder des Web-Moduls das Verzeichnis \/resources<\/li>\n\n\n\n<li>Das Verzeichnis \/META-INF\/resources in allen Jar-Dateien des Classpaths<\/li>\n<\/ul>\n\n\n\n<p>In diese Ressourcen-Verzeichnisse k\u00f6nnen alle oben genannten Ressourcen ausgelagert werden.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Pfad zu den Ressourcen im Web-Projekt \u00e4ndern<\/h2>\n\n\n\n<p>Web-Projekte suchen die Ressourcen in der Grundeinstellung im Verzeichnis \/resources des Web-Root. Dieser (\u00f6ffentliche) Pfad kann seit JSF 2.2 \u00fcber einen Parameter in der web.xml ver\u00e4ndert werden.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">&lt;context-param&gt;\n  &lt;?param-name&gt;\n    javax.faces.WEBAPP_RESOURCES_DIRECTORY\n  &lt;\/param-name&gt;\n  &lt;param-value&gt;\/WEB-INF\/resources&lt;\/param-value&gt;\n&lt;\/context-param&gt;\n<\/pre>\n\n\n\n<p>Das obige Beispiel verschiebt den Ressourcen-Pfad in das nicht \u00f6ffentliche Verzeichnis WEB-INF.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Zugriff auf CSS<\/h3>\n\n\n\n<p>CSS-Dateien k\u00f6nnen seit JSF 2.2 auf zwei Arten in die JSF Seiten eingebunden werden. Entweder \u00fcber oder wie bisher im Kopf der Datei, wobei die Ressource \u00fcber #{resource angesprochen wird.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">&lt;link rel=\"stylesheet\" type=\"text\/css\" href=\"#{resource['\/resBase\/css\/common\/ecrBase.css']}\" &gt;&lt;\/link&gt;\n<\/pre>\n\n\n\n<p>(alte Notation mit festem Pfad z.B. f\u00fcr ein Image: #{facesContext.externalContext.requestContextPath}\/resources\/image\/favicon.png) Das Attribut library schafft eine weitere Strukturierungsebne auf die ich hier nicht weiter eingehe. Es kann im einfachen Fall auch weggelassen werden.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Nutzung von JSF Ressourcen innerhalb von CSS-Dateien<\/h3>\n\n\n\n<p>Innerhalb der CSS Dateien werden die Ressourcen ebenfalls \u00fcber die EL angesprochen.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">background-image: url(\"#{resource['img\/glyphicons-halflings.png']}\");\n<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Zugriff auf Javascript<\/h3>\n\n\n\n<p>Im h:head Tag eines Faclets kann wie bisher allerdings mit neuer Notation auf die Dateien zugegriffen werden.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">&lt;script type=\"text\/javascript\" src=\"#{resource['\/resBase\/jscript\/common\/timeOutTimer.js']}\" &gt;&lt;\/script&gt;\n<\/pre>\n\n\n\n<p>Alternativ kann das folgende JSF-Tag verwendet werden.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">&lt;h:outputScript name=\"resBase\/jscript\/common\/timeOutTimer.js\" target=\"head\" \/&gt;\n<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">JSF-Templates<\/h3>\n\n\n\n<p>Der Pfad f\u00fcr Templates kann relativ zu oben bestimmten Ressourcen angegeben werden und damit in allen eingelesenen Dateien liegen. Zumindest in Wildfly 10 muss allerdings ein jar-Archiv, das solche Ressourcen h\u00e4lt, im lib Verzeichnis des Web-Moduls liegen, damit der Zugriff funktioniert.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">&lt;ui:composition template=\"\/common\/sometemplate.xhtml\" \/&gt;\n<\/pre>\n\n\n\n<p>In der aktuellen MyEclipse Version werden ausgelagerte Dateien nicht erkannt und f\u00fchren zu einer Warnung im xhtml-Editor. Zur Laufzeit gibt es keine Probleme.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">JSF-Includes<\/h3>\n\n\n\n<p>F\u00fcr JSF-Includes gilt das Gleiche wie f\u00fcr JSF-Templates.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">&lt;ui:include src=\"\/common\/someinclude.xhtml\" \/&gt;\n<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">JSF-Composits<\/h3>\n\n\n\n<p>F\u00fcr JSF-Composits gilt das Gleiche wie f\u00fcr JSF-Templates.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Grafiken<\/h3>\n\n\n\n<p>Um auf Grafiken aus Ressourcen zuzugreifen kann statt src das Attribut name verwendet werden<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">&lt;h:graphicImage name=\"\/resBase\/image\/helper\/1x1-trans.gif\" width=\"5\" height=\"1\" \/&gt;\n<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Umgebung Neben den Java Klassen werden in einer Web-Anwendung auch die JSF-Darstellungskomponenten verwaltet. Dies sind ganze HTML-Seiten, Includes in XHTML-Seiten, Templates, Grafiken und andere Darstellungsbeschreibungen. Auch diese k\u00f6nnen in externe jar-Dateien ausgelagert werden. Bei der Bereitstellung gibt es Einschr\u00e4nkungen (vergl. Ende dieses Abschnitts), die aber keine Einschr\u00e4nkungen f\u00fcr die Entwicklung und die Auslagerung in separate [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4,7],"tags":[],"class_list":["post-112","post","type-post","status-publish","format-standard","hentry","category-jee","category-wildfly"],"_links":{"self":[{"href":"https:\/\/www.schoenberg-solutions.de\/arndtblog\/index.php?rest_route=\/wp\/v2\/posts\/112","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.schoenberg-solutions.de\/arndtblog\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.schoenberg-solutions.de\/arndtblog\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.schoenberg-solutions.de\/arndtblog\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.schoenberg-solutions.de\/arndtblog\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=112"}],"version-history":[{"count":1,"href":"https:\/\/www.schoenberg-solutions.de\/arndtblog\/index.php?rest_route=\/wp\/v2\/posts\/112\/revisions"}],"predecessor-version":[{"id":113,"href":"https:\/\/www.schoenberg-solutions.de\/arndtblog\/index.php?rest_route=\/wp\/v2\/posts\/112\/revisions\/113"}],"wp:attachment":[{"href":"https:\/\/www.schoenberg-solutions.de\/arndtblog\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=112"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.schoenberg-solutions.de\/arndtblog\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=112"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.schoenberg-solutions.de\/arndtblog\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=112"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}