一尘不染

如何在jsp中遍历多个属性

jsp

我正在尝试遍历属性文件中的一组键,以便仅输出“ message.pX”。

a.property=foo
message.p1=a
message.p2=b
message.p3=c
some.other.property=bar

我不知道文件中会有多少个带有前缀(message.p)的属性,因此我想显示所有存在的属性。我已经有一个使用ResourceBundle进行处理的bean类,并为语言环境提取正确的包,但是是否有像这样的标准标签可以处理此问题?


阅读 273

收藏
2020-06-08

共1个答案

一尘不染

没有标准的方法来处理此问题。由于您显然已经完全可以控制resourcebundle的创建,因此最好的选择是引入一个新的关键字/惯例,例如以结尾的键.list

<c:forEach items="${bundle['message.p.list']}" var="p">
    <p>${p}</p>
</c:forEach>

..并创建一个自定义,ResourceBundle其中您将其覆盖handleGetObject()以返回所需的值a
List<String>,例如:

protected Object handleGetObject(String key) {
    if (key.endsWith(".list")) {
        String listkey = key.substring(0, key.length() - 5);
        List<String> list = new ArrayList<String>();
        for (int i = 1; containsKey(listkey + i); i++) {
            list.add(String.valueOf(getObject(listkey + i)));
        }
        if (!list.isEmpty()) {
            return list;
        }
    }
    return getObject(key);
}
2020-06-08