ICEfaces v2.0.0 проблема интернационализации - форма не отображается повторно при вызове слушателя действия - PullRequest
1 голос
/ 04 августа 2010

У меня проблемы с локализацией.

Я использую

JSF 2.0 Mojarra (xhtml not jsp) (2.02 - FCS) IceFaces Core 2.0.0 - бета1 Библиотека совместимости IceFaces v2.0.0.- beta1

Вот пример страницы в формате 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> 

и управляемый компонент:

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

}

мой web.xml выглядит следующим образом:

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

и Face-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>

Проблема в том, что при нажатии на кнопку языковой стандарт не изменяется.После обновления вручную отображается правильная локаль.

Не могли бы вы помочь мне с этим.Должен сказать, что та же самая страница, реализованная в чистом JSF 2.0 (исключая icefaces), работает отлично.

Спасибо

1 Ответ

0 голосов
/ 04 августа 2010

Вам необходимо повторно обработать всю страницу или лучше, запустить синхронный запрос вместо асинхронного (ajaxical) запроса, который будет отображатьстраница частично.

...