Processing JSF Input and Generating a Non-JSF Response
If user input must be processed before the response is rendered using some other type of resource than a JSF view, you can do so in a JSF action method or an action event listener. When the input is processed, render the response any way you like, and just tell JSF that a response has already been sent to prevent it from trying to generate a response from the view.
Let’s say that you have a JSF view containing links
to external resources, such as referral links to Amazon.com. When the
user clicks a link, you want to log this fact before you redirect to
the book details page on Amazon.com—maybe to make sure their
click-count is accurate. The link may be represented by a
<h:commandLink>
action element, like this:
<h:form> <h:commandLink action="#{logger.logJSFBookClick}"> <h:outputText value="JavaServer Faces, Hans Bergsten (O'Reilly)" /> </h:commandLink> </h:form>
The <h:commandLink>
action element must be
nested within an <h:form>
element, and it
generates an HTML link element with a JavaScript event handler that
submits the form when the link is clicked. What’s
most important in this example is that it’s bound to
an action method that may look like this:
public String logJSFBookClick( ) { // Whatever is needed to log the event ... FacesContext context = FacesContext.getCurrentInstance( ); ExternalContext ec = context.getExternalContext( ); try { ec.redirect("http://www.amazon.com/exec/obidos/ASIN/0596005393"); } catch (IOException ...
Get JavaServer Faces now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.