Dear all,
I am starting to really use JSF 2.2. I am trying to use Faces Flows. I
am starting with a very simple flow, whose name is "flow1".
So, under src/main/webapp, I have a flow1 directory containing
flow1-flow.xml
flow1.xhtml
flow1b.xhtml
flow1-flow.xml contains :
<?xml version="1.0" encoding="UTF-8"?>
<faces-config
xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'
xmlns='http://xmlns.jcp.org/xml/ns/javaee'
xsi:schemaLocation='http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/web-facesconfig_2_2.xsd'
version='2.2' >
<flow-definition id="flow1">
<flow-return id="returnFromFlow1">
<from-outcome>/accueil</from-outcome>
</flow-return>
</flow-definition>
</faces-config>
With such a simple config, using conventions would be a better choice
than configuration, but I plan to add more things to it... :-)
I use a @FlowScoped bean declared this way :
@Named
@FlowScoped("flow1")
public class MinintFileContext implements Serializable {
....
}
and it does not work. I have the following exception :
javax.servlet.ServletException: javax.servlet.ServletException:
javax.el.ELException:
javax.enterprise.context.ContextNotActiveException: WebBeans context
with scope type annotation @FlowScoped does not exist within current thread
To make it work, I have to use @ManagedBean instead of @Named.
My first question is : I do not understand why... In my (obviously
wrong) understanding, @Named was a super-set of CDI-managed beans,
including @ManagedBean-s.
Another question...
I am using PrimeFaces p:menubar . I noticed that I can not use "/flow1"
as the outcome of a menuitem
Ex : <p:menuitem value="Blah blah blah" outcome="/flow1" />
I have to use
<p:menuitem value="Blah blah blah" outcome="/flow1/flow1" />
Why ? This might be a PF-specific question.
Finally, I am failing to use the flow-return configuration.
I tried
<p:commandButton value="Terminer" action="returnFromFlow1"/>
and
<h:commandButton value="Terminer" action="returnFromFlow1"/>
But it just does not work.
So, I tried to change the config to
<flow-return id="returnFromFlow1">
<from-outcome>#{minintFileContext.returnValue}</from-outcome>
</flow-return>
and added a
public String getReturnValue() {
return "/accueil";
}
method to he MinintFileContext bean, but it does not work better.
Any idea ?
Thanks in advance
I have the following JSF-related or generic dependencies (I mean that I
remove in-house dependencies from the following tree) :
[INFO] --- maven-dependency-plugin:2.1:tree (default-cli) @
faces-dependencies ---
[INFO] fr.senat:faces-dependencies:jar:4.0.0-SNAPSHOT
[INFO] +- commons-lang:commons-lang:jar:2.6:compile
[INFO] +- org.apache.commons:commons-lang3:jar:3.1:compile
[INFO] +- org.apache.tomcat:tomcat-catalina:jar:7.0.47:provided
[INFO] | +- org.apache.tomcat:tomcat-servlet-api:jar:7.0.47:provided
[INFO] | +- org.apache.tomcat:tomcat-juli:jar:7.0.47:provided
[INFO] | +- org.apache.tomcat:tomcat-annotations-api:jar:7.0.47:provided
[INFO] | +- org.apache.tomcat:tomcat-api:jar:7.0.47:provided
[INFO] | \- org.apache.tomcat:tomcat-util:jar:7.0.47:provided
[INFO] +- org.apache.myfaces.core:myfaces-api:jar:2.2.0:compile
[INFO] +- org.apache.myfaces.core:myfaces-impl:jar:2.2.0:compile
[INFO] | +- commons-collections:commons-collections:jar:3.2:compile
[INFO] | +- commons-codec:commons-codec:jar:1.3:compile
[INFO] | +- commons-beanutils:commons-beanutils:jar:1.8.3:compile
[INFO] | | \- commons-logging:commons-logging:jar:1.1.1:compile
[INFO] | \- commons-digester:commons-digester:jar:1.8:compile
[INFO] +-
org.apache.myfaces.extensions.cdi.modules:myfaces-extcdi-jsf20-module-api:jar:1.0.5:compile
[INFO] | \-
org.apache.myfaces.extensions.cdi.core:myfaces-extcdi-core-api:jar:1.0.5:compile
[INFO] +-
org.apache.myfaces.extensions.cdi.modules:myfaces-extcdi-jsf20-module-impl:jar:1.0.5:runtime
[INFO] +-
org.apache.myfaces.extensions.cdi.modules:myfaces-extcdi-jpa1-module-api:jar:1.0.5:compile
[INFO] +-
org.apache.myfaces.extensions.cdi.modules:myfaces-extcdi-jpa1-module-impl:jar:1.0.5:runtime
[INFO] | \-
org.apache.myfaces.extensions.cdi.core:myfaces-extcdi-core-impl:jar:1.0.5:runtime
[INFO] +-
org.apache.myfaces.extensions.cdi.modules:myfaces-extcdi-bv1-module-api:jar:1.0.5:compile
[INFO] +-
org.apache.myfaces.extensions.cdi.modules:myfaces-extcdi-bv1-module-impl:jar:1.0.5:runtime
[INFO] +-
org.apache.myfaces.extensions.cdi.modules:myfaces-extcdi-scripting-module-api:jar:1.0.5:compile
[INFO] +-
org.apache.myfaces.extensions.cdi.modules:myfaces-extcdi-scripting-module-impl:jar:1.0.5:runtime
[INFO] +-
org.apache.myfaces.extensions.cdi.modules:myfaces-extcdi-message-module-api:jar:1.0.5:compile
[INFO] +-
org.apache.myfaces.extensions.cdi.modules:myfaces-extcdi-message-module-impl:jar:1.0.5:runtime
[INFO] +-
org.apache.geronimo.specs:geronimo-atinject_1.0_spec:jar:1.0:compile
[INFO] +- org.apache.geronimo.specs:geronimo-jcdi_1.0_spec:jar:1.0:compile
[INFO] +- org.apache.geronimo.specs:geronimo-jta_1.1_spec:jar:1.1.1:compile
[INFO] +-
org.apache.geronimo.specs:geronimo-interceptor_1.1_spec:jar:1.0:compile
[INFO] +-
org.apache.geronimo.specs:geronimo-validation_1.0_spec:jar:1.1:compile
[INFO] +-
org.apache.geronimo.specs:geronimo-servlet_3.0_spec:jar:1.0:provided
[INFO] +- org.apache.geronimo.specs:geronimo-el_2.2_spec:jar:1.0.4:provided
[INFO] +- org.apache.geronimo.specs:geronimo-jsp_2.1_spec:jar:1.0.1:compile
[INFO] +-
org.apache.myfaces.buildtools:myfaces-builder-annotations:jar:1.0.9:compile
[INFO] +- dom4j:dom4j:jar:1.6.1:compile
[INFO] | \- xml-apis:xml-apis:jar:1.0.b2:compile
[INFO] +- org.apache.openwebbeans:openwebbeans-impl:jar:1.2.1:runtime
(scope not updated to compile)
[INFO] | \- org.apache.xbean:xbean-finder-shaded:jar:3.14:runtime
[INFO] +- org.apache.openwebbeans:openwebbeans-jsf:jar:1.2.1:runtime
[INFO] +- org.apache.openwebbeans:openwebbeans-web:jar:1.2.1:runtime
(scope not updated to compile)
[INFO] +- org.apache.openwebbeans:openwebbeans-spi:jar:1.2.1:runtime
[INFO] +- org.apache.openwebbeans:openwebbeans-el22:jar:1.2.1:compile
[INFO] +- org.apache.openwebbeans:openwebbeans-tomcat7:jar:1.2.1:compile
[INFO] +- org.apache.xbean:xbean-asm4-shaded:jar:3.15:compile
[INFO] +- org.primefaces-elite:primefaces:jar:4.0.6:compile
[INFO] +- org.omnifaces:omnifaces:jar:1.6.3:compile
[INFO] \- javax.servlet:jstl:jar:1.2:compile
My faces-config.xml contains :
<?xml version="1.0" encoding="UTF-8"?>
<faces-config xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchemainstance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/web-facesconfig_2_2.xsd"
version="2.2">
<application>
<locale-config>
<default-locale>fr_FR</default-locale>
<supported-locale>fr</supported-locale>
</locale-config>
</application>
<factory>
<exception-handler-factory>fr.senat.faces.exceptions.StdExceptionHandlerFactory</exception-handler-factory>
</factory>
<lifecycle>
<phase-listener>org.omnifaces.eventlistener.ResetInputAjaxActionListener</phase-listener>
</lifecycle>
</faces-config>
And my web.xml (with security rules stripped...) is :
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:web="http://java.sun.com/xml/ns/javaee/webapp_3_0.xsd"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
id="senateurs" version="3.0">
<display-name>Applications Sénateurs</display-name>
<context-param>
<param-name>javax.faces.FACELETS_LIBRARIES</param-name>
<param-value>/WEB-INF/sens.taglib.xml</param-value>
</context-param>
<welcome-file-list>
<welcome-file>accueil.xhtml</welcome-file>
</welcome-file-list>
<context-param>
<param-name>primefaces.SUBMIT</param-name>
<param-value>true</param-value>
</context-param>
<!-- JSF standard parameters -->
<context-param>
<param-name>javax.faces.PROJECT_STAGE</param-name>
<param-value>Production</param-value>
</context-param>
<context-param>
<param-name>javax.faces.PARTIAL_STATE_SAVING</param-name>
<param-value>true</param-value>
</context-param>
<context-param>
<param-name>javax.faces.DATETIMECONVERTER_DEFAULT_TIMEZONE_IS_SYSTEM_TIMEZONE</param-name>
<param-value>true</param-value>
</context-param>
<context-param>
<description>
If this parameter is set to true and the submitted value of a
component is
the empty string, the submitted value will be set to null
</description>
<param-name>javax.faces.INTERPRET_EMPTY_STRING_SUBMITTED_VALUES_AS_NULL</param-name>
<param-value>true</param-value>
</context-param>
<context-param>
<description>State saving method: "client" or "server" (= default)
See JSF Specification 2.5.3</description>
<param-name>javax.faces.STATE_SAVING_METHOD</param-name>
<param-value>server</param-value>
</context-param>
<!-- MyFaces specific parameters -->
<context-param>
<description>Only applicable if state saving method is "server" (=
default).
Defines the amount (default = 20) of the latest views are stored in
session.</description>
<param-name>org.apache.myfaces.NUMBER_OF_VIEWS_IN_SESSION</param-name>
<param-value>20</param-value>
</context-param>
<context-param>
<description>Only applicable if state saving method is "server" (=
default).
If true (default) the state will be serialized to a byte stream
before it
is written to the session.
If false the state will not be serialized to a byte
stream.</description>
<param-name>org.apache.myfaces.SERIALIZE_STATE_IN_SESSION</param-name>
<param-value>true</param-value>
</context-param>
<context-param>
<description>Only applicable if state saving method is "server" (=
default) and if
org.apache.myfaces.SERIALIZE_STATE_IN_SESSION is true (= default)
If true (default) the serialized state will be compressed before it
is written to the session. If false the state will not be
compressed.</description>
<param-name>org.apache.myfaces.COMPRESS_STATE_IN_SESSION</param-name>
<param-value>true</param-value>
</context-param>
<context-param>
<description>This parameter tells MyFaces if javascript code should
be allowed in the
rendered HTML output.
If javascript is allowed, command_link anchors will have javascript
code
that submits the corresponding form.
If javascript is not allowed, the state saving info and nested
parameters
will be added as url parameters.
Default: "true"</description>
<param-name>org.apache.myfaces.ALLOW_JAVASCRIPT</param-name>
<param-value>true</param-value>
</context-param>
<context-param>
<param-name>org.apache.myfaces.DETECT_JAVASCRIPT</param-name>
<param-value>false</param-value>
</context-param>
<context-param>
<description>If true, rendered HTML code will be formatted, so that
it is "human readable".
i.e. additional line separators and whitespace will be written,
that do not
influence the HTML code.
Default: "true"</description>
<param-name>org.apache.myfaces.PRETTY_HTML</param-name>
<param-value>true</param-value>
</context-param>
<context-param>
<description>If true, a javascript function will be rendered that
is able to restore the
former vertical scroll on every request. Convenient feature if you
have pages
with long lists and you do not want the browser page to always jump
to the top
if you trigger a link or button action that stays on the same page.
Default: "false"</description>
<param-name>org.apache.myfaces.AUTO_SCROLL</param-name>
<param-value>true</param-value>
</context-param>
<!-- les context-param-s suivants sont tous de recherche de
performances -->
<!-- utilisation de JUEL -->
<context-param>
<param-name>org.apache.myfaces.EXPRESSION_FACTORY</param-name>
<param-value>de.odysseus.el.ExpressionFactoryImpl</param-value>
</context-param>
<!-- utilisation du resolver EL de OpenWebBeans -->
<context-param>
<param-name>org.apache.myfaces.EL_RESOLVER_COMPARATOR</param-name>
<param-value>org.apache.myfaces.el.unified.OpenWebBeansELResolverComparator</param-value>
</context-param>
<!-- desactivation du support des JSP (voir
https://issues.apache.org/jira/browse/MYFACES-3078 )-->
<context-param>
<param-name>org.apache.myfaces.SUPPORT_JSP</param-name>
<param-value>false</param-value>
</context-param>
<!-- ne jamais relire les fichiers XHTML -->
<context-param>
<param-name>javax.faces.FACELETS_REFRESH_PERIOD</param-name>
<param-value>-1</param-value>
</context-param>
<!-- aucun check de duplicité d'id en prod (voir
http://myfaces.apache.org/core20/myfaces-impl/webconfig.html#org_apache_myfaces_CHECK_ID_PRODUCTION_MODE)
-->
<context-param>
<param-name>org.apache.myfaces.CHECK_ID_PRODUCTION_MODE</param-name>
<param-value>false</param-value>
</context-param>
<!-- voir
http://myfaces.apache.org/core20/myfaces-impl/webconfig.html#org_apache_myfaces_VIEW_UNIQUE_IDS_CACHE_ENABLED
-->
<context-param>
<param-name>org.apache.myfaces.VIEW_UNIQUE_IDS_CACHE_ENABLED</param-name>
<param-value>true</param-value>
</context-param>
<!-- voir
http://myfaces.apache.org/core20/myfaces-impl/webconfig.html#org_apache_myfaces_CACHE_EL_EXPRESSIONS
-->
<context-param>
<param-name>org.apache.myfaces.CACHE_EL_EXPRESSIONS</param-name>
<param-value>strict</param-value>
</context-param>
<!-- voir
http://myfaces.apache.org/core20/myfaces-impl/webconfig.html#org_apache_myfaces_SAVE_STATE_WITH_VISIT_TREE_ON_PSS
-->
<context-param>
<param-name>org.apache.myfaces.SAVE_STATE_WITH_VISIT_TREE_ON_PSS</param-name>
<param-value>false</param-value>
</context-param>
<resource-ref>
<description>Datasource d'authentification</description>
<res-ref-name>jdbc/authSen</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
<!-- theme de l'interface PrimeFaces -->
<!-- <context-param> -->
<!-- <param-name>primefaces.THEME</param-name> -->
<!-- <param-value>humanity</param-value> -->
<!-- </context-param> -->
<!-- Listener for OpenWebBeans configuration -->
<listener>
<listener-class>
net.sf.ehcache.constructs.web.ShutdownListener
</listener-class>
</listener>
<listener>
<listener-class>
org.apache.webbeans.servlet.WebBeansConfigurationListener
</listener-class>
</listener>
<!-- Listener for Senat / Hibernate -->
<listener>
<listener-class>
fr.senat.faces.listeners.SenatSessionListener
</listener-class>
</listener>
<filter>
<filter-name>HibernateUserFromPrincipalFilter</filter-name>
<filter-class>fr.senat.faces.filters.HibernateUserFromPrincipalFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>HibernateUserFromPrincipalFilter</filter-name>
<url-pattern>*.xhtml</url-pattern>
</filter-mapping>
<filter>
<filter-name>HibernateSessionConversationFilter</filter-name>
<filter-class>fr.senat.faces.filters.HibernateSessionConversationFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>HibernateSessionConversationFilter</filter-name>
<url-pattern>*.xhtml</url-pattern>
</filter-mapping>
<servlet>
<description>Affiche une photo de l'annuaire</description>
<display-name>PhotoViewer</display-name>
<servlet-name>PhotoViewer</servlet-name>
<servlet-class>senat.applications.photos.PhotoViewer</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>PhotoViewer</servlet-name>
<url-pattern>/PhotoViewer</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>Faces Servlet</servlet-name>
<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>*.xhtml</url-pattern>
</servlet-mapping>
<session-config>
<session-timeout>15</session-timeout>
</session-config>
<error-page>
<error-code>403</error-code>
<location>/unrestricted/acces_refuse.html</location>
</error-page>
<error-page>
<error-code>404</error-code>
<location>/unrestricted/page_non_trouvee.html</location>
</error-page>
<!-- JSF lève cette exception sur une page non trouvée -->
<error-page>
<error-code>500</error-code>
<location>/unrestricted/erreur_interne.xhtml</location>
</error-page>
</web-app>
|
| AVANT D'IMPRIMER, PENSEZ A L'ENVIRONNEMENT.
|