问题
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;
}
In the output in the console is:
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
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..
回答1:
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.
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.
来源:https://stackoverflow.com/questions/9444048/jsf-custom-converters