My solution is use costomized Converter to read the timezone from parameter.
Hope it useful ^^

                <h:outputText value="#{var.item.createDatetime}"
id="ticketCreateDate" >
                        <f:converter
converterId="com.yinhoo.ers.jsf.converter.dateConverter" />
                        <f:attribute name="dateStyle" value="yyyy-MM-dd 
HH:mm:ss"/>
                        <f:attribute name="timeZone"
value="#{userBean.timeZoneId}"/>
                    <%/*<f:convertDateTime pattern="yyyy-MM-dd HH:mm:ss"
timeZone="#{userBean.timeZone}"/>*/%>
                </h:outputText>



public class DateConverter implements Converter {
        private static final String CUSTOM_FORMAT_PARAMETER_NAME = "dateStyle";
        private static final String TIME_ZONE_PARAMETER_NAME = "timeZone";

        private static final String DEFAULT_STYLE = "yyyy-MM-dd";

        private String format;
        
        private TimeZone tz;

        public Object getAsObject(FacesContext context, UIComponent component,
                        String arg2) throws ConverterException {
                Date date = null;
                setFormat(component);
                SimpleDateFormat df = this.getFormater();
                try {
                        date = df.parse(arg2);
                } catch (ParseException e) {
                        throw new ConverterException("Not a valid date format");
                }
                return date;
        }

        private SimpleDateFormat getFormater() {
                SimpleDateFormat df = new SimpleDateFormat(format);
                if(tz!=null) {
                        df.setTimeZone(tz);
                }
                return df;
        }

        @SuppressWarnings("unchecked")
        private void setFormat(UIComponent component) {
                Object styleAttribute = component.getAttributes().get(
                                CUSTOM_FORMAT_PARAMETER_NAME);
                Object timeZoneAttr =
component.getAttributes().get(TIME_ZONE_PARAMETER_NAME);
                if(timeZoneAttr!=null) {
                        this.tz = TimeZone.getTimeZone((String)timeZoneAttr);
                }
                if (styleAttribute == null) {
                        this.format = DEFAULT_STYLE;
                } else {
                        this.format = (String) styleAttribute;
                }
        }

        public String getAsString(FacesContext arg0, UIComponent component,
                        Object arg2) throws ConverterException {
                Date date = null;
                setFormat(component);
                try {
                        date = (Date) arg2;
                } catch (Exception e) {
                        throw new ConverterException("Not a valid date format");
                }
                SimpleDateFormat df = this.getFormater();
                String dateString = df.format(date);
                return dateString;
        }

}
:handshake::handshake::handshake:
-- 
View this message in context: 
http://www.nabble.com/Dynamic-Converter-tp454790p14914379.html
Sent from the MyFaces - Users mailing list archive at Nabble.com.

Reply via email to