get String Value To Render in JSF - Java JSF

Java examples for JSF:UIComponent

Description

get String Value To Render in JSF

Demo Code

/*//from  ww  w. j  a va 2 s . c om
 * Copyright 2009 Prime Technology.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import javax.el.ValueExpression;
import javax.faces.FacesException;
import javax.faces.component.EditableValueHolder;
import javax.faces.component.UIComponent;
import javax.faces.component.UIForm;
import javax.faces.component.UISelectItem;
import javax.faces.component.UISelectItems;
import javax.faces.component.ValueHolder;
import javax.faces.context.FacesContext;
import javax.faces.convert.Converter;
import javax.faces.model.SelectItem;

public class Main{
    /**
     * Algorithm works as follows; - If it's an input component, submitted value
     * is checked first since it'd be the value to be used in case validation
     * errors terminates jsf lifecycle - Finally the value of the component is
     * retrieved from backing bean and if there's a converter, converted value
     * is returned
     * 
     * - If the component is not a value holder, toString of component is used
     * to support Facelets UIInstructions.
     * 
     * @param context
     *            FacesContext instance
     * @param component
     *            UIComponent instance whose value will be returned
     * @return End text
     */
    public static String getStringValueToRender(FacesContext facesContext,
            UIComponent component) {
        if (component instanceof ValueHolder) {

            if (component instanceof EditableValueHolder) {
                Object submittedValue = ((EditableValueHolder) component)
                        .getSubmittedValue();
                if (submittedValue != null) {
                    return submittedValue.toString();
                }
            }

            ValueHolder valueHolder = (ValueHolder) component;
            Object value = valueHolder.getValue();
            if (value == null)
                return "";

            // first ask the converter
            if (valueHolder.getConverter() != null) {
                return valueHolder.getConverter().getAsString(facesContext,
                        component, value);
            }
            // Try to guess
            else {
                ValueExpression expr = component
                        .getValueExpression("value");
                if (expr != null) {
                    Class<?> valueType = expr.getType(facesContext
                            .getELContext());
                    if (valueType != null) {
                        Converter converterForType = facesContext
                                .getApplication()
                                .createConverter(valueType);

                        if (converterForType != null)
                            return converterForType.getAsString(
                                    facesContext, component, value);
                    }
                }
            }

            // No converter found just return the value as string
            return value.toString();
        } else {
            // This would get the plain texts on UIInstructions when using
            // Facelets
            String value = component.toString();

            if (value != null)
                return value.trim();
            else
                return "";
        }
    }
    /**
     * Resolves the end text to render by using a specified value
     * 
     * @param context
     *            FacesContext instance
     * @param component
     *            UIComponent instance whose value will be returned
     * @return End text
     */
    public static String getStringValueToRender(FacesContext facesContext,
            UIComponent component, Object value) {
        if (value == null)
            return null;

        ValueHolder valueHolder = (ValueHolder) component;

        Converter converter = valueHolder.getConverter();
        if (converter != null) {
            return converter.getAsString(facesContext, component, value);
        } else {
            ValueExpression expr = component.getValueExpression("value");
            if (expr != null) {
                Class<?> valueType = expr.getType(facesContext
                        .getELContext());
                Converter converterForType = facesContext.getApplication()
                        .createConverter(valueType);

                if (converterForType != null)
                    return converterForType.getAsString(facesContext,
                            component, value);
            }
        }

        return value.toString();
    }
}

Related Tutorials