自定义JSF EL功能,日期转换器和当前组件

时间:2012-07-25 12:58:11

标签: jsf el

我们使用可收藏的网址和GET方法。

我们有一些包含日期的参数,并使用默认的DateTime转换器进行转换。

<f:viewParam name = "parameter" value  = "#{model.parameter}" converter = "javax.faces.DateTime" />

这完美无缺,参数是转换为String

的转换器

当我们必须为这些页面生成链接(例如,使用<h:link>)时,我们需要将Date参数转换为格式正确的字符串(因为<f:param>标记不支持转换器)。 Date.toString()的默认格式不会被javax.faces.converter.DateTimeConverter解析。

我想出了以下解决方案,但我感觉它可以更优雅地完成。

我定义了一个自定义EL函数convertDate

<f:param name="parameter" value="#{ func:convertDate( model.someDate, component ) }" />

具有以下实现

public static String convertDate( Date date, UIComponent uiComponent )
{
    DateTimeConverter dateTimeConverter = new DateTimeConverter();
    return dateTimeConverter.getAsString( FacesContext.getCurrentInstance(), uiComponent, date );
}

我们的想法是使用默认的javax.faces.convert.DateTimeConverter转换日期,但我需要引用相应的UIComponent

#{component}的使用是否有意义?还有更好的方法吗?

1 个答案:

答案 0 :(得分:1)

DateTimeConverter使用了SimpleDateFormat。您可能希望使用它,以便您可以摆脱#{component}参数。