任何想法如何(如果可能的话)用JSF页面中的可选参数调用java方法? 我使用Java 7,JSF 2.1,EL 2.2(Glassfish 3.1.2)。提前谢谢......
我得到了这个例外
javax.el.ELException: /example.xhtml: wrong number of arguments
Caused by: java.lang.IllegalArgumentException: wrong number of arguments
页面示例
<h:outputText value="#{bean.methodWithParameters('key.en.currentDate', '2012-01-01', '00:00')}"/>
<h:outputText value="#{bean.methodWithParameters('key.en.currentTime', '12:00')}"/>
Bean示例
public String methodWithParameters(String key, Object ... params) {
String langValue = LanguageBean.translate(key);
return String.format(langValue, params);
}
属性示例
key.en.currentDate=Today is %s and current time is %s.
key.en.currentTime=Current time is %s.
key.en.currentDate=Today is %1$s and current time is %2$s.
key.en.currentTime=Current time is %2$s.
答案 0 :(得分:5)
EL不支持Varargs。
至于你的具体功能要求,你接近这完全错了。您不应该在JSF中重新发明国际化/本地化,而是使用JSF提供的工具。您应该在Facelets文件中的<resource-bundle>
或<f:loadBundle>
中使用faces-config.xml
。这将按ResourceBundle
API加载文件,并使用MessageFormat
API格式化邮件。然后,您可以使用<h:outputFormat>
<f:param>
格式化字符串。
E.g。 com/example/i18n/text.properties
key.en.currentDate=Today is {0} and current time is {1}.
key.en.currentTime=Current time is {0}.
查看:
<f:loadBundle baseName="com.example.i18n.text" var="text" />
<h:outputFormat value="#{text['key.en.currentDate']}">
<f:param value="2012-01-01" />
<f:param value="00:00" />
</h:outputFormat>
此外,我不确定键中的en
是否代表英语,但如果它确实代表语言,那么你又犯了一个错误。单独的语言需要拥有自己的properties
文件,例如text_en.properties
,text_de.properties
等符合ResourceBundle
API规则。