PrimeFaces 12 Galleria标题国际化:JSF资源束EL解析失败求助
解决PrimeFaces 12 Galleria多语言标题(资源束)问题
问题出在你直接把EL表达式#{bundle.Caption1}作为字符串传入Photo构造函数——Java代码中的字符串不会被JSF的EL解析器处理,所以系统只会把它当作普通文本。以下是几种可行的解决方案:
方案1:在Managed Bean中通过FacesContext获取资源束
在你的Bean代码里,先获取指定的资源束实例,再从中提取对应键的多语言文本:
import javax.faces.context.FacesContext; import java.util.ResourceBundle; // 在初始化图片列表的方法(比如@PostConstruct)中 @PostConstruct public void initPhotos() { // 获取名为"bundle"的资源束 ResourceBundle bundle = FacesContext.getCurrentInstance() .getApplication() .getResourceBundle(FacesContext.getCurrentInstance(), "bundle"); // 用bundle.getString()获取多语言标题 listOfPhotos.add(new Photo( "/resources/images/photos/photo1.jpg", "/resources/images/photos/photo1s.jpg", "Description for Photo 1", bundle.getString("Caption1") )); }
方案2:通过CDI注入ResourceBundle(适用于Java EE/ Jakarta EE环境)
如果你的项目支持CDI,可以直接注入资源束,代码更简洁:
import javax.inject.Inject; import javax.faces.annotation.ResourceBundle; @Inject @ResourceBundle(baseName = "com.yourproject.bundle", var = "bundle") private ResourceBundle bundle; @PostConstruct public void initPhotos() { listOfPhotos.add(new Photo( "/resources/images/photos/photo1.jpg", "/resources/images/photos/photo1s.jpg", "Description for Photo 1", bundle.getString("Caption1") )); }
注意替换com.yourproject.bundle为你实际的资源束基路径(即.properties文件的包路径)。
方案3:确保资源束配置正确
无论用哪种方案,都要确认faces-config.xml中已正确配置资源束:
<application> <resource-bundle> <base-name>com.yourproject.bundle</base-name> <var>bundle</var> </resource-bundle> </application>
这里的base-name要和你的.properties文件路径一致(比如com/yourproject/bundle_en.properties、com/yourproject/bundle_zh.properties等),var就是你在EL中使用的bundle变量名。
内容的提问来源于stack exchange,提问作者OsmanBalci
相关产品推荐
相关产品推荐

