Rumah  >  Soal Jawab  >  teks badan

Cara melaksanakan penyetempatan peringkat sesi dalam JSF dan bukannya setiap peringkat permintaan/lihat hafalan setempat yang dipilih

<p><kod>faces-config.xml</code>:</p> <pre class="brush:php;toolbar:false;"><application> <locale-config> <default-locale>ru</default-locale> <supported-locale>ua</supported-locale> </locale-config> </application></pre> <p>Dalam kaedah tindakan kacang, saya menukar tempat paparan semasa seperti berikut: </p> <pre class="brush:php;toolbar:false;">FacesContext.getCurrentInstance().getViewRoot().setLocale(new Locale("ua"));</pre> <p>Masalahnya ialah <kod>ua</code> hanya digunakan pada permintaan/pandangan, bukan sesi. Permintaan/pandangan lain dalam sesi yang sama akan menetapkan semula tempat kepada nilai lalai <code>ru</code> </p> <p>Bagaimanakah cara saya menggunakan tempattempat pada sesi? </p>
P粉360266095P粉360266095424 hari yang lalu476

membalas semua(2)saya akan balas

  • P粉662802882

    P粉6628028822023-08-23 10:48:27

    Saya melihat bahawa masalah itu juga berkaitan dengan nama fail .properties. Kod Tempatan Java (huruf kecil) seperti: en_gb Tetapi Tempatan yang dijana secara automatik oleh Netbeans ialah huruf kecil_besar, contohnya: messages_en_GB.properties Tukar kepada: messages_en_gb.properties Maka ia sepatutnya berkesan - jika anda telah mencuba segala-galanya

    balas
    0
  • P粉426906369

    P粉4269063692023-08-23 00:27:17

    Anda perlu menyimpan tempat yang dipilih dalam skop sesi dan menetapkannya di dua tempat: sekali melalui atribut UIViewRoot#setLocale()立即在更改区域设置后(这将更改当前视图根的区域设置,从而在后续请求中得到反映;如果之后执行重定向,则此部分是不必要的),以及一次在<f:view>locale (ini akan menetapkan/mengekalkan tempat itu pada permintaan/pandangan berikutnya).

    Berikut ialah contoh bagaimana LocaleBean sepatutnya kelihatan:

    package com.example.faces;
    
    import java.util.Locale;
    
    import javax.faces.bean.ManagedBean;
    import javax.faces.bean.SessionScoped;
    import javax.faces.context.FacesContext;
    
    @ManagedBean
    @SessionScoped
    public class LocaleBean {
    
        private Locale locale;
    
        @PostConstruct
        public void init() {
            locale = FacesContext.getCurrentInstance().getExternalContext().getRequestLocale();
        }
    
        public Locale getLocale() {
            return locale;
        }
    
        public String getLanguage() {
            return locale.getLanguage();
        }
    
        public void setLanguage(String language) {
            locale = new Locale(language);
            FacesContext.getCurrentInstance().getViewRoot().setLocale(locale);
        }
    
    }

    Berikut ialah contoh bagaimana pandangan sepatutnya kelihatan:

    <!DOCTYPE html>
    <html lang="#{localeBean.language}"
        xmlns:f="http://java.sun.com/jsf/core"
        xmlns:h="http://java.sun.com/jsf/html">
    <f:view locale="#{localeBean.locale}">
        <h:head>
            <title>JSF/Facelets i18n 示例</title>
        </h:head>
        <h:body>
            <h:form>
                <h:selectOneMenu value="#{localeBean.language}" onchange="submit()">
                    <f:selectItem itemValue="en" itemLabel="English" />
                    <f:selectItem itemValue="nl" itemLabel="Nederlands" />
                    <f:selectItem itemValue="es" itemLabel="Español" />
                </h:selectOneMenu>
            </h:form>
            <p><h:outputText value="#{text['some.text']}" /></p>
        </h:body>
    </f:view>
    </html>

    Ini mengandaikan bahawa konfigurasi dalam #{text}已在faces-config.xml adalah seperti berikut:

    <application>
        <resource-bundle>
            <base-name>com.example.i18n.text</base-name>
            <var>text</var>
        </resource-bundle>
    </application>

    Sila ambil perhatian bahawa <html lang> tidak diperlukan untuk fungsi JSF, tetapi wajib untuk halaman penjelasan enjin carian. Jika tidak, ia mungkin ditandakan sebagai kandungan pendua, yang tidak baik untuk SEO.

    Lihat juga:

    balas
    0
  • Batalbalas