我有一个简单的bean在会话范围中提供“翻译方法”
String getText(String key, Object args ...) {
...// lookup in property resource
return value;
}
我正在尝试调用此bean来获取我的UI组件本地化文本字符串。当试图调用上述功能时,例如,由
<p:outputLabel for="name" value="#{lang.getText(xyz,arg1)}" />
<p:inputText id="name" value="#{formProject.entity.name}"/>
<p:message for="name" id="msgName" />
我收到 java.lang.IllegalArgumentException:参数数量错误
现在,我的问题
1) Is this generally a good alternative to <f:loadBundle> to localize my components?
2) Since I am able to address my nested bean fields via bean1.bean2.myfield
how to avoid conflicts when adressing the properties dot-sepatated,
i.e. x.y.z instead of xyz?
我认为我现在不在正确的轨道上......
答案 0 :(得分:3)
一般你应该使用
<?xml version='1.0' encoding='UTF-8'?>
<faces-config version="2.2" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-facesconfig_2_2.xsd">
<application>
<locale-config>
<default-locale>it</default-locale>
<supported-locale>it</supported-locale>
<supported-locale>en</supported-locale>
<supported-locale>de</supported-locale>
</locale-config>
<resource-bundle>
<base-name>/bundle</base-name>
<var>bundle</var>
</resource-bundle>
</application>
</faces-config>
并通过
获取标签<p:outputLabel for="name" value="#{bundle.foo}" />
<p:inputText id="name" value="#{formProject.entity.name}"/>
<p:message for="name" id="msgName" />
但你可以这样访问点名
<p:outputLabel for="name" value="#{bundle['foo.bar']}" />
你不能传递参数(我不知道没有插补器怎么做,或者根本不可能)
混合解决方案可以
@ManagedBean
public class LabelBean
{
private String getText(String key, String... args)
{
String message = Faces.evaluateExpressionGet("#{bundle['" + key + "']}");
return MessageFormat.format(message, args);
}
public String getText1(String key, String arg)
{
return getText(key, arg);
}
public String getText2(String key, String arg1, String arg2)
{
return getText(key, arg1, arg2);
}
}
以类似的方式@hwellmann提出(+1)
答案 1 :(得分:2)
表达式语言不支持使用varargs的方法表达式。作为解决方法,您可以引入方法
String getText2(String key, Object arg1, Object arg2);
String getText3(String key, Object arg1, Object arg2, Object arg3);
等
关于2),只需使用#{lang.getText('x.y.z',arg1)}
。