【发布时间】:2018-10-01 17:07:05
【问题描述】:
我被称为“FooOneBean”,它有许多属性,其中之一是“fooOnePropA”,它是 Foo 对象。
在Java Controller中,这个bean在请求中的设置如下:
request.setAttibute(“FooOneBean”, FooOneBean.instance());
通常,这可以在 JSP 中用于显示下拉列表,如下所示:
<tiles:importAttribute name="elementName" />
<c:set var=”dropdown” value=”${FooOneBean.fooOnePropA}” /> <!—Name of the bean and property hard-coded here -- >
<form:select path="${elementName}" id="${elementName}">
<form:options items="${dropdown}" itemLabel="displayName" itemValue="code" />
</form:select>
然而,我们拥有的是一个非常通用的 JSP,它应该能够根据 bean 的字符串名称和 JSP 中设置的属性显示下拉列表。 bean 或属性的名称可以根据 JSP 的调用方式而改变。所以,
<tiles:importAttribute name="elementName" />
<tiles:importAttribute name="resourceBean" />
<tiles:importAttribute name="resourceList" />
<%--
<c:out value="${resourceBean}" /> <!—Displays “FooOneBean” -->
<c:out value="${resourceList}" /> <!—Displays “fooOnePropA” -->
--%>
<c:set var="beanName" value="${resourceBean}" />
<c:set var="propName" value="${resourceList}" />
<c:set var="dropdown" value="${beanName.propName }" />
<form:select path="${elementName}" id="${elementName}">
<form:options items="${dropdown}" itemLabel="displayName" itemValue="code" />
</form:select>
这将失败并显示消息:'${beanName.propName}' Property 'propName' not found on type java.lang.String
另一方面,如果下拉设置为:
<c:set var="dropdown" value="${beanName}.${propName}" />
失败并显示错误:类型 [java.lang.String] 对选项项无效
如何在 JSP 中实现这一点?我可以使用我想避免的 Scriptlet 来做到这一点。
【问题讨论】:
-
requestScope[resourceBean][resourceList]
标签: spring-mvc jsp