Spring和JSF集成:國際化和本地化

如果您正在開發針對多種語言的JSF應用程序,那么您可能很熟悉<f:loadBundle>標記。 即使您的應用程序不支持使用消息包的國際化仍然是一個好主意。 在<f:loadBundle>標記下,它從Java java.util.ResourceBundle中讀取消息,盡管這可以工作,但Spring開發人員通常更喜歡org.springframework.context.MessageSource接口。

作為<f:loadBundle>的替代方案,我一直在開發一個新的<s:messageSource>組件,該組件可用于公開來自任何Spring MessageSource的消息,并提供其他一些優點。

新組件是<f:loadBundle>的直接替代。

<s:messageSource source="#{messageSource}" var="messages"/>
<p><h:outputText value="#{messages.hello}"/>
</p>

source屬性可以是任何解析為MessageSource實例的EL表達式。 如果未指定源,則將使用Spring ApplicationContextvar屬性是將用于訪問消息的變量的名稱。

與標準JSF不同,要加載的消息的密鑰將根據要呈現的頁面的ID構建。 例如,假設上面的頁面來自文件WEB-INF / pages / messages / simple.xhtml ,則用于加載問候消息的鍵將為pages.messages.simple.hello 。 使用這些復合鍵可以防止消息鍵沖突,并使頁面標記清晰美觀。 如果需要,可以使用prefix屬性覆蓋此行為。

如果您在XHTML中引用了忘記定義的消息,則將看到警告消息(在開發中),或者將引發異常(在生產中)。

與標準JSF一樣,您的消息并包含與<h:outputFormat>一起使用的占位符

pages.message.simple.welcome=Welcome to {1} with {0}
<h:outputFormat value="#{messages.welcome}"><f:param value="Spring"/><f:param value="JSF"/>
</h:outputFormat>

<h:outputFormat>標簽有點冗長,因此為了方便起見,Spring消息可以用作Map 。 這使您可以更簡潔地引用占位符:

<h:outputText value="#{messages.welcome['Spring']['JSF']}"/>

相同的語法允許您將Java對象映射到消息。 默認情況下,對象是通過從類名稱構建消息鍵來映射的。 例如,以下類:

package org.example;
public class ExampleObject {
}

可以在JSF中引用:

<h:outputText value="#{messages[exampleInstance]}"/>

解決以下消息:

org.example.ExampleObject=example

對于枚舉對象,消息鍵包括枚舉名稱和類:

package org.example;
public enum ExampleObject {ONE, //mapped to message key org.example.ExampleObject.ONETWO  //mapped to message key org.example.ExampleObject.TWO
}

對象消息還可以引用應構成消息一部分的屬性:

org.example.PersonName=Name is {first} {last}
...package org.example;
public class PersonName {...public String getFirst() {...}public String getLast() {...}
}

您還可以通過使用實現org.springframework.springfaces.message.ObjectMessageSource接口的消息源來定義自己的對象消息策略。

如果要檢查其中的任何代碼,請查看GitHub Project中的org.springframework.springfaces.messageorg.springframework.springfaces.message.ui軟件包。

參考: Phil Webb博客博客中來自我們JCG合作伙伴 Phillip Webb的Spring和JavaServer Faces集成:國際化和本地化 。


翻譯自: https://www.javacodegeeks.com/2012/06/spring-jsf-integration.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/372681.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/372681.shtml
英文地址,請注明出處:http://en.pswp.cn/news/372681.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

一個實用的卻被忽略的命名空間:Microsoft.VisualBasic:

當你看到這個命名空間的時候&#xff0c;別因為是vb的東西就匆忙關掉網頁&#xff0c;那將會是您的損失&#xff0c;此命名空間中的資源最初目的是為了簡化vb.net開發而創建的&#xff0c;所以microsoft.visualbasic并不屬于system命名空間&#xff0c;而是獨立存在的。雖然是為…

