VRatpor 3.1.0 + validação + view

3 respostas
V

Após implementar um validação utilizando o Vraptor do tipo Estilo fluente, observei que a resposta do erro na minha view era retornada com “???” antes e depois da minha mensagem de erro.
Segue código do validator e da view.

Validator:

@Path("/capacityReport")
	public Download capacityReport(final Integer mes, final Integer ano, String omsName) throws Exception {
		validator.checking(new Validations() {
			{
				that(mes != null && mes > 0 && mes <= 12, "erro", "Mês deve ser maior que 0 e menor ou igual a 12");
			}
		});
		validator.checking(new Validations() {
			{
				that(ano != null, "erro", "Preencha o ano corretamente.");
			}
		});
		validator.onErrorUse(logic()).forwardTo(GenericController.class).capacityIndicator();
		final HibernateRequest hRequest = new CapacityIndicatorRequest(mes, ano);
		final List<CapacityIndicatorReport> result = new ArrayList<CapacityIndicatorReport>();
		RequestObject request = new RequestObject();
		request.setRequestObject(hRequest);
		request.setBoName(ConfigBean.getInstance().getOmsName());
		request.setOmsTarget(omsName);
		request.setType(RequestType.DATABASE);
		RequestReponseHandler.getInstance().sendRequest(request, new ClientResponseCallback() {
			@Override
			public void onResponseReceived(Object response) {
				if (response != null && response instanceof List)
					result.addAll((List<CapacityIndicatorReport>) response);
				monitor.release();
			}
		});
		if (!ConfigBean.getInstance().isUseDatabase() && !ConfigBean.getInstance().getOmsName().equals(omsName)) {
			monitor.acquire();
		}
		validator.checking(new Validations() {
			{
				that(result.size() > 0, "erro", "Não foi encontrado nenhum registro.");
			}
		});
		validator.onErrorUse(logic()).forwardTo(GenericController.class).capacityIndicator();
		JRDataSource ds = new JRBeanCollectionDataSource(result);
		JasperReport report = (JasperReport) JRLoader.loadObject(servletContext.getRealPath("/WEB-INF/report/CapacityIndicator.jasper"));
		JasperPrint print = JasperFillManager.fillReport(report, null, ds);
		byte[] resp = JasperExportManager.exportReportToPdf(print);
		InputStream in = new ByteArrayInputStream(resp);
		return new InputStreamDownload(in, "application/pdf", "report.pdf");
	}

View:

<h3>Capacity Indicator</h3>
		<div class="errrors">
			<ul>
				<c:forEach var="error" items="${errors}">
					<li>${error.message}</li>
				</c:forEach>
			</ul>
		</div>

Erro: aparecendo interrogação antes e depois da mensagem

[URL=http://img7.imageshack.us/i/xdv.jpg/][/URL]

Alguem tem alguma idéia do que pode estar acontecendo?

3 Respostas

Lucas_Cavalcanti

vc não precisa criar um validations para cada regra de validação… isso funciona:

validator.checking(new Validations() {
			{
				that(mes != null && mes > 0 && mes <= 12, "erro", "Mês deve ser maior que 0 e menor ou igual a 12");
				that(ano != null, "erro", "Preencha o ano corretamente.");
			}
		});

e o que está acontecendo, é que o último parâmetro do that é uma chave de i18n… ou seja vc colocaria uma string tipo “preencha.ano”, e no arquivo messages.properties colocaria

preencha.ano = Preencha o ano corretamente.
V

Certo, mas existe alguma forma de mandar a mensagem direto?

Lucas_Cavalcanti

crie a classe:

public class NullResourceBundle extends ResourceBundle {

	@Override
	public Enumeration<String> getKeys() {
		return Collections.enumeration(Collections.<String>emptyList());
	}
	@Override
	protected Object handleGetObject(String key) {
		return key;
	}
}

e qdo vc for instanciar o validations, vc passa ela:

validator.checking(new Validations(new NullResourceBundle())) {{
  ....
}});
Criado 25 de janeiro de 2010
Ultima resposta 25 de jan. de 2010
Respostas 3
Participantes 2