从Bean名称和属性名称转换为JSP中的属性

时间:2018-10-01 17:07:05

标签: spring-mvc jsp

我被称为“ 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中完成?我可以使用要避免的脚本来做到这一点。

1 个答案:

答案 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>