vRaptor Validator - problemas para retornar de uma requisição AJAX

6 respostas
vhmolinar

Pessoal bom dia,

estou tentando utilizar o validator para validator uma requisiçaõ ajax mas estou tendo problemas. Teoricamente seria simples a resposta: " não faz diferença se é ajax ou não…" . No entanto não está sendo bem assim. Quando eu faço meu post ajax

$.post('${pageContext.request.contextPath}/entireLogRequest', {userName: userName, moduleName: moduleName, searchDate: searchDate, startTime: startTime, endTime: endTime},
				  function(data){
					$("#sendRequest").removeAttr("disabled");
					$("#ajax-loader").hide();
					var property = 'file';

					if(property in data) {			  
					  $("#urlDownload").attr("href", data.file).show();
					  clearFields();

					} else {
					  var htmlReplacement;
					  htmlReplacement  = '<span id="errorResponse">';
					  htmlReplacement += data.error;
					  alert(data.error);
					  htmlReplacement += '</span>';
					  $("#errorResponse").html(htmlReplacement);
					  $("#errorResponse").show();
					  clearFields();
					}
	             }
			    );

eu deixo setado meu callback para receber um jSon, como podem ver. No entanto o validator não retorna um json, ele retorna uma JSP completa.
Dei uma olhada na documentação do vRaptor e não encontrei nada sobre, então

alguém saberia me dizer como faço para o validator retornar um jSon?

segue o código do meu validator:

final boolean validTimes = new SimpleDateFormat("HH:mm:ss").parse(startTime).before( new SimpleDateFormat("HH:mm:ss").parse(endTime) );
        validator.checking(new Validations(generateBundle()) {
            {
                that(validTimes, "erro", "errors.LogReaderInvalidTimes");
            }
        });
        validator.onErrorUse(page()).of(LogController.class).logForm();

aprecio qualquer ajuda :wink: ,

Obrigado!

6 Respostas

Lucas_Cavalcanti

se vc falar pro validator usar o form ele vai retornar html do form…

vc pode falar pra ele gerar um json, ao invés disso…

o jeito mais fácil no momento é fazer algo do tipo:

final boolean validTimes = new SimpleDateFormat("HH:mm:ss").parse(startTime).before( new SimpleDateFormat("HH:mm:ss").parse(endTime) );
List<Message> errors = new Validations(generateBundle()) {{
     that(validTimes, "erro", "errors.LogReaderInvalidTimes");
}}.getErrors();
validator.addAll(errors);
validator.onErrorUse(json()).from(errors, "errors").serialize();
//ou 
validator.onErrorUse(json()).withoutRoot().from(errors).serialize();
G
:shock:  :shock: Processador de 2.5Ghz é luxo!

:shock: :shock: Processador de 2.5Ghz é luxo!

vhmolinar

garcia-jj:
final boolean validTimes = new SimpleDateFormat("HH:mm:ss").parse(startTime).before( new SimpleDateFormat("HH:mm:ss").parse(endTime) );

:shock: :shock: Processador de 2.5Ghz é luxo!

Opa blz?
Então… Se você tiver uma maneira(comprovada) mais ágil de comparar duas informações que representam uma hora no padrão “HH:mm:ss” posta aí por favor.

G

vhmolinar:
garcia-jj:
final boolean validTimes = new SimpleDateFormat("HH:mm:ss").parse(startTime).before( new SimpleDateFormat("HH:mm:ss").parse(endTime) );

:shock: :shock: Processador de 2.5Ghz é luxo!

Opa blz?
Então… Se você tiver uma maneira(comprovada) mais ágil de comparar duas informações que representam uma hora no padrão “HH:mm:ss” posta aí por favor.

Você cria duas vezes o mesmo objeto: new SimpleDateFormat(“HH:mm:ss”). Você pode instanciar uma vez associando à alguma variável e usar a mesma instância quantas vezes precisar.

Além disso o Vraptor já faz o parse das datas “automagicamente”. Para isso basta deixar seu método com os tipos corretos:

public void foo(Date startTime, Date endTime) { [...] startTime.before(endTime); }

:thumbup:

vhmolinar

garcia-jj:
vhmolinar:
garcia-jj:
final boolean validTimes = new SimpleDateFormat("HH:mm:ss").parse(startTime).before( new SimpleDateFormat("HH:mm:ss").parse(endTime) );

:shock: :shock: Processador de 2.5Ghz é luxo!

Opa blz?
Então… Se você tiver uma maneira(comprovada) mais ágil de comparar duas informações que representam uma hora no padrão “HH:mm:ss” posta aí por favor.

Você cria duas vezes o mesmo objeto: new SimpleDateFormat(“HH:mm:ss”). Você pode instanciar uma vez associando à alguma variável e usar a mesma instância quantas vezes precisar.

Além disso o Vraptor já faz o parse das datas “automagicamente”. Para isso basta deixar seu método com os tipos corretos:

public void foo(Date startTime, Date endTime) { [...] startTime.before(endTime); }

:thumbup:

Aí que ta, eu não recebo um Date no servidor, é uma informação referente a hora, não data. Portanto recebo uma simples String.

Agora sobre a criação de 2 objetos, beleza, concordo. Mas também não seria nada tão escandaloso a ponto de você falar como se a aplicação, por causa de 1 objeto a mais, sugaria todo o processamento da máquina.

De qualquer forma valeu por ter dado a opnião :smiley:

G

Se você quer usar apenas APIs do Java você pode usar o java.util.Date que contém Date + Time. Seguindo meu exemplo anterior você pode usar os campos de data zerados e time com os valores. Assim você não precisa ficar manipulando Strings nem formatando manualmente os valores.

Outra opção é usar o joda-time, que possui objetos separados de Date e Time. Além disso o Vraptor possui conversores built-in para eles.

public void foo(LocalTime startTime, LocalTime endTime) { final boolean validTimes = startTime.before(endTime); List<Message> errors = new Validations(generateBundle()) {{ that(validTimes, "erro", "errors.LogReaderInvalidTimes"); }}.getErrors(); validator.addAll(errors); validator.onErrorUse(json()).from(errors, "errors").serialize(); }

Criado 23 de junho de 2010
Ultima resposta 23 de jun. de 2010
Respostas 6
Participantes 3