如何将Spring属性迭代为JSP列表

use*_*640 3 spring jsp jstl spring-mvc

<bean id="propertyData"
        class="org.springframework.beans.factory.config.PropertiesFactoryBean"
        lazy-init="false">
        <property name="mydata">        
                <value>classpath:external-data.properties</value>
        </property>
</bean>

<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="prefix" value="/WEB-INF/views/"/>
    <property name="suffix" value=".jsp"/>
    <property name="exposedContextBeanNames">
        <list><value>propertyData</value></list>
    </property>
</bean>
Run Code Online (Sandbox Code Playgroud)

使用上面的代码片段,我可以加载属性文件并在jsp中访问该文件。并在jsp中使用以下语法成功通过键访问值

<option value='${propertyData.usa}'>${propertyData.usa}</option>
Run Code Online (Sandbox Code Playgroud)

现在,我需要使用jstl或其他方式遍历jsp中的所有属性键,以使用这些键的值填充html下拉列表。

以下不适用于我。

<core:forEach var="listVar" items="${propertyData}">
     <option value ="10"><core:out value="${listVar.attribute}"/></option>
</core:forEach>
Run Code Online (Sandbox Code Playgroud)

错误是:

javax.el.PropertyNotFoundException: Property 'attribute' not found on type java.util.Hashtable$Entry
    at javax.el.BeanELResolver$BeanProperties.get(BeanELResolver.java:237)
Run Code Online (Sandbox Code Playgroud)

请更正我要去的地方。

Bra*_*raj 5

只需使用key和访问它value。就像在JSP中迭代HashMap一样

如果您查看java.util.Hashtable$Entry由于属性扩展了Hashtable(反过来实现Map<Object, Object>)而从中访问它的异常

Map.Entry包含getKey()getValue()从Map Entry访问键和值的方法。

样例代码:

<core:forEach var="listVar" items="${propertyData}">
    <core:out value="${listVar.key}"/>:<core:out value="${listVar.value}"/>
</core:forEach>
Run Code Online (Sandbox Code Playgroud)