Linux基礎之命令練習Day2-useradd(mod,del),groupadd(mod,del),chmod,chown,

作業一&#xff1a; 1) 新建用戶natasha&#xff0c;uid為1000&#xff0c;gid為555&#xff0c;備注信息為“master” 2) 修改natasha用戶的家目錄為/Natasha 3) 查看用戶信息配置文件的最后一行 4) 為natasha用戶設置密碼“123” 5) 查看用戶密碼配置文件的最后一行 6) 將nat…

動態表單,JSF世界早已等待

新的PrimeFaces擴展版本0.5.0帶來了新的DynaForm組件。 通常&#xff0c;如果知道行/列的數量&#xff0c;元素的位置等&#xff0c;則可以通過h&#xff1a;panelGrid或p&#xff1a;panelGrid來構建非常簡單的表單。 對于靜態表單&#xff0c;這是正確的。 但是&#xff0c;如…

C# 定時器事件(設置時間間隔,間歇性執行某一函數,控制臺程序)

定時器事件代碼 static void Main(string[] args) {Method();#region 定時器事件 Timer aTimer new Timer();aTimer.Elapsed new ElapsedEventHandler(TimedEvent);aTimer.Interval seconds * 1000; //配置文件中配置的秒數aTimer.Enabled true;#endregionstring strLi…

總結get和post區別

參考博文&#xff1a;   淺談HTTP中Get與Post的區別 1. 數據傳遞方向&#xff1a; Get是向服務器發索取數據的一種請求&#xff0c;Post是向服務器提交數據的一種請求 &#xff08;都是請求&#xff0c;并不是一個取一個發&#xff09; Get&#xff1a;①用于獲取信息&#x…

Vmware安裝Centos NAT方式設置靜態IP

【Vmware中在搭建集群環境等&#xff0c;DHCP自動獲取IP方式不方便&#xff0c;為了固定IP減少頻繁更改配置信息&#xff0c;建議使用靜態IP來配置&#xff0c;網絡連接主要有三種方式 1.nat 2.橋接&#xff0c;3主機模式 &#xff0c;在這里主要介NAT方式&#xff0c; 為什么使…

1 TB /節點時快速,可預測且高度可用

世界正每秒從移動設備&#xff0c;Web和各種小工具向應用程序推送大量數據。 如今&#xff0c;更多的應用程序必須處理此數據。 為了保持性能&#xff0c;這些應用程序需要快速訪問數據層。 在過去的幾年中&#xff0c;RAM價格下降了&#xff0c;我們現在可以便宜得多地獲得具有…

java jni 內存_Android開發之JNI內存模型

Java 與JNI 內存管理是怎樣的想要弄清楚Java與JNI的內存管理的關系&#xff0c;首先要弄清楚JVM的內存模型JVM內存模型.png其中本地方法棧就是運行時調用native 方法的數據保存區。本地方法棧的大小可以設置成固定的或者是動態擴展。Java中的內存泄露JAVA 編程中的內存泄漏&…

04 linux用戶群組和權限

作業一&#xff1a; 1)新建用戶natasha&#xff0c;uid為1000&#xff0c;gid為555&#xff0c;備注信息為“master” 2)修改natasha用戶的家目錄為/Natasha 3)查看用戶信息配置文件的最后一行 4)為natasha用戶設置密碼“123” 5)查看用戶密碼配置文件的最后一行 6)將natasha用…

基于 CoreText 實現的高性能 UITableView

引起UITableView卡頓比較常見的原因有cell的層級過多、cell中有觸發離屏渲染的代碼&#xff08;譬如&#xff1a;cornerRadius、maskToBounds 同時使用&#xff09;、像素是否對齊、是否使用UITableView自動計算cell高度的方法等。本文將從cell層級出發&#xff0c;以一個仿朋友…

RESTEasy教程第1部分:基礎

RESTEasy是JBoss / RedHat的JAX-RS實現&#xff0c;內置于JBoss 6之后。 在這里&#xff0c;我將向您展示如何使用RESTEasy和JBossAS7.1.1.FINAL開發一個簡單的RESTful Web服務應用程序。 步驟1&#xff1a;使用Maven配置RESTEasy依賴項。 <project xmlnshttp:maven.apache.…

php函數相關函數,PHP數組相關函數匯總

這篇文章主要介紹了PHP數組相關函數,匯總說明了php中相關的數組,具有一定參考借鑒價值,需要的朋友可以參考下本文總結了PHP數組相關的函數。分享給大家供大家參考。具體如下&#xff1a;這里包括函數名和用法說明&#xff0c;沒有詳細的代碼范例。感興趣的朋友可以查閱本站相關…

Web Magic 總體架構

1.2 總體架構 WebMagic的結構分為Downloader、PageProcessor、Scheduler、Pipeline四大組件&#xff0c;并由Spider將它們彼此組織起來。這四大組件對應爬蟲生命周期中的下載、處理、管理和持久化等功能。WebMagic的設計參考了Scapy&#xff0c;但是實現方式更Java化一些。 而S…

L1-006. 連續因子

一個正整數N的因子中可能存在若干連續的數字。例如630可以分解為3*5*6*7&#xff0c;其中5、6、7就是3個連續的數字。給定任一正整數N&#xff0c;要求編寫程序求出最長連續因子的個數&#xff0c;并輸出最小的連續因子序列。 輸入格式&#xff1a; 輸入在一行中給出一個正整數…

基于Java JAAS表單的身份驗證

使用JAAS實現登錄模塊是一個高級主題&#xff0c;而且大多數開發人員也很少有機會參與這種開發。 但是JAAS登錄模塊的基本實現并不是那么困難&#xff0c;這是因為我打算將其發布。 在這里&#xff0c;我正在解釋如何實現tomcat管理的身份驗證模塊。 此實現與容器無關。 我們可…

java自動投票代碼,Java 投票(自動添一)

Java 投票(自動加一)數據庫建立&#xff1a;SQL> create table vote(2 id number,3 name varchar(200),4 num number5 );//index.jsppageEncoding"utf-8"%>投票Connection conn1 null;Statement stmt1 null;ResultSet rs1 null;try {Class.forName("or…

SpringMVC搭建+實例

想做一點自己喜歡的東西&#xff0c;研究了一下springMVC,所以就自己搭建一個小demo,可供大家吐槽。 先建一個WEB工程&#xff0c;這個相信大家都會&#xff0c;這里不在多說。去網上下載spring jar包&#xff0c;然后在WEB-INF下新建一個lib文件&#xff0c;將下載的jar包放進…

Mockito和Hamcrest的試駕制造商

過去&#xff0c;很多人問我是否測試吸氣劑和吸氣劑&#xff08;屬性&#xff0c;屬性等&#xff09;。 他們還問我是否測試我的建筑商。 在我看來&#xff0c;答案取決于情況。 當使用遺留代碼時&#xff0c;我不會費心去測試數據結構&#xff0c;這意味著對象只帶有getter和s…

php8更新,PHP 8 中新特性以及重大調整

PHP 8&#xff0c;PHP 的一個新的大版本&#xff0c;預計將于2020年12月3日發布&#xff0c;這意味著將不會有 PHP 7.5 版本。PHP8目前正處于非常活躍的開發階段&#xff0c;所以在接下來的幾個月里&#xff0c;情況可能會發生很大的變化。在這篇文章中&#xff0c;我會維持一個…

Javascript學習之函數(function)

http://www.cnblogs.com/royalroads/p/4418587.html 在JS中,Function(函數)類型實際上是對象;每個函數都是Function類型的實例&#xff0c;而且都與其他引用類型一樣具有屬性和方法。由于函數是對象,因此函數名實際上也是一個指向函數對象的指針。 一 函數的聲明方式 //1.函數聲…