Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
   * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
   * The contents of this file are subject to the terms of either the GNU
   * General Public License Version 2 only ("GPL") or the Common Development
   * and Distribution License("CDDL") (collectively, the "License").  You
   * may not use this file except in compliance with the License.  You can
  * obtain a copy of the License at
  * or packager/legal/LICENSE.txt.  See the License for the specific
  * language governing permissions and limitations under the License.
  * When distributing the software, include this License Header Notice in each
  * file and include the License file at packager/legal/LICENSE.txt.
  * GPL Classpath Exception:
  * Oracle designates this particular file as subject to the "Classpath"
  * exception as provided by Oracle in the GPL Version 2 section of the License
  * file that accompanied this code.
  * Modifications:
  * If applicable, add the following below the License Header, with the fields
  * enclosed by brackets [] replaced by your own identifying information:
  * "Portions Copyright [year] [name of copyright owner]"
  * Contributor(s):
  * If you wish your version of this file to be governed by only the CDDL or
  * only the GPL Version 2, indicate your decision by adding "[Contributor]
  * elects to include this software in this distribution under the [CDDL or GPL
  * Version 2] license."  If you don't indicate a single choice of license, a
  * recipient has the option to distribute your version of this file under
  * either the CDDL, the GPL Version 2 or to extend the choice of license to
  * its licensees as provided above.  However, if you add GPL Version 2 code
  * and therefore, elected the GPL Version 2 license, then the option applies
  * only if the new code is made subject to such option by the copyright
  * holder.
 package javax.faces.component;

UIOutput is a UIComponent that has a value, optionally retrieved from a model tier bean via a value expression, that is displayed to the user. The user cannot directly modify the rendered value; it is for display purposes only.

During the Render Response phase of the request processing lifecycle, the current value of this component must be converted to a String (if it is not already), according to the following rules:

By default, the rendererType property must be set to "javax.faces.Text". This value can be changed by calling the setRendererType() method.

 public class UIOutput extends UIComponentBase
     implements ValueHolder {
     // ------------------------------------------------------ Manifest Constants


The standard component type for this component.

     public static final String COMPONENT_TYPE = "javax.faces.Output";


The standard component family for this component.

    public static final String COMPONENT_FAMILY = "javax.faces.Output";
    enum PropertyKeys {
    private Converter converter;
    // ------------------------------------------------------------ Constructors


Create a new UIOutput instance with default property values.

    public UIOutput() {
    // -------------------------------------------------------------- Properties
    public String getFamily() {
        return ();
    // --------------------------------------- EditableValueHolder Properties
    public Converter getConverter() {
        if (this. != null) {
            return (this.);
        return (ConvertergetStateHelper().eval(.);
    public void setConverter(Converter converter) {
        // we don't push the converter to the StateHelper
        // if it's been explicitly set (i.e. it's not a ValueExpression
        // reference
        this. = converter;
    public Object getLocalValue() {
        return getStateHelper().get(.);
    public Object getValue() {
        return getStateHelper().eval(.);
    public void setValue(Object value) {


In addition to the actions taken in UIComponentBase when PartialStateHolder.markInitialState() is called, check if the installed javax.faces.convert.Converter is a PartialStateHolder and if it is, call PartialStateHolder.markInitialState() on it.

    public void markInitialState() {
        Converter c = getConverter();
        if (c != null && c instanceof PartialStateHolder) {
    public void clearInitialState() {
        if (initialStateMarked()) {
            Converter c = getConverter();
            if (c != null && c instanceof PartialStateHolder) {
    public Object saveState(FacesContext context) {
        if (context == null) {
            throw new NullPointerException();
        Object[] values = (Object[]) super.saveState(context);
        Object converterState = null;
        if ( != null) {
            if (!initialStateMarked()) {
                // we saving the full state
                converterState = saveAttachedState(context);
            } else {
                if ( instanceof StateHolder) {
                    StateHolder sh = (StateHolder;
                    if (!sh.isTransient()) {
                        converterState = ((StateHolder).saveState(context);
        if (converterState != null || values != null) {
            return new Object[] { valuesconverterState };
        return values;
    public void restoreState(FacesContext contextObject state) {
        if (context == null) {
            throw new NullPointerException();
        if (state == null) {
        Object[] values = (Object[]) state;
        super.restoreState(context, values[0]);
        Object converterState = values[1];
        if (converterState instanceof StateHolderSaver) {
            // this means full state was saved and as such
            // overwrite any existing converter with the saved
            // converter
             = (ConverterrestoreAttachedState(context,
        } else {
            // apply any saved state to the existing converter
            if (converterState != null &&  instanceof StateHolder) {
New to GrepCode? Check out our FAQ X