Tenho uma validação em Annotations no Struts 2 mas ele não muda o idioma, quando as taglibs <s:text name=“app.form.datainvalida”/> mudam normalmente, mas o texto que retorna via JSON para a view continua em pt-BR
@Bean(name = "actionProduto")
@Namespace(value = "/produto")
@InterceptorRefs(value = {@InterceptorRef(value = "jsonValidationWorkflowStack"),
@InterceptorRef(value = "i18n")})
@Validations(expressions = {
@ExpressionValidator(expression = "dataInicio.getTime() < dataFim.getTime()", key = "app.form.datainvalida", shortCircuit = true)})
public class ActionProduto extends ActionSupport{
/**
* Metodo inicializarQuadro
*
* @return fluxo para iniciar produto quadro
*/
@Action(value = "quadro", results = {
@Result(name = "success", location = "/view/produto/quadro.jsp"),
@Result(name = "input", location = "/view/produto/quadro.jsp")})
public String inicializarQuadro(){
return ActionSupport.SUCCESS;
}
/**
* Metodo send
*
* @return fluxo para enviar o formulario
*/
@Action(value = "send", results = {
@Result(name = "success", location = "/view/produto/quadro.jsp"),
@Result(name = "input", location = "/view/produto/quadro.jsp")})
public String send(){
return ActionSupport.SUCCESS;
}
// -atributos--------------------------------------------------------------------
private Date dataInicio;
private Date dataFim;
// -get e setters--------------------------------------------------------------------
.
.
.
.
}
A key “app.form.datainvalida” não muda de idioma, alguém sabe por que ?
Obrigado.
Olá, Daniel.
Amigo, antes de sua dúvida, uma dica:
Você escreveu muito mais do que precisava nessa Action.
Não precisa de anotação para indica o “namespace”. Igualmente, não precisa fazer um mapeamento só para ir para uma view de entrada.
Acredito que ela faria as mesmas coisas que você quis com este código:
[code]// todo (sub)pacote “actions” possui suas classes mapeadas Automaticamente. E cada subpacote a partir dai vira um “namespace” automaticamente.
package xx.yy.zz.actions.produto;
@InterceptorRefs({@InterceptorRef(value = “jsonValidationWorkflowStack”),@InterceptorRef(value = “i18n”)})
@Validations(expressions = {
@ExpressionValidator(expression = “dataInicio.getTime() < dataFim.getTime()”, key = “app.form.datainvalida”, shortCircuit = true)})
public class SendAction extends ActionSupport{
/**
* Metodo execute // é o padrão! assim nem precisaria da anotação @action
* Assim, seus resultados "success", "input" e "error" serão automaticamente "WEB-INF/content/produto/send.jsp"
*/
public String execute(){
return SUCCESS; // Não precisa indicar o ActionSupport denovo!
}
// -atributos--------------------------------------------------------------------
private Date dataInicio;
private Date dataFim;
// -get e setters--------------------------------------------------------------------
.
.
.
.
}
[/code]
Desse jeito, para chamar a tela de “entrada” sem passar pelo método “execute”, basta: localhost/projeto/produto/send!input e pronto! 
Quanto ao seu erro, coloque um breakpoint no método “execute” e verifique como ficou o getLocale() da Action.
Opa, eu observei o locale durante o processamento da action e continua pt_BR, mas o estranho e que nas jsp’s com a tag EX: <s:text name=“app.title”/> ele muda o idioma, eu estou alterando o idioma em outra action assim:
ActionContext.getContext().setLocale(new Locale(lang, country));
não sei se e o certo, eu venho do Struts 1.x… mas como eu sou averso a JSF por gerar um codigo muito sujo e não permitir termos o controle do java script para Ajax eu estou estudando Struts 2 o antigo ww…( por isso estou escrevendo @Annotations demais, é só um estudo, para aprender, eu trabalho com struts 1.3 ) mas me parece um bugfix esse do locale, ja achei outras pessoas com o mesmo problema apesar de configurar com xml o struts 2.
Obrigado.
Amigo,
com relação ao Locale, lembro que tinha uma versão do struts2 que tava bugada nisso. Já baixou a versão 2.2.1?
Estou com a versão 2.2.1:
Manifest-Version: 1.0
Archiver-Version: Plexus Archiver
Created-By: 1.6.0_20 (Sun Microsystems Inc.)
Built-By: lukasz
Build-Jdk: 1.6.0_20
Specification-Title: Struts 2 Core
Specification-Version: 2.2.1
Specification-Vendor: Apache Software Foundation
Implementation-Title: Struts 2 Core
Implementation-Version: 2.2.1
Bem, então não era esse o problema.
Olha só: como você tava testando outros locales sem sem programaticamente? Tentou usando o parâmetro “request_locale” ou alterando configurações no “about:config” do Firefox?
E você criou outro arquivo .properties com as chaves em outro idioma?
Sim tenho um " language_pt_BR.properties " e um " language_en.properties ", como te disse na jsp funciona perfeitamente então ele acha os arquivos…mas nesse
interceptor " jsonValidationWorkflowStack " ele está com bug… eu acho… mas vou tentar achar uma solução na net… como e um framework novo e ainda com @annotations não tem muito a respeito…
mas valew…
Por que você não usa o “defaulfStack” mesmo?
Potz… testei aqui o " defaulfStack " ele faz reload na pagina,e o sistema é todo em ajax, com div injection, o rertorno que vem com
" jsonValidationWorkflowStack " e perfeito:
/* { "errors":["A Data de Inicio não pode ser maior ou igual que a data de Fim"]} */
por ai eu capturo isso na view e faço e que eu quiser: pinto as bordas dos campos de vermelho …exibo a mensagen do lado do campo …etc… tudo sem reload…
mas infelizmente esta com esse bug… eu tinha feito isso na mão com interceptors do spring e com struts 1.3, mas eu queria um padrão … vou fuçar nos fontes do Struts e depurar, pra ver se eu descubro o que é… ( coisa de doido rs… ) mas eu ja mexi nos fontes do displaytag e gerei um jar e ficou muito bom a paginação com ajax.
Abraço…
Você já tentou inverter a ordem entre “jsonValidationWorkflowStack” e “i18n”?
Já… cara eu vi um post em outro forum com um cara com o mesmo problema e resolveu, mas a config dele era em xml,
o problema acho que nem esta na annotation e sim no locale… o getLocale() na action retorna pt_BR mesmo eu alterando para en_US.
Valews…
Consegui!!! Seguindo esse tutorial:
http://www.mkyong.com/struts2/struts-2-i18n-or-localization-example/
JAVA:
package com.web.struts.action;
import net.sourceforge.sannotations.annotation.Bean;
import org.apache.struts2.convention.annotation.Action;
import org.apache.struts2.convention.annotation.Namespace;
import org.apache.struts2.convention.annotation.Result;
import org.springframework.stereotype.Controller;
import com.opensymphony.xwork2.ActionSupport;
/**
* DOCUMENTACAO DE CLASSE: Actioni18n.java<br>
* FINALIDADE: Alterar o idioma da aplicacao<br>
*
* @author Daniel<br>
* PRIMEIRA VERSAO DE CLASSE: 11/09/2010<br>
* ATUALIZACOES:<br>
*
*/
@Controller
@Bean(name = "actioni18n")
@Namespace(value = "/template")
public class Actioni18n extends ActionSupport{
/**
* @see com.opensymphony.xwork2.ActionSupport#execute()
*/
@Override
@Action(value = "language", results = {@Result(name = "success", location = "/index.jsp")})
public String execute() throws Exception{
return SUCCESS;
}
/**
* O Atributo serialVersionUID da classe
*/
private static final long serialVersionUID = 8942547693506561962L;
}
JSP:
<a href="javascript:language('pt_BR')">Português</a> | <a href="javascript:language('en')">Inglês</a>
<script rtype="text/javascript">
function language(pLang){
$.ajax({
url:"template/language.action?request_locale="+pLang,
type:"get",
success:function(){
window.location.reload();
}
});
}
</script>
era mais facil do que eu havia implementado, 
Valews…