Internationalization + JavaServer Faces + Invocar método BachinkBean

Olá Pessoal,

Lá venho eu com mais “dúvidas crueis” com relação a internacionalização de uma aplicação web. Pois bem, vou mostrar como é que ficou desenhada a aplicação web após as intervenções anteriores aqui do pessoal do fórum…

Olha aí o meu arquivo de definição de template (Struts Tiles):

[code]

<tiles:insert attribute=“header” flush=“false” />

<div id="principal">

    <div id="lingua">
        <div id="lingua_content">
            <tiles:insert attribute="lingua_content" flush="false" />
        </div>
    </div>
    <div style="clear: both"></div>

    <div id="cabecalho">
        <div id="cabecalho_content">
            <tiles:insert attribute="cabecalho_content" flush="false" />
        </div>
    </div>
    <div style="clear: both"></div>[/code]

Este aí é só um pedaçinho de todo o arquivo, só para vocẽs terem uma “idéia” de como está “estruturada” a minha aplicação web.

Aí, eis o meu “header”:

[code]<f:view locale="#{lingua.locale}">
<meta … />

<style …
<script …

<f:loadBundle basename="dev.java.net. ... .message.core.Messages" var="msgs"/>

</f:view>[/code]

O faces-config.xml:

    <application>
        <view-handler>org.apache.myfaces.tomahawk.application.jsp.JspTilesViewHandlerImpl</view-handler>
        <locale-config>
          <default-locale>pt_BR</default-locale>
          <supported-locale>en_US</supported-locale>
          <supported-locale>es_ES</supported-locale>
          <supported-locale>de_DE</supported-locale>
        </locale-config>
        <message-bundle>dev.java.net. ... .message.core.Messages</message-bundle>
    </application>

    <managed-bean>
        <managed-bean-name>lingua</managed-bean-name>
        <managed-bean-class>dev.java.net. ... .lingua.web.jsf.LinguaBackingBean</managed-bean-class>
        <managed-bean-scope>session</managed-bean-scope>
    </managed-bean>

Bom, o JSP:

<f:subview id="lingua_content"> <h:form id="form_lingua_content"> <t:commandLink id="portugues" action="#{lingua.portugues}" value="#{msgs.linguaPortuguese}" title="#{msgs.linguaPortugueseTitle}"/> <t:commandLink id="espanhol" [b]action="#{lingua.espanhol}" [/b]value="#{msgs.linguaSpanish}" title="#{msgs.linguaSpanishTitle}"/> <t:commandLink id="ingles" action="#{lingua.ingles}" value="#{msgs.linguaEnglish}" title="#{msgs.linguaEnglishTitle}"/> <t:commandLink id="alemao" action="#{lingua.alemao}" value="#{msgs.linguaDeutch}" title="#{msgs.linguaDeutchTitle}"/> </h:form> </f:subview>

E o meu LinguaBackingBean:

