VRAPTOR Problema em chamada de conversores

1 resposta
boneazul

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 ??

1 Resposta

Lucas_Cavalcanti

Tem a ver sim…

Dá uma olhada no Joda-Time, é melhor pra fazer o que vc precisa.
http://joda-time.sourceforge.net/

e já tem suporte pra ele no vraptor, e no hibernate.

[]'s

Criado 23 de abril de 2012
Ultima resposta 23 de abr. de 2012
Respostas 1
Participantes 2