Java Reference
In-Depth Information
@FlowDefinition
beans, should be packaged into their corresponding Java packages and accompanied by a
beans.xml
file. The following outlines at the directory structure for a flow that is going to be packaged:
META-INF/faces-config.xml
META-INF/flows/exampleFlow/exampleFlow.xhtml
META-INF/flows/exampleFlow/intermediateFlow.xhtml
META-INF/flows/exampleFlow/endingFlow.xhtml
META-INF/beans.xml
org.javaee7.chapter02.jsf.ExampleFlow.java
org.javaee7.chapter02.jsf.FlowBean.java
Ajax Queues
By default, JSF Ajax requests are held in an Ajax request queue on the client in order to ensure that requests are
sent to the server in the correct order. When a request is sent, it goes to the queue and waits until its turn to be sent
to the server. After the request is sent to the server, a callback method is invoked that will remove that request from
the queue.
A new
delay
attribute for the
f:ajax
tag allows a developer to specify a value in milliseconds that will be used
to meter the time between server requests. If multiple requests arrive to the queue within the specified delay period,
then only the most recent request is sent to the server. This prevents multiple unnecessary server requests from being
sent, which can help performance in your application and reduce network traffic. Using the new attribute would be
similar to the following example:
<h:commandButton value="Send Message" action="#{ajaxBean.sendMessage()}">
<f:ajax delay="500"/>
</h:commandButton>
File Upload
JSF 2.2 includes a new file upload component that relies upon new Servlet 3.1 file upload support. The file upload
support can be Ajax enabled or non-Ajax enabled. A new JSF component named
inputFile
has been added to the list
of standard JSF components. This component can be used with or without the
f:ajax
tag, so files can be uploaded
with a page refresh (non-Ajax) or without (Ajax).
To utilize the
inputFile
component, it must be placed within a JSF form that has an
enctype
set to multipart/
form-data and no ID prepended. The
h:form
element contains the attributes
enctype
and
prependId
, which can be
used to set these values, respectively. The following line of code demonstrates how to set the attributes for a form
containing an
inputFile
component:
<h:form prependId="false" enctype="multipart/form-data">
The value of an
inputFile
component must be set to a managed bean variable that has a type of
javax.servlet.http.Part
(named
ajaxBean.upFile
in the following example). A JSF command component or
the
f:ajax
tag should be set to an action method within the managed bean, which will save the file to disk.
The following JSF view demonstrates the use of the
inputFile
component in a non-Ajax solution:
<h:form prependId="false" enctype="multipart/form-data">
Choose a file to upload to the server:
<br/>
<h:inputFile id="uploadFile" value="#{ajaxBean.upFile}">
<f:validator validatorId="FileValidator"/>