当值取决于 bean 条件时加载包字符串(使用正确的语言)
Load bundle string (in right language) when value depends on bean condition
我对 jsf 和多种语言有疑问。所以我的字符串在 WEB_INF/classes/texte_<lang>.properties
文件中。并像这样访问
<h:outputLabel value="#{messages.err_text}"/>
效果很好。
问题是,我有 <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}"
}
}
}
需要说明的是,这种方式行不通。我正在寻找有效的类似解决方案(或任何解决方案)。
感谢阅读。
您现在所拥有的不起作用的原因是因为 outputText
的 value
属性被评估为纯字符串,而不是 EL 表达式。
根据您现在的工作,最好的方法是将资源包直接注入到您的 bean 中:
@ManagedProperty("#{messages}")
ResourceBundle messages;
然后,
public String getErrMsg(){
if(something){
messages.getString("err_text");
}
}
如果您不知道,传统上,错误消息是使用 h:message
组件显示的。
在与您的原始问题无关的注释中,您还应该知道将处理逻辑隐藏在您的 getter 中通常是不可取的。一方面,getter 在页面呈现期间被多次调用。此外,为了使其正常工作,您应该能够保证值 something
在单个 JSF 请求的整个生命周期中保持一致
不要那样做。模型不应该知道视图。本地化也不严格属于模型。模型应该准备一些视图必须知道的状态。
一种方法是:
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 and How to use enum values in f:selectItem(s).
我对 jsf 和多种语言有疑问。所以我的字符串在 WEB_INF/classes/texte_<lang>.properties
文件中。并像这样访问
<h:outputLabel value="#{messages.err_text}"/>
效果很好。
问题是,我有 <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}"
}
}
}
需要说明的是,这种方式行不通。我正在寻找有效的类似解决方案(或任何解决方案)。
感谢阅读。
您现在所拥有的不起作用的原因是因为 outputText
的 value
属性被评估为纯字符串,而不是 EL 表达式。
根据您现在的工作,最好的方法是将资源包直接注入到您的 bean 中:
@ManagedProperty("#{messages}")
ResourceBundle messages;
然后,
public String getErrMsg(){
if(something){
messages.getString("err_text");
}
}
如果您不知道,传统上,错误消息是使用 h:message
组件显示的。
在与您的原始问题无关的注释中,您还应该知道将处理逻辑隐藏在您的 getter 中通常是不可取的。一方面,getter 在页面呈现期间被多次调用。此外,为了使其正常工作,您应该能够保证值 something
在单个 JSF 请求的整个生命周期中保持一致
不要那样做。模型不应该知道视图。本地化也不严格属于模型。模型应该准备一些视图必须知道的状态。
一种方法是:
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 and How to use enum values in f:selectItem(s).