05 2月 2011

Struts2 上 i18n的小技巧

最近被問到的小問題
網頁程式上我們經常需要產生一些表單上的選項,而選項內容也需要參考到i18n的properties裡的設定,
例如要顯示“是:否“兩個選項,最糟的寫法可以是
<select>
<option value="true"><s:text name="msg.true" /></option>
<option value="false"><s:text name="msg.false" /></option>
</select>
要簡單一點,就用ognl產生一個map或list
map 的做法
<s:select list="#{'true':getText('msg.true'),'false':getText('msg.false')}"></s:select>
list 的做法
<s:select list="{'true','false'}" listValue="%{getText('msg.'+toString())}"></s:select> 
不過利用getText()這個method來取得i18n的文字,就必需extends ActionSupport。

這樣也許還不是最理想的,我比較喜歡利用enum來做,像是“男:女“這種選項
<s:radio list="@idv.elliot.domain.Gender@values()" listValue="%{getText('enum.Gender.'+toString())}"></s:radio>
利用@可以指出enum的Class及values(),再利用getText()取得i18n的設定

%{getText('enum.Gender.'+toString())}是很方便的用法,相信大家一定會想到從Context中傳出其他的map或list,可以用這方式產生選項的應用方式。

沒有留言: