jsp如何获取带有通配符的fmt:message键列表?

时间:2014-07-08 11:24:34

标签: jsp internationalization

我是一个完整的jsp newbe,所以如果这是一个愚蠢的问题,请跟我说吧。

我有一系列动态范围的语言环境键:

default.someWordTable.dynamicKey.XXX = "Some string"
default.someWordTable.dynamicKey.YYY = "Some other string"
default.someWordTable.dynamicKey.ZZZ = "A third string"
etc. etc. (with no special logic to the keynames)

通常我会得到这样的本地化词:

<fmt:message key="someWordTable.dynamicKey.XXX" />

但是,如果我不知道代码点的密钥子集,是否有某种方法可以获得命名空间下所有现有密钥的列表或迭代器?我希望在附近找到一些东西:

<ul>
    <fmt:forEach items="someWordTable.dynamicKey.*" var="nextKey">
        <li><fmt:message key="someWordTable.dynamicKey.nextKey" /></li>
    </fmt:forEach>
</ul>

或者类似的东西:

<fmt:getAllSubKeys key="someWordTable.dynamicKey" var="theKeys" />
<ul>
    <c:forEach items="theKeys" var="key">
        <li><fmt:message key="someWordTable.dynamic[key]"></li>
    </c:forEach>
</ul>

我希望我能够解释我在寻找什么。有谁知道怎么做?

1 个答案:

答案 0 :(得分:1)

我不知道你为什么要这样做,但有一点我可以告诉你,ResourceBundle类是一个方法keySet(),它返回一个包含资源键的Set<String>。登记/> 可以将包分配给变量:

<fmt:setBundle basename="com.example.messages" var="bundle"/>

您可以在<c:forEach>中使用它:

<c:forEach items="{$bundle.keySet()}" var="key">
   <li><fmt:message key="{$key}"></li>
</c:forEach>

这里需要注意的一点是,我还没有测试过这段代码。我希望这是对的。我确信您应该能够使用与此类似的表达式语言。至少它应该受Servlet 3.0 +支持。