You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 08:15:35