2012-11-15 13 views
1

嘗試在本地化中使用primeface日曆。我想過將JavaScript屬性數組添加到相應的區域設置消息屬性文件中。JSF - outputFormat嘗試將參數解析爲數字

http://code.google.com/p/primefaces/wiki/PrimeFacesLocales

primefacesLocale=PrimeFaces.locales['de'] = \u007B closeText: 'Schlie\u00DFen', prevText: 'Zur\u00FCck', nextText: 'Weiter', {0} weekHeader: 'Woche', firstDay: 1, isRTL: false, showMonthAfterYear: false, yearSuffix: '', timeOnlyTitle: 'Nur Zeit', timeText: 'Zeit', hourText: 'Stunde', minuteText: 'Minute', secondText: 'Sekunde', currentText: 'Aktuelles Datum', ampm: false, month: 'Monat', week: 'Woche', day: 'Tag', allDayText: 'Ganzer Tag'\u007D; 

使用它像:

<script type="text/javascript"> 
    <h:outputFormat value="#{msg.primefacesLocale}" escape="false"> 
     <f:param value="test"/> 
    </h:outputFormat> 
</script> 

月 - 和工作日名稱應通過EL函數來檢索,test值只是用於測試

結果:

java.lang.IllegalArgumentException: can't parse argument number: closeText: 'Schließen' 
    at java.text.MessageFormat.makeFormat(MessageFormat.java:1420) 
    at java.text.MessageFormat.applyPattern(MessageFormat.java:479) 
    at java.text.MessageFormat.<init>(MessageFormat.java:381) 
    at com.sun.faces.renderkit.html_basic.OutputMessageRenderer.encodeEnd(OutputMessageRenderer.java:113) 

這裏有什麼不對嗎?

編輯:

使用:<h:outputText value="#{msg.primefacesLocale}" escape="false">工作正常。

回答

3

MessageFormat API有一些特殊字符。 {,}'{}代表格式參數索引的開始和結束。 '是一個轉義字符(如\在字符串中)。

\u007B你在那裏開始代表{。它實際上應該已經被'包圍了。代表}的結尾\u007D也一樣。

primefacesLocale=PrimeFaces.locales['de'] = '\u007B' closeText: 'Schlie\u00DFen', prevText: 'Zur\u00FCck', nextText: 'Weiter', {0} weekHeader: 'Woche', firstDay: 1, isRTL: false, showMonthAfterYear: false, yearSuffix: '', timeOnlyTitle: 'Nur Zeit', timeText: 'Zeit', hourText: 'Stunde', minuteText: 'Minute', secondText: 'Sekunde', currentText: 'Aktuelles Datum', ampm: false, month: 'Monat', week: 'Woche', day: 'Tag', allDayText: 'Ganzer Tag''\u007D'; 

可以順便也只是把這些{}純香草的字符串中。

primefacesLocale=PrimeFaces.locales['de'] = '{' closeText: 'Schlie\u00DFen', prevText: 'Zur\u00FCck', nextText: 'Weiter', {0} weekHeader: 'Woche', firstDay: 1, isRTL: false, showMonthAfterYear: false, yearSuffix: '', timeOnlyTitle: 'Nur Zeit', timeText: 'Zeit', hourText: 'Stunde', minuteText: 'Minute', secondText: 'Sekunde', currentText: 'Aktuelles Datum', ampm: false, month: 'Monat', week: 'Woche', day: 'Tag', allDayText: 'Ganzer Tag''}'; 

注:正如所說,'是一個轉義字符,如果你想表示它原來的樣子,使用其中的兩種。

primefacesLocale=PrimeFaces.locales['de'] = '{' closeText: ''Schlie\u00DFen'', prevText: ''Zur\u00FCck'', nextText: ''Weiter'', {0} weekHeader: ''Woche'', firstDay: 1, isRTL: false, showMonthAfterYear: false, yearSuffix: '''', timeOnlyTitle: ''Nur Zeit'', timeText: ''Zeit'', hourText: ''Stunde'', minuteText: ''Minute'', secondText: ''Sekunde'', currentText: ''Aktuelles Datum'', ampm: false, month: ''Monat'', week: ''Woche'', day: ''Tag'', allDayText: ''Ganzer Tag'''}'; 

這反過來又是無效的JSON。字符串鍵和值應該用雙引號(儘管大多數webbrowser都在這裏forviging)。

+0

我在java中構建的參數值需要以同樣的方式轉義嗎?不知道如果我想要使用它。只是建立了提供給primefaces團隊的功能。 – djmj

相關問題