| Author |
Message |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 06/04/2006 08:41:58
|
IceW0lf
![[Avatar]](/images/avatar/7cbbc409ec990f19c78c75bd1e06f215.jpg)
Joined: 16/03/2006 08:33:38
Messages: 1546
Location: Brasília
Offline
|
Bom vamos ao meu sofrimento dessa vez.
Estou tentando implementar uma validação com internacionalização.
Então temos o ClienteAction e ao validar queremos a resposta no i18n ok.
Code:
public String add() throws Exception {
int result = model.addCliente();
if (result == Cliente.OK) {
return SUCCESS;
} else if (result == Cliente.COSTUMER_ALREADY_EXISTS) {
addError("cliente", COSTUMER_ALREADY_EXISTS_ERROR);
return ERROR;
}
}
a resposta deveria ser "este cliente ja existe" ou "Costumer already exists"
no aplicationManager esta:
Code:
action("Cliente", ClienteAction.class)
.on(SUCCESS, redir("addCli.jsp"))
.on(ERROR, fwd("addCli.jsp"))
.filter(common)
.filter(new VOFilter(Cliente.class, "cliente"))
.filter(new ValidatorCliente())
.filter(new InjectionFilter());
o ValidatorCliente está assim:
Code:
public class ValidatorCliente extends ValidationFilter {
public void initValidator() {
add("cliente", new RequiredFieldRule(), FIELD_REQUIRED_ERROR);
add("cliente", new StringRule(3, 50), INVALID_LENGTH);
add("cliente", new RegexRule(NAME_PATTERN), INVALID_CHARACTERS);
add("nomeContato", new RequiredFieldRule(), FIELD_REQUIRED_ERROR);
add("nomeContato", new StringRule(6, 50), INVALID_LENGTH);
add("nomeContato", new RegexRule(NAME_PATTERN), INVALID_CHARACTERS);
add("email", new RequiredFieldRule(), FIELD_REQUIRED_ERROR);
add("email", new StringRule(6, 50), INVALID_LENGTH);
add("email", new EmailRule(), INVALID_CHARACTERS);
}
private static final String NAME_PATTERN = "^[a-zA-Z0-9\\.\\-\\_]+$";
private static final int FIELD_REQUIRED_ERROR = 3;
private static final int INVALID_LENGTH = 4;
private static final int INVALID_CHARACTERS = 5;
public String execute() throws Exception {
throw new ActionException("Nothing here!");
}
}
e temos o arquivo i18n pra tentar de tudo coloquei os arquivos i18n com o mesmo nome da classe e tudo, tanto pasta messages quanto na validation.
mas a mensagem funciona mas me retornando os NUMEROS 1, 2, 3, 4, 5. e nao as mensagem q delas deveriam fazer parte.
alguma sugestão.
|
Leiber Wallace
Voixy ::: Soluções em Telecomunicações |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 06/04/2006 09:15:16
|
saoj
Joined: 01/07/2005 09:59:17
Messages: 2846
Location: Rio de Janeiro, RJ
Offline
|
Vc colocou as mensagens em:
/tomcat/webapps/SUAAPPAQUI/validation/ValidatorCliente.i18n
?
|
Sergio Oliveira
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 06/04/2006 09:36:59
|
IceW0lf
![[Avatar]](/images/avatar/7cbbc409ec990f19c78c75bd1e06f215.jpg)
Joined: 16/03/2006 08:33:38
Messages: 1546
Location: Brasília
Offline
|
Vc colocou as mensagens em:
/tomcat/webapps/SUAAPPAQUI/validation/ValidatorCliente.i18n
?
SIM....
Se eu não estiver enganado.
no meu ClienteAction temos o public void initValidator(Validator val, String innerAction) com suas validações.
entao ele verifica os campos conforme as regrinhas correto ?
e retorna o erro que no caso vamos simular o campo não preenchido:
val.add("campo", new RequiredFieldRule(), FIELD_REQUIRED_ERROR);
nas declarações acima teriamos isso private static final int FIELD_REQUIRED_ERROR = 3; onde o 3 é a mensagem contida no arquivo i18n correto?
passando por esses, ou seja, todas as regrinhas estando OK teriamos outra validação:
Code:
public String add() throws Exception {
int result = model.adicionar();
if (result == Cliente.OK) {
return SUCCESS;
} else if (result == Cliente.USERNAME_ALREADY_EXISTS) {
addError(USERNAME_ALREADY_EXISTS_ERROR);
return ERROR;
} else if (result == Cliente.COSTUMER_ALREADY_EXISTS) {
addError(COSTUMER_ALREADY_EXISTS_ERROR);
return ERROR;
}
return ERROR;
}
Onde ele utiliza a classe Cliente e verifica se o mesmo já existe e ai retornaria a mensagem de erro... esta funciona perfeitamente retorna o texto completo.
só na tentativa anterior retorna os numeros.
|
Leiber Wallace
Voixy ::: Soluções em Telecomunicações |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 06/04/2006 09:52:42
|
saoj
Joined: 01/07/2005 09:59:17
Messages: 2846
Location: Rio de Janeiro, RJ
Offline
|
Agora vc me confundiu todo.
Tu tá usando o ValidatorCliente que estende ValidationFilter.
Ou vc está colocando a validação na action e usando o ValidatorFilter global ?
Sergio
|
Sergio Oliveira
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 06/04/2006 12:31:58
|
zelopes
![[Avatar]](/images/avatar/a3f390d88e4c41f2747bfa2f1b5f87db.jpg)
Joined: 15/03/2006 20:06:30
Messages: 12
Offline
|
eu tive exatamente este problema...idêntico...numeros da msg e nao a mensagem...tive com os dois...nao lembro exatamente como resolvi...mas era um detalhezinho...quando preciso validar na action também...acabo usando as duas pastas...
/validation...para as validaçoes extendendo o filtro do menta...
/messages...pras validaçoes dinamicas da action...
ambas a internacionalização funciona...
umas perguntas...
na sua pasta /messages...vc tem...???
NomeDaAction_en_US.i18n
NomeDaAction_pt_BR.i18n
etc etc???
e na sua pasta /validation...vc tem...???
NomeDaClasseValidation_en_US.i18n
NomeDaClasseValidation_pt_BR.i18n
etc etc???
qualquer coisa mais tarde te mando um exemplo com isso exatamente como tu tem ae...se tu nao conseguir ajeitar antes...agora to meio ocupado aqui...de noite to em casa...
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 06/04/2006 12:53:15
|
saoj
Joined: 01/07/2005 09:59:17
Messages: 2846
Location: Rio de Janeiro, RJ
Offline
|
saoj wrote:
Ou vc está colocando a validação na action e usando o ValidatorFilter global ?
Eu que me confundi, quando vc diz validar na action vc diz fazer um addMessage, addError, certo ?
O que o zelopes falou está certinho...
|
Sergio Oliveira
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 06/04/2006 12:55:17
|
saoj
Joined: 01/07/2005 09:59:17
Messages: 2846
Location: Rio de Janeiro, RJ
Offline
|
/tomcat/webapps/SUAAPPAQUI/validation/ValidatorCliente.i18n
E isso que eu falei tb está errado. O certo seria:
/tomcat/webapps/SUAAPPAQUI/validation/ValidatorCliente_loc.i18n
ou seja
/tomcat/webapps/SUAAPPAQUI/validation/ValidatorCliente_pt_BR.i18n
/tomcat/webapps/SUAAPPAQUI/validation/ValidatorCliente_en_US.i18n
etc.
Será que ele deveria pegar o ValidatorCliente.i18n sem nenhum locale se não encontrasse o arquivo com o locale ?????
|
Sergio Oliveira
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 06/04/2006 13:03:59
|
zelopes
![[Avatar]](/images/avatar/a3f390d88e4c41f2747bfa2f1b5f87db.jpg)
Joined: 15/03/2006 20:06:30
Messages: 12
Offline
|
Será que ele deveria pegar o ValidatorCliente.i18n sem nenhum locale se não encontrasse o arquivo com o locale ?????
Olá Sérgio...
eu prefiro definir os locales...mas pq não né??? eu acho bacana também...acho interessante...o ww é assim também...se ele não acha o arquivo com o locale...
[]'s
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 06/04/2006 13:12:24
|
saoj
Joined: 01/07/2005 09:59:17
Messages: 2846
Location: Rio de Janeiro, RJ
Offline
|
É verdade...
Qual seria o locale do um arquivo minhaaction.i18n ???
A questão é que o cara tem que colocar pelo menos um arquivo para o locale padrão da aplicação dele.
Se o cara não define nenhum locale no ApplicationManager (método loadLocales), então o Locale default fica sendo o en_US, ou seja, o cara vai ter que colocar _en_US.i18n nos arquivos i18n.
Uma coisa que eu acho que está foltando no Menta é:
Se o cara colocar _en.i18n e não for encontrado um en_US.i18n, então ele deveria pegar esse _en.i18n.
O que vc acha ZeLopes ?
|
Sergio Oliveira
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 06/04/2006 14:58:40
|
IceW0lf
![[Avatar]](/images/avatar/7cbbc409ec990f19c78c75bd1e06f215.jpg)
Joined: 16/03/2006 08:33:38
Messages: 1546
Location: Brasília
Offline
|
Bom gente... acredito q eu esteja fazendo errado mais vamos lah...
Primeiro pra tirar qualquer duvida os arquivos i18n estao sim tanto na pasta messages quanto na pasta validation (só por teste que eu estava fazendo mesmo)
vamos ao meu problema.
- Tenho um formulario de cadastro de clientes.
- Ao tentar gravar devo 1° verificar os campos se estão válidos (vazios, caracteres invalídos, etc) se achou erro RETORNA ERROR
- Após verificar isso eu faço outra verificação se o cliente já existe ou não, se encontrar retorna ERROR com mensagem de já existe etc.
Entao quando eu rodo ele 1° ta validando o campos mas a mensagem que vem pra ser impressa são os numeros que deveriam indicar uma mensagem do arquivo i18n.
Mas se a pessoa preenche corretamente os dados e faz validação de cliente existente ou não a mensagem vem CORRETA ou seja o cara existe ou cadastro efetuado com sucesso.
Acredito q eu tenha errado no meu ClienteAction ou no meu ClienteManager.
Mas morri ai... pensei pensei pensei e deve com certeza deve ser algo BEMMMMMMMMMM IMBECIL pra variar neh... sempre rola essas coisas por isso pedi uma luz do nosso guru o serjão =D
Fala ai Guru me de uma luz
Um abraço a todos....
acredito q to misturando as mensagens com os erros.
|
Leiber Wallace
Voixy ::: Soluções em Telecomunicações |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 06/04/2006 15:02:23
|
saoj
Joined: 01/07/2005 09:59:17
Messages: 2846
Location: Rio de Janeiro, RJ
Offline
|
Vc está usando filtro de validação ou está fazendo a validação na mão dentro da action ???????????????????
|
Sergio Oliveira
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 06/04/2006 15:14:47
|
IceW0lf
![[Avatar]](/images/avatar/7cbbc409ec990f19c78c75bd1e06f215.jpg)
Joined: 16/03/2006 08:33:38
Messages: 1546
Location: Brasília
Offline
|
Bom...
Está na ACTION.
ESTA é a ClienteAction
Code:
public class ClienteAction extends BaseAction implements ModelDriven, Validatable {
public static final String ERROR2 = "error2";
public static final String NOCLIENTES = "noclientes";
private static final String NAME_PATTERN = "^[a-zA-Z0-9\\.\\-\\_]+$";
private static final int USERNAME_ALREADY_EXISTS_ERROR = 1;
private static final int COSTUMER_ALREADY_EXISTS_ERROR = 2;
private static final int FIELD_REQUIRED_ERROR = 3;
private static final int INVALID_LENGTH = 4;
private static final int INVALID_CHARACTERS = 5;
private Cliente model = new Cliente();
public Object getModel() {
return model;
}
public String add() throws Exception {
int result = model.addCliente();
if (result == Cliente.OK) {
return SUCCESS;
} else if (result == Cliente.USERNAME_ALREADY_EXISTS) {
addError(USERNAME_ALREADY_EXISTS_ERROR);
return ERROR;
} else if (result == Cliente.COSTUMER_ALREADY_EXISTS) {
addError(COSTUMER_ALREADY_EXISTS_ERROR);
return ERROR;
}
return ERROR;
}
public String execute() throws Exception {
throw new ActionException("Nothing here!");
}
public void initValidator(Validator val, String innerAction) {
if (innerAction != null && innerAction.equals("add")) {
val.add("cliEmp", new RequiredFieldRule(), FIELD_REQUIRED_ERROR);
val.add("cliEmp", new StringRule(3, 50), INVALID_LENGTH);
val.add("cliEmp", new RegexRule(NAME_PATTERN), INVALID_CHARACTERS);
val.add("cliUsu", new RequiredFieldRule(), FIELD_REQUIRED_ERROR);
val.add("cliUsu", new StringRule(6, 50), INVALID_LENGTH);
val.add("cliUsu", new RegexRule(NAME_PATTERN), INVALID_CHARACTERS);
val.add("cliNomRes", new RequiredFieldRule(), FIELD_REQUIRED_ERROR);
val.add("cliNomRes", new StringRule(4, 50), INVALID_LENGTH);
val.add("cliNomRes", new RegexRule(NAME_PATTERN), INVALID_CHARACTERS);
val.add("cliEma", new RequiredFieldRule(), FIELD_REQUIRED_ERROR);
val.add("cliEma", new StringRule(6, 50), INVALID_LENGTH);
val.add("cliEma", new EmailRule(), INVALID_CHARACTERS);
}
}
dai temos o nosso Cliente (Manager)
Code:
private ClienteDAO clienteDAO = null;
private Cli cli = null;
public Cliente() { }
public void setClienteDAO(ClienteDAO clienteDAO) {
this.clienteDAO = clienteDAO;
}
public void setCli(Cli cli) {
this.cli = cli;
}
public Cli getCli() {
return cli;
}
public int addCliente() throws Exception {
if (clienteDAO == null) throw new IllegalStateException("clienteDAO is not set for Registration!");
if (cli == null) throw new IllegalStateException("no user for Registration!");
// make username, password and email lowercase...
cli.setCliEmp(cli.getCliEmp().toUpperCase());
cli.setCliNomRes(cli.getCliNomRes().toUpperCase());
cli.setCliUsu(cli.getCliUsu());
cli.setCliEma(cli.getCliEma());
cli.setCliLog(cli.getCliLog());
cli.setCliBai(cli.getCliBai());
cli.setCliCid(cli.getCliCid());
cli.setCliUf(cli.getCliUf());
cli.setCliCep(cli.getCliCep());
// check if username already exists...
Cli c = clienteDAO.loadByEmpresa(cli.getCliEmp());
if (c != null) return COSTUMER_ALREADY_EXISTS;
// check if email already exists...
c = clienteDAO.loadByUser(cli.getCliUsu());
if (c != null) return USERNAME_ALREADY_EXISTS;
// register!
clienteDAO.insertCliente(cli);
return OK;
}
|
Leiber Wallace
Voixy ::: Soluções em Telecomunicações |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 06/04/2006 16:52:37
|
saoj
Joined: 01/07/2005 09:59:17
Messages: 2846
Location: Rio de Janeiro, RJ
Offline
|
Então eu já sei o que é.
É bug de implementação.
Ele vai procurar por ValidatorFilter_loc.i18n.
Deveria procurar pelo nomedacation_loc.i18n, certo ?
Vou ver se dá para mudar isso !!!!
Tenva colocar ValidatorFilter_loc.i18n.
Ou seja, o que está no initValidator vai vir de ValidatorFilter_loc.i18n e o que está nos outros métodos vai vir de nomedaaction_loc.i18n.
Sergio
|
Sergio Oliveira
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 06/04/2006 18:10:00
|
saoj
Joined: 01/07/2005 09:59:17
Messages: 2846
Location: Rio de Janeiro, RJ
Offline
|
Esse problema está corrigido no SVN (SubVersion).
A partir da versão 1.2.2 ele vai pegar corretamente o nome do arquivo do nome da action e não do nome do filtro, que nesse caso, como é global, é o mesmo para todas as actions.
|
Sergio Oliveira
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 07/04/2006 07:09:27
|
IceW0lf
![[Avatar]](/images/avatar/7cbbc409ec990f19c78c75bd1e06f215.jpg)
Joined: 16/03/2006 08:33:38
Messages: 1546
Location: Brasília
Offline
|
Quer dizer q era bug mesmo ?
Fico muito feliz de ajudar o menta minha 1ª contribuição
Pensei q eu não poderia fazer um resposta
de erro no CLIENTE e VALIDAÇÃO no outro.
Maravilha então.
Um abraço Serjão
Vamos experimentar pessoal....
|
Leiber Wallace
Voixy ::: Soluções em Telecomunicações |
|
|
 |
|
|