All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.sun.jsftemplating.handlers.NavigationHandlers Maven / Gradle / Ivy

/*
 * The contents of this file are subject to the terms 
 * of the Common Development and Distribution License 
 * (the License).  You may not use this file except in
 * compliance with the License.
 * 
 * You can obtain a copy of the license at 
 * https://jsftemplating.dev.java.net/cddl1.html or
 * jsftemplating/cddl1.txt.
 * See the License for the specific language governing 
 * permissions and limitations under the License.
 * 
 * When distributing Covered Code, include this CDDL 
 * Header Notice in each file and include the License file 
 * at jsftemplating/cddl1.txt.  
 * If applicable, add the following below the CDDL Header, 
 * with the fields enclosed by brackets [] replaced by
 * you own identifying information: 
 * "Portions Copyrighted [year] [name of copyright owner]"
 * 
 * Copyright 2006 Sun Microsystems, Inc. All rights reserved.
 */
/*
 * NavigationHandlers.java
 *
 * Created on December 6, 2004, 11:06 PM
 */
package com.sun.jsftemplating.handlers;

import java.io.IOException;

import javax.faces.component.UIViewRoot;
import javax.faces.context.FacesContext;

import com.sun.jsftemplating.annotation.Handler;
import com.sun.jsftemplating.annotation.HandlerInput;
import com.sun.jsftemplating.annotation.HandlerOutput;
import com.sun.jsftemplating.layout.descriptors.handler.HandlerContext;


/**
 *  

This class contains * {@link com.sun.jsftemplating.layout.descriptors.handler.Handler} * methods that perform navigation oriented actions.

* * @author Ken Paulsen ([email protected]) */ public class NavigationHandlers { /** *

Default Constructor.

*/ public NavigationHandlers() { } /** *

This handler returns a UIViewRoot. If the * id parameter is supplied it will return the requested * UIViewRoot (this may fail and cause an exception). If * the id is not supplied, it will return the * current UIViewRoot. The result will be returned in * an output parameter named viewRoot.

*/ @Handler(id="getUIViewRoot", input={ @HandlerInput(name="id", type=String.class) }, output={ @HandlerOutput(name="viewRoot", type=UIViewRoot.class) }) public void getUIViewRoot(HandlerContext context) { String pageName = (String) context.getInputValue("id"); FacesContext ctx = context.getFacesContext(); UIViewRoot root = null; if (pageName == null) { root = ctx.getViewRoot(); } else { if (pageName.charAt(0) != '/') { // Ensure we start w/ a '/' pageName = "/" + pageName; } root = ctx.getApplication().getViewHandler(). createView(ctx, pageName); } context.setOutputValue("viewRoot", root); } /** *

This method gives you a "resource URL" as defined by the * ViewHandler's getActionURL(String * url) method.

* * @param handlerCtx The {@link HandlerContext}. */ @Handler(id="getActionURL", input={ @HandlerInput(name="url", type=String.class, required=true) }, output={ @HandlerOutput(name="result", type=String.class) }) public static void getActionURL(HandlerContext handlerCtx) { String url = (String) handlerCtx.getInputValue("url"); FacesContext ctx = handlerCtx.getFacesContext(); handlerCtx.setOutputValue("result", ctx.getApplication(). getViewHandler().getActionURL(ctx, url)); } /** *

This method gives you a "resource URL" as defined by the * ViewHandler's getResourceURL(String * url) method.

* * @param handlerCtx The {@link HandlerContext}. */ @Handler(id="getResourceURL", input={ @HandlerInput(name="url", type=String.class, required=true) }, output={ @HandlerOutput(name="result", type=String.class) }) public static void getResourceURL(HandlerContext handlerCtx) { String url = (String) handlerCtx.getInputValue("url"); FacesContext ctx = handlerCtx.getFacesContext(); handlerCtx.setOutputValue("result", ctx.getApplication(). getViewHandler().getResourceURL(ctx, url)); } /** *

This handler navigates to the given page. page may * either be a UIViewRoot or a String * representing a UIViewRoot. Passing in a * String name of a UIViewRoot will always * create a new UIViewRoot. Passing in the * UIViewRoot provides an opportunity to customize the * UIComponent tree that will be displayed.

* *

The {@link #getUIViewRoot(HandlerContext)} handler provides a way * to obtain a UIViewRoot.

* *

Input value: "page" -- Type: Object (should be a * String or a UIViewRoot).

* * @param context The {@link HandlerContext}. */ @Handler(id="navigate", input={ @HandlerInput(name="page", type=Object.class, required=true) }) public static void navigate(HandlerContext context) { Object page = context.getInputValue("page"); UIViewRoot root = null; FacesContext ctx = context.getFacesContext(); if (page instanceof String) { // Create a new UIViewRoot with the given id String strPage = (String) page; if (strPage.charAt(0) != '/') { // Ensure we start w/ a '/' strPage = "/" + strPage; } root = ctx.getApplication().getViewHandler(). createView(ctx, strPage); } else if (page instanceof UIViewRoot) { // We recieved a UIViewRoot, use it... root = (UIViewRoot) page; } else { throw new IllegalArgumentException("Type '" + page.getClass().getName() + "' is not valid. It must be a String or UIViewRoot."); } // Set the UIViewRoot so that it will be displayed ctx.setViewRoot(root); } /** *

This handler redirects to the given page.

* *

Input value: "page" -- Type: String

* * @param context The {@link HandlerContext}. */ @Handler(id="redirect", input={ @HandlerInput(name="page", type=String.class, required=true) }) public static void redirect(HandlerContext context) { String page = (String) context.getInputValue("page"); FacesContext ctx = context.getFacesContext(); try { ctx.getExternalContext().redirect(page); ctx.responseComplete(); } catch (IOException ex) { throw new RuntimeException( "Unable to navigate to page '" + page + "'!", ex); } } /** *

This handler forwards to the given page. Normally you will want * to do {@link #navigate} as that follows JSF patterns. This uses * the raw dispatcher forward mechanism (via the ExternalContext).

* *

Input value: "url" -- Type: String

* * @param context The {@link HandlerContext}. */ @Handler(id="dispatch", input={ @HandlerInput(name="path", type=String.class, required=true) }) public static void dispatch(HandlerContext context) { String path = (String) context.getInputValue("path"); FacesContext ctx = context.getFacesContext(); try { ctx.getExternalContext().dispatch(path); ctx.responseComplete(); } catch (IOException ex) { throw new RuntimeException( "Unable to navigate to path '" + path + "'!", ex); } } }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy