开发者

ICEfaces v2.0.0 Internationalization problem - form is not redisplayed upon action listener call

I am experiencing problems with localization.

i am using

JSF 2.0 Mojarra (xhtml not jsp) (2.02 - FCS) IceFaces Core 2.0.0 - beta1 IceFaces Compatibility Library v2.0.0. - beta1

Here is the sample of the xhtml page.

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> 

and managed 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) {} 

}

my web.xml is as follows:

<?xml version="1.0" encoding="ASCII"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java开发者_如何学C.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>

and 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>

The problem is that upon the click on the button, the locale is not changed. Upon manual refresh, the correct locale has been shown.

Could you please help me with this. Have to say that the same page, implemented in pure JSF 2.0 (icefaces excluded) is working perfectly.

Thanks


You need to re-render the entire page or better, fire a synchronous request instead of an asynchronous (ajaxical) request which would only render the page partially.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