我被称为“ FooOneBean ”,它具有许多属性,其中之一是“ fooOnePropA ”,它是 Foo < / strong>对象。
在Java控制器中,该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的String名称和JSP中设置的属性显示下拉列表。可以根据调用JSP的方式来更改Bean或属性的名称。所以,
<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}'在类型java.lang.String上找不到属性'propName'
另一方面,如果下拉菜单设置为:
<c:set var="dropdown" value="${beanName}.${propName}" />
它失败并显示以下错误:类型[java.lang.String]对选项项无效
这如何在JSP中完成?我可以使用要避免的脚本来做到这一点。
答案 0 :(得分:0)
感谢JB Nizet的评论。可以这样做:
<tiles:importAttribute name="elementName" />
<tiles:importAttribute name="resourceBean" />
<tiles:importAttribute name="resourceList" />
<c:set var="dropdown" value="${requestScope[resourceBean][resourceList]}”/>
<form:select path="${elementName}" id="${elementName}">
<form:options items="${dropdown}" itemLabel="displayName" itemValue="code" />
</form:select>