So implementieren Sie die Lokalisierung auf Sitzungsebene in JSF anstelle der Speicherung des ausgewählten Gebietsschemas pro Anforderungs-/Ansichtsebene
P粉360266095
2023-08-22 21:30:42
<p><code>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>In einer Bean-Aktionsmethode ändere ich das Gebietsschema der aktuellen Ansicht wie folgt: </p>
<pre class="brush:php;toolbar:false;">FacesContext.getCurrentInstance().getViewRoot().setLocale(new Locale("ua"));</pre>
<p>Das Problem besteht darin, dass das Gebietsschema <code>ua</code> nur für Anfragen/Ansichten gilt, nicht für Sitzungen. Eine weitere Anfrage/Ansicht in derselben Sitzung setzt das Gebietsschema auf den Standardwert <code>ru</code> zurück. </p>
<p>Wie wende ich ein Gebietsschema auf eine Sitzung an? </p>
我看到问题还与.properties文件名有关。 Java的Locale代码(小写)如:en_gb 但是由Netbeans自动生成的Locale是小写_大写,例如:messages_en_GB.properties 将其改为:messages_en_gb.properties 然后它应该能够正常工作 - 如果你已经尝试了一切
您需要将选择的区域设置存储在会话范围内,并在两个位置设置它:一次是通过
UIViewRoot#setLocale()
立即在更改区域设置后(这将更改当前视图根的区域设置,从而在后续请求中得到反映;如果之后执行重定向,则此部分是不必要的),以及一次在<f:view>
的locale
属性中(这将在后续请求/视图中设置/保留区域设置)。这是一个
LocaleBean
应该如何看起来的示例:这是视图应该如何看起来的示例:
这假设
#{text}
已在faces-config.xml
中配置如下:请注意,
<html lang>
对于JSF的功能并不是必需的,但对于搜索引擎的解释页面是强制性的。否则,它可能会被标记为重复内容,这对于SEO来说是不好的。另请参阅: