Estou com um comportamento estranho ocorrendo aqui na aplicação tenho dois conversores um pra java.util.Date pra poder tratar hora junto com data quando possivel e um pra java.sql.Time pra completar hora quando falta um pedaço rodando na mesma aplicação . O estranho é que o vraptor esta chamando sempro o conversor da classe java.util.Date tem algo a ver por Time extender Date na implementação padrão ??
Os conversores abaxo :
Ajustar a hora quando necessario :
import java.sql.Time;
import java.text.DateFormat;
import java.text.MessageFormat;
import java.text.ParseException;
import java.util.Locale;
import java.util.ResourceBundle;
import java.util.regex.Pattern;
import org.apache.commons.lang.StringUtils;
import br.com.caelum.vraptor.Convert;
import br.com.caelum.vraptor.Converter;
import br.com.caelum.vraptor.converter.ConversionError;
import br.com.caelum.vraptor.core.Localization;
import br.com.caelum.vraptor.ioc.RequestScoped;
@Convert(Time.class)
@RequestScoped
public class LocaleBasedTimeConverter implements Converter<Time> {
private final Localization localization;
public LocaleBasedTimeConverter(Localization localization) {
this.localization = localization;
}
public Time convert(String value, Class<? extends Time> type,
ResourceBundle bundle) {
if (StringUtils.isEmpty(value)) {
return null;
}
Locale locale = localization.getLocale();
if (locale == null) {
locale = Locale.getDefault();
}
DateFormat formatHour = DateFormat.getTimeInstance(DateFormat.SHORT,
locale);
try {
if (isUncompleteTime(value)) {
value = value + ":00";
}
return new Time(formatHour.parse(value).getTime());
} catch (ParseException pe) {
throw new ConversionError(MessageFormat.format(
bundle.getString("is_not_a_valid_hour"), value));
}
}
private boolean isUncompleteTime(String value) {
return Pattern.compile("[0-9]{2}\\:[0-9]{2}").matcher(value).find();
}
}
Tratar com hora junto quando o usuario inputar dados do tipo num campo “23/04/2012 11:50:00”
import java.text.DateFormat;
import java.text.MessageFormat;
import java.text.ParseException;
import java.util.Date;
import java.util.Locale;
import java.util.ResourceBundle;
import org.apache.commons.lang.StringUtils;
import br.com.caelum.vraptor.Convert;
import br.com.caelum.vraptor.Converter;
import br.com.caelum.vraptor.converter.ConversionError;
import br.com.caelum.vraptor.core.Localization;
import br.com.caelum.vraptor.ioc.RequestScoped;
@Convert(Date.class)
@RequestScoped
public class LocaleBasedDateConverter implements Converter<Date> {
private final Localization localization;
public LocaleBasedDateConverter(Localization localization) {
this.localization = localization;
}
public Date convert(String value, Class<? extends Date> type,
ResourceBundle bundle) {
System.out.println("Converting date"+value);
if (StringUtils.isEmpty(value)) {
return null;
}
Locale locale = localization.getLocale();
if (locale == null) {
locale = Locale.getDefault();
}
DateFormat formatDateTime = DateFormat.getDateTimeInstance(
DateFormat.MEDIUM, DateFormat.MEDIUM, locale);
try {
return formatDateTime.parse(value);
} catch (ParseException pe) {
DateFormat formatDate = DateFormat.getDateInstance(
DateFormat.SHORT, locale);
try {
return formatDate.parse(value);
} catch (ParseException pe1) {
throw new ConversionError(MessageFormat.format(
bundle.getString("is_not_a_valid_date"), value));
}
}
}
}
e uma chamada no controlador
public void validate(Date dataInicio, Date dataFim,
Time horaInicio, Time horaFim) {
.
.
.
}
Algum bug foi relatado nesse sentido ??