Java examples for JSF:UIComponent
get String Value To Render in JSF
/*//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(); } }