开发者

how do I iterate through multiple properties in jsp

开发者 https://www.devze.com 2022-12-24 12:06 出处:网络
I\'m开发者_Go百科 trying to iterate through a set of keys in a properties file, so that only the \"message.pX\" is output.

I'm开发者_Go百科 trying to iterate through a set of keys in a properties file, so that only the "message.pX" is output.

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

I don't know how many properties with the prefix (message.p) will be in the file, so I want to display any that are present. I've already got a bean class using ResourceBundle that handles it and pulls in the correct bundle for the locale, but is there a standard tag like <fmt:message> that can handle this?


There is no standard way to handle this. As you apparently already have the full control over the resourcebundle creation, your best bet is to introduce a new keyword/convention, such as a key ending with .list:

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

..and create a custom ResourceBundle wherein you override handleGetObject() to return the desired values as a List<String>, something like:

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);
}


Properties properties = new Properties();
        try {
            properties.load(new FileInputStream("filename.properties"));
        } catch (IOException e) {
        }

        Enumeration e = properties.propertyNames();

        while (e.hasMoreElements()) {
            String key = (String) e.nextElement();
            //Edited answer
            if(key.indexOf("message.p") != -1 ){
               System.out.println(key + " , " + properties.getProperty(key));
               //Add key and value to a list
            }
            //Edited answer

        }

I suggest you to do this inside a Servlet or a Java class and store the properties list in a java.lang.List object such as an ArrayList or LinkedList then send the result to the jsp. Avoid doing this inside the jsp.

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号