這是不可能通過<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
那麼,這將完全做我們需要的工作。非常感謝! –