funcionou Lucas
vc pode me dizer qual a diferença entre onErrorUsePageOf e onErrorRedirectTo? (detalhes por favor :D)
e pra adicionar uma mensagem de validação customizada eu criei umas classes… me diz oq q vc acha
a interface do meu validator customizado:
public interface IValidatorCustom {
int getErrorIndexByCategory(final String category);
int getErrorIndexByMessage(final String message);
boolean hasErrorCategory(final String category);
boolean hasErrorMessage(final String message);
void changeErrorDetailsByCategory(final String category, final String newCategory, final String newMessage);
void changeErrorDetailsByMessage(final String message, final String newMessage, final String newCategory);
}
a implementação do meu validator customizado:
import java.util.List;
import br.com.caelum.vraptor.Result;
import br.com.caelum.vraptor.core.Localization;
import br.com.caelum.vraptor.ioc.Component;
import br.com.caelum.vraptor.ioc.RequestScoped;
import br.com.caelum.vraptor.proxy.Proxifier;
import br.com.caelum.vraptor.validator.BeanValidator;
import br.com.caelum.vraptor.validator.DefaultValidator;
import br.com.caelum.vraptor.validator.Message;
import br.com.caelum.vraptor.validator.Outjector;
import br.com.caelum.vraptor.validator.ValidationMessage;
import br.com.caelum.vraptor.view.ValidationViewsFactory;
/**
* Overrides VRaptor's DefaultValidator object. Provides new methods to manage validations.
*/
@Component
@RequestScoped
public class ValidatorCustom extends DefaultValidator implements IValidatorCustom {
//--------------------------------------------------------------------------
// Constructors:
public ValidatorCustom(final Result result, final ValidationViewsFactory factory, final Outjector outjector, final Proxifier proxifier, final List<BeanValidator> beanValidators, final Localization localization) {
super(result, factory, outjector, proxifier, beanValidators, localization);
}
//--------------------------------------------------------------------------
// IValidatorCustom interface implementation:
public int getErrorIndexByCategory(final String category) {
final List<Message> errors = getErrors();
for (final Message error : errors) {
if (error.getCategory().equals(category)) {
return errors.indexOf(error);
}
}
return -1;
}
public int getErrorIndexByMessage(final String message) {
final List<Message> errors = getErrors();
for (final Message error : errors) {
if (error.getMessage().equals(message)) {
return errors.indexOf(error);
}
}
return -1;
}
public boolean hasErrorCategory(final String category) {
return getErrorIndexByCategory(category) > -1 ? true : false;
}
public boolean hasErrorMessage(final String message) {
return getErrorIndexByMessage(message) > -1 ? true : false;
}
public void changeErrorDetailsByCategory(final String category, final String newCategory, final String newMessage) {
getErrors().set(
getErrorIndexByCategory(category),
new ValidationMessage(newMessage, newCategory));
}
public void changeErrorDetailsByMessage(final String message, final String newMessage, final String newCategory) {
getErrors().set(
getErrorIndexByMessage(message),
new ValidationMessage(newMessage, newCategory));
}
//--------------------------------------------------------------------------
}
no meu controller eu faço:
// validator é do tipo ValidatorCustom.
final String fileLimitExceeded = "???file.limit.exceeded???";
if (validator.hasErrorMessage(fileLimitExceeded)) {
validator.changeErrorDetailsByMessage(
fileLimitExceeded,
(new StringBuilder())
.append("Tamanho do arquivo excedeu o permitido (")
.append("<TAMANHO_AQUI>")
.append(" MB)")
.toString(),
"Erro no envio de arquivo");
validator.onErrorRedirectTo(MyController.class).novoRegistro(/*AQUI DEVERIA VIR O OBJETO Q VEM NULL DO VRAPTOR*/);
}
a estrutura de validação aqui do projeto que eu estou já está pronta no template da página
não dá pra mudar muito (elas sempre aparecem na parte de baixo e é iterada no JSP)
então criei essa maneira pra colocar uma mensagem customizada
agora to com outro problema
gostaria de saber como eu faço pra manter os dados no formulário depois do onErrorRedirectTo
qd acontece um erro por limite de tamanho excedido, todos os parâmetros do método do controller chegam nulos (exceto os primitivos)
acho q isso não deveria acontecer