0

無駄にプライムフェイスを使用してロケールを変更しようとしています。これが私のBeanコードです:

// more imports here
@ManagedBean
@SessionScoped
public class DateBean implements Serializable{
  private Date startDate, endDate;

  private Locale locale = FacesContext.getCurrentInstance().getViewRoot().getLocale();

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

  public Locale getLocale(){
    return locale;
   }

 public void changeLocale(String loc){
    FacesContext context = FacesContext.getCurrentInstance();
    locale = new Locale(loc);
    context.getViewRoot().setLocale(locale);
 }
}

フェイスレット:

 <?xml version="1.0" encoding="ISO-8859-1" ?>
 <!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:p="http://primefaces.org/ui" 
 xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core">
 <f:view locale="#{dateBean.locale}">
 <h:head>
 <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
 <title>Insert title here</title>
 <h:outputScript library="scripts" name="#{dateBean.locale}.js"></h:outputScript>
 </h:head>
 <h:body>
 <h:form>              
  <p:commandButton value="de" action="#{dateBean.changeLocale('de')}" >
     <p:ajax update="@form" process="@form"></p:ajax>
 </p:commandButton>  
 <p:calendar id="cc" value="#{dateBean.startDate}" required="true" showOn="both"  
 requiredMessage="Start date required"/>
 <p:message for="cc"></p:message>
 </h:form>
 </h:body>
 </f:view>
 </html>

ロケール ボタンをクリックしても、カレンダーのロケールが deutsch に変更されず、例外もありません。ただし、この方法で古い JSF2.* CommandButton コンポーネントを使用してこのタスクを実行するのは簡単です。

 <h:commandButton value="portugal" action="#{dateBean.changeLocale('pt')}" >
  <f:ajax render="@form"></f:ajax>
 </h:commandButton>

皆さん、私がそれを理解するのを手伝ってもらえますか?

4

1 に答える 1

1

Primefaces ライブラリは、そのコンポーネントのドイツ語翻訳を提供していません。JavaScript をダウンロードして、コードに添付する必要があります。次に、カレンダーで必要な を使用しlocaleます。このサイトを見てください。ここに、問題に関する詳細情報があります。

また、ロケールに応じて Javascript ファイルをインクルードしています ( <h:outputScript library="scripts" name="#{dateBean.locale}.js">)。これにより、ロケールに応じて JavaScript ファイルが動的にインクルードされます。このタグはビュー全体でレンダリングされるため、ajax リクエストで部分を更新するだけなのでh:form、問題が発生する可能性があります。そのため、現在、翻訳ファイルはロケールで利用できません。適切な解決策: 最初から必要なすべての JavaScript ファイルを含めるだけです。

于 2013-06-18T20:14:48.343 に答える