{"id":18,"date":"2006-06-15T19:08:01","date_gmt":"2006-06-15T18:08:01","guid":{"rendered":"https:\/\/bob-team.de\/wordpress\/?p=18"},"modified":"2025-10-26T13:23:58","modified_gmt":"2025-10-26T12:23:58","slug":"java-server-faces-jsf","status":"publish","type":"post","link":"https:\/\/bob-team.de\/wordpress\/2006\/06\/15\/java-server-faces-jsf\/","title":{"rendered":"Jakarta Faces"},"content":{"rendered":"<p>fr\u00fcher JavaServer Faces bzw. JSF<\/p>\n<p><a href=\"http:\/\/www.primefaces.org\/showcase\/index.xhtml?jfwid=ba1ec\">PrimeFaces<\/a>, <a href=\"https:\/\/primeflex.org\/installation\">PrimeFlex<\/a>, <a href=\"https:\/\/primefaces.github.io\/primefaces\/jsdocs\/index.html\">JavaScript API<\/a> + <a href=\"https:\/\/primefaces.org\/showcase-ext\/views\/home.jsf\">PrimeFaces Extensions<\/a><br \/>\n<a href=\"https:\/\/stackoverflow.com\/questions\/76133642\/how-do-i-add-to-a-project-with-jsf-3-0-an-embedded-tomcat-server-10-1-5-that-run\">project with JSF 3.0 and embedded tomcat server 10.1.5<\/a><br \/>\nsiehe auch: <a href=\"https:\/\/bob-team.de\/wordpress\/2024\/09\/13\/jakarta-standard-tag-library-jstl\/\">JSTL<\/a>, <a href=\"https:\/\/bob-team.de\/wordpress\/2017\/05\/30\/cdi-events-overview\/\">CDI<\/a><\/p>\n<h3>statische Navigation<\/h3>\n<p>Ist das <em>action<\/em>-Attribut einer <em>UICommand<\/em>-Komponente schon bei der Erstellung der JSP-Seite bekannt, spricht man von statischer Navigation.<\/p>\n<pre lang=\"xml\"><h:commandLink action=\"links\">\r\n   <h:outputText value=\"zur Linkseite\" \/>\r\n<\/h:commandLink><\/pre>\n<p>Der Wert des <em>action<\/em>-Attributs ist fest codiert. JSF schaut in der Konfigurationsdatei nach, ob es f\u00fcr die Seite, die diese Aktion ausgel\u00f6ste hat, eine Navigationsregel gibt, welche einen Navigationsfall besitzt, der den R\u00fcckgabewert (Wert des <em>action<\/em>-Attributs) erwartet. Ist dies der Fall, wird auf die Folgeseite weitergeleitet. Ist keine entsprechende Regel definiert, wird die gleiche Seite nochmal angezeigt.<\/p>\n<h3>dynamische Navigation<\/h3>\n<pre lang=\"xml\"><h:commandLink action=\"#{LinkList.update}\">\r\n   <h:outputText value=\"zur Linkseite\" \/>\r\n<\/h:commandLink><\/pre>\n<p>Bei der dynamischen Navigation wird beim <em>action<\/em>-Attribut auf eine Methode verwiesen. Diese muss folgende Anforderungen erf\u00fcllen:<\/p>\n<ul>\n<li>Sie muss \u00f6ffentlich (public) sein.<\/li>\n<li>Sie muss in einer Managed-Bean definiert sein und dieses muss in der Anwendungskonfigurationsdatei registriert sein.<\/li>\n<li>Sie darf keine Parameter erwarten.<\/li>\n<li>Sie muss einen String als R\u00fcckgabewert liefern.<\/li>\n<\/ul>\n<p>In der <em>faces-config.xml<\/em> wird nach einem Navigationsfall gesucht, dessen<br \/>\n<em>&lt;from-outcome&gt;<\/em>-Attribut mit dem R\u00fcckgabewert der Methode \u00fcbereinstimmt. Ist dies der Fall, wird auf die entsprechende Seite weitergeleitet, ansonsten auf die ausl\u00f6sende Seite zur\u00fcckverwiesen.<\/p>\n<h3>Cancel<\/h3>\n<p>Verwendet man Konverter oder Validatoren kann es vorkommen, das man eine Seite verlassen m\u00f6chte auch wenn die Validierung fehlschl\u00e4gt. Das Attribut <em>immediate<\/em> verhindert ein Update des Modells.<\/p>\n<pre lang=\"xml\"><h:commandButton immediate=&quot;true&quot; action=&quot;success&quot; value=&quot;Cancel&quot; \/><\/pre>\n<h3>Updates<\/h3>\n<p>ausgel\u00f6st <a href=\"https:\/\/stackoverflow.com\/questions\/11365094\/can-i-update-a-jsf-component-from-a-jsf-backing-bean-method\">vom Backing-Bean<\/a><\/p>\n<pre lang=\"java\">\r\nFacesContext.getCurrentInstance().getPartialViewContext().getRenderIds().add(\"foo:bar\");\r\n\/\/ oder\r\nPrimeFaces.current().ajax().update(\"foo:bar\");\r\n<\/pre>\n<h3>Messages<\/h3>\n<pre lang=\"java\">\r\nvar msg = new FacesMessage(FacesMessage.SEVERITY_ERROR, \"Error\", \"Der Fehler...\");\r\nFacesContext.getCurrentInstance().addMessage(null, msg);\r\n<\/pre>\n<pre lang=\"xml\">\r\n<h:form>\r\n  <p:messages id=\"messages \" globalOnly=\"false\" closable=\"true\" forIgnores=\"newsflash\"\r\n      showDetail=\"false\" showIcon=\"false\">\r\n    <p:autoUpdate\/>\r\n  <\/p:messages>\r\n  <p:commandButton value=\"Klick!\" action=\"#{bean.klick}\" update=\"@form\"\/>\r\n<\/h:form>\r\n<\/pre>\n<hr\/>\n<pre lang=\"java\">\r\nvar msg = new FacesMessage(FacesMessage.SEVERITY_INFO, \"Info\", \"Die Info...\");\r\nFacesContext.getCurrentInstance().addMessage(\"newsflash\", msg);\r\n<\/pre>\n<pre lang=\"xml\">\r\n<p:growl id=\"growl\" for=\"newsflash\" showDetail=\"true\" life=\"2500\"\/>\r\n<\/pre>\n<h3>Links<\/h3>\n<ul>\n<li><a href=\"http:\/\/jsf-faq.com\/\">JavaServer Faces FAQ<\/a><\/li>\n<li><a href=\"http:\/\/www.jsf-forum.de\/forum\/pages\/tutorials\/basics.jsf\">Basiswissen in JavaServer Faces<\/a><\/li>\n<li><a href=\"http:\/\/www.javamagazin.de\/itr\/online_artikel\/psecom,id,781,nodeid,11.html\">Aufbau einer Webanwendung mit JSF<\/a><\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>fr\u00fcher JavaServer Faces bzw. JSF PrimeFaces, PrimeFlex, JavaScript API + PrimeFaces Extensions project with JSF 3.0 and embedded tomcat server 10.1.5 siehe auch: JSTL, CDI statische Navigation Ist das action-Attribut einer UICommand-Komponente schon bei der Erstellung der JSP-Seite bekannt, spricht man von statischer Navigation. Der Wert des action-Attributs ist fest codiert. JSF schaut in der [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[3],"tags":[],"class_list":["post-18","post","type-post","status-publish","format-standard","hentry","category-java","entry"],"_links":{"self":[{"href":"https:\/\/bob-team.de\/wordpress\/wp-json\/wp\/v2\/posts\/18","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/bob-team.de\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/bob-team.de\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/bob-team.de\/wordpress\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/bob-team.de\/wordpress\/wp-json\/wp\/v2\/comments?post=18"}],"version-history":[{"count":15,"href":"https:\/\/bob-team.de\/wordpress\/wp-json\/wp\/v2\/posts\/18\/revisions"}],"predecessor-version":[{"id":4219,"href":"https:\/\/bob-team.de\/wordpress\/wp-json\/wp\/v2\/posts\/18\/revisions\/4219"}],"wp:attachment":[{"href":"https:\/\/bob-team.de\/wordpress\/wp-json\/wp\/v2\/media?parent=18"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/bob-team.de\/wordpress\/wp-json\/wp\/v2\/categories?post=18"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/bob-team.de\/wordpress\/wp-json\/wp\/v2\/tags?post=18"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}