当值取决于bean条件时加载包字符串(使用正确的语言)
问题描述:
我有jsf和多种语言的问题。所以我的字符串在WEB_INF/classes/texte_<lang>.properties
文件中。并访问,例如那样 <h:outputLabel value="#{messages.err_text}"/>
它工作正常。当值取决于bean条件时加载包字符串(使用正确的语言)
问题是,我有<h:outputLabel...
元素,我想根据错误显示错误消息。我想的东西是这样的:
<h:outputLabel value="#{someBean.errMsg}/>
一个bean像
@ManagedBean()
@SessionScoped
public class SomeBean{
public String getErrMsg(){
if(something){
return "#{messages.err_text}"
}else if(somethingElse){
return "#{messages.err_text2}"
}else{
return "#{messages.err_text3}"
}
}
}
只是要清楚它不工作的方式。我正在寻找一种类似的解决方案(或任何解决方案)。
感谢您的阅读。
答
不要那样做。模型不应该意识到这个观点。本地化也不完全属于模型。相反,模型应该准备一些视图必须注意的状态。
一种方法是:
public String getErrMsg(){
if (something) {
return "err_text";
} else if (somethingElse) {
return "err_text2";
} else {
return "err_text3";
}
}
<h:outputLabel value="#{messages[someBean.errMsg]}" />
其他方式将返回一个enum
如下面的相关问题证明:Localizing enum values in resource bundle和How to use enum values in f:selectItem(s)。
答
你现在有什么不工作的原因是因为outputText
的value
属性评估为普通字符串,而不是EL表达式。
由你与现在的工作去,则最好的方式是直接注入资源包到你的bean:你
@ManagedProperty("#{messages}")
ResourceBundle messages;
然后,
public String getErrMsg(){
if(something){
messages.getString("err_text");
}
}
万一”不知道,传统上,使用h:message
组件显示错误消息。
在与原始问题无关的说明中,您还应该知道将处理逻辑隐藏在您的getter中通常是不可取的。首先,在渲染页面的过程中,多次调用getter。此外,为了正常工作,您应该能够保证值something
将在单个JSF请求的整个生命周期内保持一致。
谢谢,完美的工作。 – AntJOo
不客气。 – BalusC