这是不可能通过<f:loadBundle>
手段。在整个视图中的确只能有一个区域设置,并且不允许嵌套<f:view>
标签(技术上它可以工作,但嵌套标签将被忽略)。
最好的办法是创建延伸ResourceBundle
托管bean,包装在所需的语言环境和委托给它的调用包。事情是这样的:
@ManagedBean
@RequestScoped
public class BundleBean extends ResourceBundle {
private ResourceBundle wrapped;
public BundleBean() {
// You can get/supply the locale as a parameter or property.
// Again, just a basic kickoff example.
wrapped = ResourceBundle.getBundle("com.example.i18n.text", new Locale("fr"));
}
@Override
protected Object handleGetObject(String key) {
return wrapped.getObject(key);
}
@Override
public Enumeration<String> getKeys() {
return wrapped.getKeys();
}
}
你可以用它通常的方式:
#{bundleBean.someKey}
#{bundleBean['some.key.with.periods']}
我想过一个'Bean'其中包含了'ResourceBundle',但是使它_extends_'ResourceBundle'是真聪明,因为它清楚地简化JSF页面中使用它。 顺便说一句,是什么让我们在这里做这样'#{} myBean.someKey电话'就算豆没有一个明确的'getSomeKey()'方法? 'ResourceBundle'有什么特别之处? –
这是正确的。 ''ResourceBundleEL''有特殊待遇['ResourceBundleELResolver'](http://docs.oracle.com/javaee/6/api/javax/el/ResourceBundleELResolver.html)。 – BalusC
那么,这将完全做我们需要的工作。非常感谢! –