JSF定制转换器 [英] JSF Custom Converters

查看:74
本文介绍了JSF定制转换器的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个这样的自定义转换器:

I have a custom converter like this:

@Override
public Object getAsObject(FacesContext facesContext, UIComponent component, String str) {
    System.out.println("vadeConverter before getAsObject(" + str);
    SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-mm-dd");

    String values[] = str.split(":");
    Vade vade = new Vade();
    if (values.length > 1) {
        vade.setId(Integer.parseInt(values[0]));
        vade.setEtiket(values[1]);
        try{
            vade.setTakasTarihi(dateFormat.parse(values[2]));
        }catch (Exception e){
            e.printStackTrace();
        }           
    }
    System.out.println("vadeConverter after getAsObject(" + vade.toString());
    return vade;
}

@Override
public String getAsString(FacesContext context, UIComponent component,
        Object object) {
    Vade vade = (Vade) object;
    String str = "";
    System.out.println("vadeConverter before getAsString(object) -> " + vade.toString());
    if (vade != null) {
        str = vade.getId().toString()+":"+
                vade.getEtiket()+":"+
                vade.getTakasTarihi().toString()
                ;
    }
    System.out.println("vadeConverter after getAsString(object) -> " + str);
    return str;
}

在控制台的输出中是:

vadeConverter before getAsString(object) -> Vade{id=7etiket=T+0takasTarihi=2012-02-21}
vadeConverter after getAsString(object) -> 7:T+0:2012-02-21
vadeConverter before getAsString(object) -> Vade{id=12etiket=T+2takasTarihi=2012-02-27}
vadeConverter after getAsString(object) -> 12:T+2:2012-02-27
vadeConverter before getAsString(object) -> Vade{id=13etiket=T+3takasTarihi=2012-02-28}
vadeConverter after getAsString(object) -> 13:T+3:2012-02-28
vadeConverter before getAsString(object) -> Vade{id=14etiket=T+4takasTarihi=2012-02-29}
vadeConverter after getAsString(object) -> 14:T+4:2012-02-29
vadeConverter before getAsString(object) -> Vade{id=15etiket=T+5takasTarihi=2012-03-01}
vadeConverter after getAsString(object) -> 15:T+5:2012-03-01
vadeConverter before getAsString(object) -> Vade{id=16etiket=T+6takasTarihi=2012-03-02}
vadeConverter after getAsString(object) -> 16:T+6:2012-03-02
vadeConverter before getAsString(object) -> Vade{id=17etiket=T+7takasTarihi=2012-03-03}
vadeConverter after getAsString(object) -> 17:T+7:2012-03-03
vadeConverter before getAsString(object) -> Vade{id=18etiket=T+8takasTarihi=2012-03-04}
vadeConverter after getAsString(object) -> 18:T+8:2012-03-04
vadeConverter before getAsString(object) -> Vade{id=19etiket=T+9takasTarihi=2012-03-05}
vadeConverter after getAsString(object) -> 19:T+9:2012-03-05

当我从控制台的selectone菜单中选择一个值时,我得到以下信息:

when I select a value from the selectonemenu in the console I get this:

vadeConverter before getAsObject(12:T+2:2012-02-27
vadeConverter after getAsObject(Vade{id=12etiket=T+2takasTarihi=Fri Jan 27 00:02:00 EET 2012}

,当然,结果是出现验证错误.我相信我以正确的方式编写了转换器,但是我不知道这段代码有什么问题.

and of course as a result I get validation error. I believe I write the converter in right way, but I don't know what is wrong with this code..

推荐答案

您使用的是mm而不是MM来表示月份. mm代表分钟.请注意,您得到的是Jan而不是Feb,并且您得到的是2分钟而不是0分钟.您可以在SimpleDateFormat javadoc <中找到格式格式语法 /a>.

You're using mm instead of MM to denote months. The mm stands for minutes. Note that you're getting Jan instead of Feb and that you get 2 minutes instead of 0 minutes. You can find the formatting pattern syntax in SimpleDateFormat javadoc.

但是,更可靠的方法是使用getTime()new Date(time)而不是toString()SimpleDateFormat#parse().这样,您也不必依赖默认的toString()结果.

More reliable would however be to use getTime() and new Date(time) instead of toString() and SimpleDateFormat#parse(). This way you're also not dependent on the default toString() result.

这篇关于JSF定制转换器的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