IEのう○こめっ!
MyFaces の x:calendar がかっちょいーと思って使ってみました。で、1ページにこれが2つあったときの挙動なのですが、IE だと落ちます。なぜかというと、操作されてないほうの x:calendar の JavaScript が、デフォルトコンバータに文字列で「null」と渡しちゃうもんだから、デフォルトのコンバータをそんなの Date じゃねぇ! と言うわけですな。これ発見するのに苦労したなぁ。
で、解決法は、Converter を自分で書くしかなさそう。っていうか書いたら成功した。中身は文字列の「null」がきたら無視するようにすること。だいたい↓こんな感じ。
package hogehoge; import java.text.DateFormat; import java.text.ParseException; import java.util.Date; import javax.faces.component.UIComponent; import javax.faces.context.FacesContext; import javax.faces.convert.Converter; import javax.faces.convert.ConverterException; public class CalendarConverter implements Converter { public Object getAsObject( final FacesContext context, final UIComponent component, final String value) { DateFormat df = DateFormat.getDateInstance(); if ((value != null) && !value.equals("") && !value.equals("null")) { try { return df.parse(value); } catch (ParseException e) { throw new ConverterException("Invalid Format : " + value, e); } } return null; } public String getAsString( final FacesContext context, final UIComponent component, final Object value) { DateFormat df = DateFormat.getDateInstance(); if (!(value instanceof Date)) { throw new ConverterException( "Invalid class : " + value.getClass().getName()); } return df.format(value); } }