2010-08-04 12 views
1

Je rencontre des problèmes de localisation.ICEfaces v2.0.0 Problème d'internationalisation - le formulaire n'est pas affiché à nouveau lors de l'appel de l'écouteur d'action

J'utilise

JSF 2.0 Mojarra (xhtml pas jsp) (2,02 - FCS) Icefaces de base 2.0.0 - beta1 Icefaces bibliothèque de compatibilité v2.0.0. - beta1

Voici l'exemple de la page xhtml.

DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" 
xmlns:f="http://java.sun.com/jsf/core" 
xmlns:h="http://java.sun.com/jsf/html" 
xmlns:ice="http://www.icesoft.com/icefaces/component"> 
<h:head> 
<title>"#{msgs.pageTitle}"</title> 
</h:head> 
<h:body> 
<h:form> 
<br /> 
<div align="center"><h:commandButton 
value="#{msgs.serbianLatinAlphabetName}" 
actionListener="#{formSettings.swapLocale1}" immediate="true" /> <h:commandButton 
value="#{msgs.serbianChyrilicAlphabetName}" 
actionListener="#{formSettings.swapLocale1}" immediate="true" /><ice:commandButton 
value="#{msgs.pageTitle}" 
actionListener="#{formSettings.swapLocale1}" immediate="true"/></div> 
</h:form> 
</h:body> 
</html> 

et gérée par le bean:

import java.io.*; 
import java.util.*; 
import javax.faces.bean.*; 
import javax.faces.component.UIViewRoot; 
import javax.faces.context.*; 
import javax.faces.event.*; 

@ManagedBean 
@SessionScoped 
public class FormSettings implements Serializable { 
private boolean isDefault = true; 
private Locale locale = new Locale("sr"); 


public void swapLocale1(ActionEvent event) { 
switchLocale(); 
} 

private void switchLocale() { 
isDefault = !isDefault; 
if (isDefault) { 
locale = new Locale("sr_ME"); 
} else { 
locale = new Locale("sr"); 
} 
//FacesContext.getCurrentInstance().getViewRoot().setLocale(locale); 
FacesContext context = FacesContext.getCurrentInstance(); 
UIViewRoot myViewRoot = context.getViewRoot(); 
myViewRoot.setLocale(locale); 
} 

public Locale getLocale() { 
return locale; 
} 

public void swapLocale2(ValueChangeEvent event) { 
Boolean flag = (Boolean)event.getNewValue(); 
if (flag) { 
switchLocale(); 
} 
} 

public boolean isChecked() { 
return(false); 
} 

public void setChecked(boolean flag) {} 

} 

mon web.xml est la suivante:

<?xml version="1.0" encoding="ASCII"?> 
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0"> 
    <display-name>WePaminus</display-name> 
    <servlet> 
    <servlet-name>Faces Servlet</servlet-name> 
    <servlet-class>javax.faces.webapp.FacesServlet</servlet-class> 
    <load-on-startup>1</load-on-startup> 
    </servlet> 
    <servlet-mapping> 
    <servlet-name>Faces Servlet</servlet-name> 
    <url-pattern>*.jsf</url-pattern> 
    </servlet-mapping> 
    <context-param> 
    <description>State saving method: 'client' or 'server' (=default). See JSF Specification 2.5.2</description> 
    <param-name>javax.faces.STATE_SAVING_METHOD</param-name> 
    <param-value>client</param-value> 
    </context-param> 
    <context-param> 
    <param-name>javax.faces.PROJECT_STAGE</param-name> 
    <param-value>Development</param-value> 
    </context-param> 
    <context-param> 
    <param-name>javax.servlet.jsp.jstl.fmt.localizationContext</param-name> 
    <param-value>resources.application</param-value> 
    </context-param> 
    <listener> 
    <listener-class>com.sun.faces.config.ConfigureListener</listener-class> 
    </listener> 
    <welcome-file-list> 
    <welcome-file>index.jsp</welcome-file> 
    <welcome-file>index.html</welcome-file> 
    </welcome-file-list> 
    <servlet> 
    <servlet-name>Resource Servlet</servlet-name> 
    <servlet-class>com.icesoft.faces.webapp.CompatResourceServlet</servlet-class> 
    <load-on-startup>1</load-on-startup> 
    </servlet> 
    <servlet-mapping> 
    <servlet-name>Resource Servlet</servlet-name> 
    <url-pattern>/xmlhttp/*</url-pattern> 
    </servlet-mapping> 
</web-app> 

et faces-config.xml:

<?xml version="1.0" encoding="UTF-8"?> 

<faces-config xmlns="http://java.sun.com/xml/ns/javaee" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_2_0.xsd" 
version="2.0"> 
<application> 
    <locale-config> 
    <default-locale>sr</default-locale> 
    <supported-locale>sr_ME</supported-locale> 
    </locale-config> 
    <resource-bundle> 
    <base-name>messages</base-name> 
    <var>msgs</var> 
    </resource-bundle> 
</application> 
</faces-config> 

Le problème est que sur le clic sur le bouton, les paramètres régionaux ne sont pas chan ged. Lors de l'actualisation manuelle, les paramètres régionaux corrects ont été affichés.

Pourriez-vous s'il vous plaît aidez-moi de ceci. Je dois dire que la même page, implémentée en pure JSF 2.0 (sauf les icefaces) fonctionne parfaitement.

Merci

Répondre

0

Vous devez réengendrer la page entière ou mieux, tirer une demande au lieu d'un (ajaxical) asynchrone requête synchrone qui ne rend la page partiellement.

+0

Salut BalusC, Merci pour la réponse. Pourriez-vous s'il vous plaît me donner un exemple. Je pense que l'actionlistener déclenche le re-ender de la page entière. Je dois dire que je ne vois ce problème que lorsque j'utilise des icefaces. Avec JSF 2.0, l'interface utilisateur est modifiée en fonction de la langue définie dans l'ensemble de messages. Dans l'exemple, un est manquant. – Risto