estou precisando colocar este objeto dentro de outro… para tal, preciso saber onde ele fica, pra qual escopo ele vai… alguem sabe ?
Request, o validator usa result.include(“errors”, errors)
O escopo dele é no request, com o nome errors, e nada mais é que um List<? extends Message>.
pois é … essa lista q é um problema =P … precisava era de um mapa O.O … vou fazer meu encapsulamento maluco
cria um interceptor que pega essa variavel errors e transforma num mapa…
vc pode fazer isso com result.included().get(“errors”) ou algo do tipo
Lucas, não dá para o Lavieri sobrescrever o validator padrão e fazer o mapeamento interno com um map?
se eu soubesse o nome do interceptor é o q eu faria… o.O
Pronto consegui!
<c:if test="${validatorErrors.notEmpty}">
Ocorreram falhas!!
</c:if>
<c:if test="${validatorErrors.hasError.login}">
${validatorErrors.message.login}
</c:if>
<c:forEach var="error" items="${validatorErrors.errorList}">
${error.category} - ${error.message}<br />
</c:forEach>
eu criei, um objeto q encapsula a lista de mensagem, conforme abaixo
[code]package br.com.simtecnologia.vraptor3.validator;
import java.io.Serializable;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import br.com.caelum.vraptor.Result;
import br.com.caelum.vraptor.Validator;
import br.com.caelum.vraptor.ioc.Component;
import br.com.caelum.vraptor.ioc.RequestScoped;
import br.com.caelum.vraptor.validator.Message;
@Component
@RequestScoped
public class ValidatorView implements Serializable {
private static final long serialVersionUID = -7168827997755295928L;
private final Result result;
private final Validator validator;
private Map<String,String> message;
private List<Message> errorList;
private Map<String,Boolean> hasError;
public ValidatorView(Result result, Validator validator) {
this.result = result;
this.validator = validator;
}
public boolean isNotEmpty() {
return validator.hasErrors();
}
public boolean isEmpty() {
return !isNotEmpty();
}
@SuppressWarnings("unchecked")
public List<Message> getErrorList() {
if (errorList == null)
errorList = (List<Message>) result.included().get("errors");
return errorList;
}
public Map<String, String> getMessage() {
if (message == null) {
message = new HashMap<String, String>();
hasError = new HashMap<String, Boolean>();
for (Message m :getErrorList()) {
message.put(m.getCategory(), m.getMessage());
hasError.put(m.getCategory(), true);
}
}
return message;
}
public Map<String, Boolean> getHasError() {
if (hasError == null)
getMessage();
return hasError;
}
}
[/code]
e então eu injeto ele em um interceptor, e jogo dentro do result.include, atravez da key validatorErrors
ficou Xou de bola!!
o que o garcia falou é de criar uma classe:
@Component
public class MeuValidator extends DefaultValidator {
//delegate constructor
@Override
public void add(Message message) {
//adiciona no mapa
super.add(message);
}
//getter pro mapa
}
e na jsp vc consegue acessar via ${meuValidator.mapa}