Class ViewHandler

  • Direct Known Subclasses:
    ViewHandlerWrapper


    public abstract class ViewHandler
    extends java.lang.Object

    ViewHandler is the pluggablity mechanism for allowing implementations of or applications using the JavaServer Faces specification to provide their own handling of the activities in the Render Response and Restore View phases of the request processing lifecycle. This allows for implementations to support different response generation technologies, as well as alternative strategies for saving and restoring the state of each view. An implementation of this class must be thread-safe.

    Please see StateManager for information on how the ViewHandler interacts the StateManager.

    Version 2 of the specification formally introduced the concept of View Declaration Language. A View Declaration Language (VDL) is a syntax used to declare user interfaces comprised of instances of JSF UIComponents. Any of the responsibilities of the ViewHandler that specifically deal with the VDL sub-system are now the domain of the VDL implementation. These responsibilities are defined on the ViewDeclarationLanguage class. The ViewHandler provides getViewDeclarationLanguage(javax.faces.context.FacesContext, java.lang.String) as a convenience method to access the VDL implementation given a viewId.

    • Field Summary

      Fields 
      Modifier and Type Field Description
      static java.lang.String CHARACTER_ENCODING_KEY
      The key, in the session's attribute set, under which the response character encoding may be stored and retrieved.
      static java.lang.String DEFAULT_FACELETS_SUFFIX
      The value to use for the default extension for Facelet based XHTML pages if the webapp is using url extension mapping.
      static java.lang.String DEFAULT_SUFFIX
      The value to use for the default extension if the webapp is using url extension mapping.
      static java.lang.String DEFAULT_SUFFIX_PARAM_NAME
      Allow the web application to define a list of alternate suffixes for pages containing JSF content.
      static java.lang.String DISABLE_FACELET_JSF_VIEWHANDLER_PARAM_NAME
      If this param is set, and calling toLowerCase().equals("true") on a String representation of its value returns true, the default ViewHandler must behave as specified in the latest 1.2 version of this specification.
      static java.lang.String FACELETS_BUFFER_SIZE_PARAM_NAME
      The buffer size to set on the response when the ResponseWriter is generated.
      static java.lang.String FACELETS_DECORATORS_PARAM_NAME
      A semicolon (;) delimitted list of class names of type javax.faces.view.facelets.TagDecorator, with a no-argument constructor.
      static java.lang.String FACELETS_LIBRARIES_PARAM_NAME
      If this param is set, the runtime must interpret it as a semicolon (;) separated list of paths, starting with "/" (without the quotes).
      static java.lang.String FACELETS_REFRESH_PERIOD_PARAM_NAME
      When a page is requested, what interval in seconds should the compiler check for changes.
      static java.lang.String FACELETS_SKIP_COMMENTS_PARAM_NAME
      If this param is set, and calling toLowerCase().equals("true") on a String representation of its value returns true, the runtime must ensure that any XML comments in the Facelets source page are not delivered to the client.
      static java.lang.String FACELETS_SUFFIX_PARAM_NAME
      Allow the web application to define an alternate suffix for Facelet based XHTML pages containing JSF content.
      static java.lang.String FACELETS_VIEW_MAPPINGS_PARAM_NAME
      Allow the web application to define a semicolon (;) separated list of strings that is used to forcibly declare that certain pages in the application must be interpreted as using Facelets, regardless of their extension.
    • Constructor Summary

      Constructors 
      Constructor Description
      ViewHandler​()  
    • Method Summary

      All Methods Instance Methods Abstract Methods Concrete Methods 
      Modifier and Type Method Description
      void addProtectedView​(java.lang.String urlPattern)
      Add the argument urlPattern to the thread safe Set of protected views for this application.
      java.lang.String calculateCharacterEncoding​(FacesContext context)
      Returns the correct character encoding to be used for this request.
      abstract java.util.Locale calculateLocale​(FacesContext context)
      Returns an appropriate Locale to use for this and subsequent requests for the current client.
      abstract java.lang.String calculateRenderKitId​(FacesContext context)
      Return an appropriate renderKitId for this and subsequent requests from the current client.
      abstract UIViewRoot createView​(FacesContext context, java.lang.String viewId)
      Create and return a new UIViewRoot instance initialized with information from the argument FacesContext and viewId.
      java.lang.String deriveLogicalViewId​(FacesContext context, java.lang.String rawViewId)
      Derive and return the viewId from the current request, or the argument input by following the algorithm defined in specification section JSF.7.6.2.
      java.lang.String deriveViewId​(FacesContext context, java.lang.String rawViewId)
      Derive and return the viewId from the current request, or the argument input by following the algorithm defined in specification section JSF.7.6.2.
      abstract java.lang.String getActionURL​(FacesContext context, java.lang.String viewId)
      If the value returned from this method is used as the file argument to the four-argument constructor for java.net.URL (assuming appropriate values are used for the first three arguments), then a client making a request to the toExternalForm() of that URL will select the argument viewId for traversing the JSF lifecycle.
      java.lang.String getBookmarkableURL​(FacesContext context, java.lang.String viewId, java.util.Map<java.lang.String,java.util.List<java.lang.String>> parameters, boolean includeViewParams)
      Return a JSF action URL derived from the viewId argument that is suitable to be used as the target of a link in a JSF response.
      java.util.Set<java.lang.String> getProtectedViewsUnmodifiable​()
      Return an unmodifiable Set of the protected views currently known to this ViewHandler instance.
      java.lang.String getRedirectURL​(FacesContext context, java.lang.String viewId, java.util.Map<java.lang.String,java.util.List<java.lang.String>> parameters, boolean includeViewParams)
      Return a JSF action URL derived from the viewId argument that is suitable to be used by the NavigationHandler to issue a redirect request to the URL using a NonFaces request.
      abstract java.lang.String getResourceURL​(FacesContext context, java.lang.String path)
      If the value returned from this method is used as the file argument to the four-argument constructor for java.net.URL (assuming appropriate values are used for the first three arguments), then a client making a request to the toExternalForm() of that URL will select the argument path for direct rendering.
      ViewDeclarationLanguage getViewDeclarationLanguage​(FacesContext context, java.lang.String viewId)
      Return the ViewDeclarationLanguage instance used for this ViewHandler instance.
      void initView​(FacesContext context)
      Initialize the view for the request processing lifecycle.
      boolean removeProtectedView​(java.lang.String urlPattern)
      Remove the argument urlPattern from the thread safe Set of protected views for this application, if present in the Set.
      abstract void renderView​(FacesContext context, UIViewRoot viewToRender)
      Perform whatever actions are required to render the response view to the response object associated with the current FacesContext.
      abstract UIViewRoot restoreView​(FacesContext context, java.lang.String viewId)
      Perform whatever actions are required to restore the view associated with the specified FacesContext and viewId.
      abstract void writeState​(FacesContext context)
      Take any appropriate action to either immediately write out the current state information (by calling StateManager.writeState(javax.faces.context.FacesContext, java.lang.Object), or noting where state information should later be written.
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • Field Detail

      • CHARACTER_ENCODING_KEY

        public static final java.lang.String CHARACTER_ENCODING_KEY

        The key, in the session's attribute set, under which the response character encoding may be stored and retrieved.

        See Also:
        Constant Field Values
      • DEFAULT_SUFFIX_PARAM_NAME

        public static final java.lang.String DEFAULT_SUFFIX_PARAM_NAME

        Allow the web application to define a list of alternate suffixes for pages containing JSF content. This list is a space separated list of values of the form .<extension>. The first physical resource whose extension matches one of the configured extensions will be the suffix used to create the view ID. If this init parameter is not specified, the default value is taken from the value of the constant DEFAULT_SUFFIX.

        See Also:
        Constant Field Values
      • DEFAULT_SUFFIX

        public static final java.lang.String DEFAULT_SUFFIX

        The value to use for the default extension if the webapp is using url extension mapping.

        See Also:
        Constant Field Values
      • FACELETS_SKIP_COMMENTS_PARAM_NAME

        public static final java.lang.String FACELETS_SKIP_COMMENTS_PARAM_NAME

        If this param is set, and calling toLowerCase().equals("true") on a String representation of its value returns true, the runtime must ensure that any XML comments in the Facelets source page are not delivered to the client. The runtime must also consider the facelets.SKIP_COMMENTS param name as an alias to this param name for backwards compatibility with existing facelets tag libraries.

        Since:
        2.0
        See Also:
        Constant Field Values
      • FACELETS_SUFFIX_PARAM_NAME

        public static final java.lang.String FACELETS_SUFFIX_PARAM_NAME

        Allow the web application to define an alternate suffix for Facelet based XHTML pages containing JSF content. If this init parameter is not specified, the default value is taken from the value of the constant DEFAULT_FACELETS_SUFFIX

        Since:
        2.0
        See Also:
        Constant Field Values
      • DEFAULT_FACELETS_SUFFIX

        public static final java.lang.String DEFAULT_FACELETS_SUFFIX

        The value to use for the default extension for Facelet based XHTML pages if the webapp is using url extension mapping.

        Since:
        2.0
        See Also:
        Constant Field Values
      • FACELETS_VIEW_MAPPINGS_PARAM_NAME

        public static final java.lang.String FACELETS_VIEW_MAPPINGS_PARAM_NAME

        Allow the web application to define a semicolon (;) separated list of strings that is used to forcibly declare that certain pages in the application must be interpreted as using Facelets, regardless of their extension. Each entry in the semicolon (;) separated list of strings is either a file extension, as in *.xhtml, or a resource prefix (starting with '/' and interpreted as relative to the web application root), as in /user/*. The latter class of entry can also take the form of /<filename>.<extension>* such as /login.jsp*. The runtime must also consider the facelets.VIEW_MAPPINGS param name as an alias to this param name for backwards compatibility with existing Facelets applications.

        Since:
        2.0
        See Also:
        Constant Field Values
      • FACELETS_BUFFER_SIZE_PARAM_NAME

        public static final java.lang.String FACELETS_BUFFER_SIZE_PARAM_NAME

        The buffer size to set on the response when the ResponseWriter is generated. By default the value is 1024. A value of -1 will not assign a buffer size on the response. This should be increased if you are using development mode in order to guarantee that the response isn't partially rendered when an error is generated. The runtime must also consider the facelets.BUFFER_SIZE param name as an alias to this param name for backwards compatibility with existing facelets tag libraries.

        Since:
        2.0
        See Also:
        Constant Field Values
      • FACELETS_REFRESH_PERIOD_PARAM_NAME

        public static final java.lang.String FACELETS_REFRESH_PERIOD_PARAM_NAME

        When a page is requested, what interval in seconds should the compiler check for changes. If you don't want the compiler to check for changes once the page is compiled, then use a value of -1. Setting a low refresh period helps during development to be able to edit pages in a running application.The runtime must also consider the facelets.REFRESH_PERIOD param name as an alias to this param name for backwards compatibility with existing facelets tag libraries.

        Since:
        2.0
        See Also:
        Constant Field Values
      • FACELETS_LIBRARIES_PARAM_NAME

        public static final java.lang.String FACELETS_LIBRARIES_PARAM_NAME

        If this param is set, the runtime must interpret it as a semicolon (;) separated list of paths, starting with "/" (without the quotes). The runtime must interpret each entry in the list as a path relative to the web application root and interpret the file found at that path as a facelet tag library, conforming to the facelet taglibrary schema and expose the tags therein according to Section "Facelet Tag Library mechanism". The runtime must also consider the facelets.LIBRARIES param name as an alias to this param name for backwards compatibility with existing facelets tag libraries.

        Since:
        2.0
        See Also:
        Constant Field Values
      • FACELETS_DECORATORS_PARAM_NAME

        public static final java.lang.String FACELETS_DECORATORS_PARAM_NAME

        A semicolon (;) delimitted list of class names of type javax.faces.view.facelets.TagDecorator, with a no-argument constructor. These decorators will be loaded when the first request for a Facelets VDL view hits the ViewHandler for page compilation.The runtime must also consider the facelets.DECORATORS param name as an alias to this param name for backwards compatibility with existing facelets tag libraries.

        Since:
        2.0
        See Also:
        Constant Field Values
      • DISABLE_FACELET_JSF_VIEWHANDLER_PARAM_NAME

        public static final java.lang.String DISABLE_FACELET_JSF_VIEWHANDLER_PARAM_NAME

        If this param is set, and calling toLowerCase().equals("true") on a String representation of its value returns true, the default ViewHandler must behave as specified in the latest 1.2 version of this specification. Any behavior specified in Section "Default ViewDeclarationLanguage Implementation" of the spec prose document and implemented in the default ViewHandler that pertains to handling requests for pages authored in the JavaServer Faces View Declaration Language must not be executed by the runtime.

        Since:
        2.0
        See Also:
        Constant Field Values
    • Constructor Detail

      • ViewHandler

        public ViewHandler​()
    • Method Detail

      • calculateLocale

        public abstract java.util.Locale calculateLocale​(FacesContext context)

        Returns an appropriate Locale to use for this and subsequent requests for the current client.

        Parameters:
        context - FacesContext for the current request
        Throws:
        java.lang.NullPointerException - if context is null
      • calculateCharacterEncoding

        public java.lang.String calculateCharacterEncoding​(FacesContext context)

        Returns the correct character encoding to be used for this request.

        The following algorithm is employed.

        • Examine the Content-Type request header. If it has a charset parameter, extract it and return that as the encoding.

        • If no charset parameter was found, check for the existence of a session by calling ExternalContext.getSession(boolean) passing false as the argument. If that method returns true, get the session Map by calling ExternalContext.getSessionMap() and look for a value under the key given by the value of the symbolic constant CHARACTER_ENCODING_KEY. If present, return the value, converted to String.

        • Otherwise, return null

        Since:
        1.2
      • calculateRenderKitId

        public abstract java.lang.String calculateRenderKitId​(FacesContext context)

        Return an appropriate renderKitId for this and subsequent requests from the current client. It is an error for this method to return null.

        The default return value is RenderKitFactory.HTML_BASIC_RENDER_KIT.

        Parameters:
        context - FacesContext for the current request
        Throws:
        java.lang.NullPointerException - if context is null
      • deriveViewId

        public java.lang.String deriveViewId​(FacesContext context,
                                             java.lang.String rawViewId)

        Derive and return the viewId from the current request, or the argument input by following the algorithm defined in specification section JSF.7.6.2.

        The default implementation of this method simply returns rawViewId unchanged.

        Parameters:
        context - the FacesContext for this request
        rawViewId - the viewId to derive,
        Since:
        2.0
      • deriveLogicalViewId

        public java.lang.String deriveLogicalViewId​(FacesContext context,
                                                    java.lang.String rawViewId)

        Derive and return the viewId from the current request, or the argument input by following the algorithm defined in specification section JSF.7.6.2. Note that unlike deriveViewId(), this method does not require that a physical view be present.

        The default implementation of this method simply returns rawViewId unchanged.

        Parameters:
        context - the FacesContext for this request
        rawViewId - the viewId to derive,
        Since:
        2.1
      • getActionURL

        public abstract java.lang.String getActionURL​(FacesContext context,
                                                      java.lang.String viewId)

        If the value returned from this method is used as the file argument to the four-argument constructor for java.net.URL (assuming appropriate values are used for the first three arguments), then a client making a request to the toExternalForm() of that URL will select the argument viewId for traversing the JSF lifecycle. Please see section JSF.7.6.2 for the complete specification, especially for details related to view protection using the ResponseStateManager.NON_POSTBACK_VIEW_TOKEN_PARAM .

        Parameters:
        context - FacesContext for this request
        viewId - View identifier of the desired view
        Throws:
        java.lang.IllegalArgumentException - if viewId is not valid for this ViewHandler, or does not start with "/".
        java.lang.NullPointerException - if context or viewId is null.
      • getResourceURL

        public abstract java.lang.String getResourceURL​(FacesContext context,
                                                        java.lang.String path)

        If the value returned from this method is used as the file argument to the four-argument constructor for java.net.URL (assuming appropriate values are used for the first three arguments), then a client making a request to the toExternalForm() of that URL will select the argument path for direct rendering. If the specified path starts with a slash, it must be treated as context relative; otherwise, it must be treated as relative to the action URL of the current view.

        Parameters:
        context - FacesContext for the current request
        path - Resource path to convert to a URL
        Throws:
        java.lang.IllegalArgumentException - if viewId is not valid for this ViewHandler.
        java.lang.NullPointerException - if context or path is null.
      • getProtectedViewsUnmodifiable

        public java.util.Set<java.lang.String> getProtectedViewsUnmodifiable​()

        Return an unmodifiable Set of the protected views currently known to this ViewHandler instance. Compliant implementations must return a Set that is the concatenation of the contents of all the <url-pattern> elements within all the <protected-views> in all of the application configuration resources in the current application. The runtime must support calling this method at any time after application startup. The default implementation returns an unmodifiable empty Set.

        Since:
        2.2
      • addProtectedView

        public void addProtectedView​(java.lang.String urlPattern)

        Add the argument urlPattern to the thread safe Set of protected views for this application. Compliant implementations make it so a subsequent call to getProtectedViewsUnmodifiable() contains the argument. The runtime must support calling this method at any time after application startup. The default implementation takes no action.

        Parameters:
        urlPattern - the url-pattern to add.
        Since:
        2.2
      • removeProtectedView

        public boolean removeProtectedView​(java.lang.String urlPattern)

        Remove the argument urlPattern from the thread safe Set of protected views for this application, if present in the Set. If the argument urlPattern is not present in the Set, this method has no effect. Compliant implementations must make it so a subsequent call to getProtectedViewsUnmodifiable() does not contain the argument. The runtime must support calling this method at any time after application startup. Returns true if this Set contained the argument. The default implementation takes no action and returns false.

        Parameters:
        urlPattern - the url-pattern to remove.
        Since:
        2.2
      • getRedirectURL

        public java.lang.String getRedirectURL​(FacesContext context,
                                               java.lang.String viewId,
                                               java.util.Map<java.lang.String,java.util.List<java.lang.String>> parameters,
                                               boolean includeViewParams)

        Return a JSF action URL derived from the viewId argument that is suitable to be used by the NavigationHandler to issue a redirect request to the URL using a NonFaces request. Compliant implementations must implement this method as specified in section JSF.7.6.2. The default implementation simply calls through to getActionURL(javax.faces.context.FacesContext, java.lang.String), passing the arguments context and viewId.

        Parameters:
        context - The FacesContext processing this request
        viewId - The view identifier of the target page
        parameters - A mapping of parameter names to one or more values
        includeViewParams - A flag indicating whether view parameters should be encoded into this URL
        Since:
        2.0
      • getBookmarkableURL

        public java.lang.String getBookmarkableURL​(FacesContext context,
                                                   java.lang.String viewId,
                                                   java.util.Map<java.lang.String,java.util.List<java.lang.String>> parameters,
                                                   boolean includeViewParams)

        Return a JSF action URL derived from the viewId argument that is suitable to be used as the target of a link in a JSF response. Compiliant implementations must implement this method as specified in section JSF.7.6.2. The default implementation simply calls through to getActionURL(javax.faces.context.FacesContext, java.lang.String), passing the arguments context and viewId.

        Parameters:
        context - The FacesContext processing this request
        viewId - The view identifier of the target page
        parameters - A mapping of parameter names to one or more values
        includeViewParams - A flag indicating whether view parameters should be encoded into this URL
        Since:
        2.0
      • restoreView

        public abstract UIViewRoot restoreView​(FacesContext context,
                                               java.lang.String viewId)

        Perform whatever actions are required to restore the view associated with the specified FacesContext and viewId. It may delegate to the restoreView of the associated StateManager to do the actual work of restoring the view. If there is no available state for the specified viewId, return null.

        Otherwise, the default implementation must obtain a reference to the ViewDeclarationLanguage for this viewId and call its ViewDeclarationLanguage.restoreView(javax.faces.context.FacesContext, java.lang.String) method, returning the result and not swallowing any exceptions thrown by that method.

        Parameters:
        context - FacesContext for the current request
        viewId - the view identifier for the current request
        Throws:
        java.lang.NullPointerException - if context is null
        FacesException - if a servlet error occurs