[code]public class LinguaBackingBean{

private Locale locale= null;

/** Creates a new instance of LinguaBackingBean */
public LinguaBackingBean() {
    locale= new Locale("pt", "BR");
}

public Locale getLocale(){
    return this.locale;
}

public void setLocale(Locale locale){
    this.locale= locale;
}

public String portugues(){
    locale= new Locale("pt", "BR");
    return "reload";
}

public String ingles(){
    locale= new Locale("en", "US");
    return "reload";
}[/code]

No meu faces-config.xml:

<navigation-rule> <from-view-id>/*</from-view-id> <navigation-case> <from-outcome>reload</from-outcome> <to-view-id>/index.jsp</to-view-id> </navigation-case> </navigation-rule>

Ah!!! Os arquivos de properties:

 - br.com.....message.core
 --- Messages.properties
 ----- default language
 ----- pt_BR - Portuguese (Brazil)
 ----- es_ES - Spanish (Spain)
 ----- en_US - English (United States)[/code]

Bom... Agora o problema!!! Lá no meu arquivo "header.jsp" é feita a seguinte "chamada":

[code]<f:view locale="#{lingua.locale}">[/code]

Esta "chamada" é executada perfeitamente... Ele busca lá no meu BackingBean o Locale e, se eu mudo, por exemplo, no construtor da classe LinguaBackingBean o Locale que dever ser "instanciado" inicialmente, ele carrega beleza as [i]properties[/i].

Agora, no meu arquivo JSP "lingua" eu tenho o seguinte:

[code]        <t:commandLink id="ingles" action="#{lingua.ingles}" value="#{msgs.linguaEnglish}" title="#{msgs.linguaEnglishTitle}"/>

E… O método “inglês” do meu BackingBean simplemente não é executado. Eu já fiz inumeras tentativas, do tipo, ao invés de ter uma subview ao redor do form ter uma view, ao invés de ter um commandLink, ter um commandButton, ao ínves de ter no meu BackingBean o método “ingles” ter o método “getIngles”, e não sei mais o que tudo! Simplemente, ao clicar no link, o método no BackingBean não é executado!

Não é gerado nenhum tipo de log para que eu pudesse analisar e… Acredito que é algo simples, mas não estou conseguindo identificar (talvez por estar já faz um tempão querendo fazer este “esquema” de internacionalização funcionar e…)

Bom, fico no aguarde de alguma “orientação”!

No mais, fico grato desde já pela atenção de todos!

Att,
E. Vinicius D. Mayer

É muito engraçado, parece ser de prache, colocar “jargões” aqui como forma de dizer que tem conhecimento, sobre certos assuntos. Gente vamos ser mais claros, lembrem-se que aqui, existem usuários novos, que ainda não estão acostumados, com a “sopa de letrinha” do JAVA.

Olá Willian Silva,

Fico muitissimo grato pela sua colaboração, atenção e tempo dedicado!

Abraço,
E. Vinicius D. Mayer

Vinícius conseguiu achar e resolver o teu problema?!?!!?

Estou com algo similar, tô desenvolvendo uma aplicação usando myfaces, tomahawk (ambos 1.1.5-SNAPSHOT) e o Tiles mas minha aplicação ñ acha os arquivos os resources. Já tentei <f:loadBundle> no jsp, (JSP 1.2) e no tiles-faces-config.xml e nada de aparecer pelo menos um errinho pra iluminar o caminho. Já coloquei dentro de <f:view>, <h:form> e nada.

Vc conseguiu algo? O q vc fez?

Abraços
T++
Charles

Cara,

insere tag: <h:messages/>

E verifica o erro que será apresentado!!!

Pode ser problemas de conversões JSF é chato pra kct!!!

OPA, apertei enter sem querer!!! Então…

Vc pode declarar o atributo immedite=“true” no seu commandLink ou commandButton. Isso irá forçar a execução do método ignorando validações do JSF.

Acho que é isso,

boa sorte!!!

Se não sabe pq fica enchendo linguiça!!!

o negócio aq tá cabuloso…
tentei isso o q me falou mas ainda ñ mostra nada.

tô usando o tiles e na minha página header.jsp tem o seguinte código:

<%@ taglib uri=“http://java.sun.com/jsf/html” prefix=“h”%>
<h:messages>
<h:outputText value="#{messages.welcome}" />
</h:messages>

no meu: tiles-faces-config.xml


pt_BR
en_US
pt_BR

e no messages[.pt_BR][.en_US].properties
page_title=Website de Foraminiferos da Costa Brasileira
header_title_1=Foraminiferos da Costa Brasileira
header_title_2=Ecologia e Classificação
welcome=Bem-vindos ao Website de Foraminiferos da Costa Brasileira!

já usei <f:loadBundle/> e no .xml ou e ñ mostra nada onde é utilizada internacionalização de mensagens.

tem outra idéia? acha q estou fazendo algo de errado?

Muito obrigado pela ajuda.
Charles

[quote=dders]OPA, apertei enter sem querer!!! Então…

Vc pode declarar o atributo immedite=“true” no seu commandLink ou commandButton. Isso irá forçar a execução do método ignorando validações do JSF.

Acho que é isso,

boa sorte!!![/quote]

O parametro do UIComponent é “immediate” e não “immedite” como mencionei.

Isso irá forçar o processamento do evento!!!