【问题标题】:Convert from Name of Bean and Name of Property to the property in JSP从 Bean 的名称和属性的名称转换为 JSP 中的属性
【发布时间】: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


【解决方案1】:

感谢 JB Nizet 的 cmets。这可以这样做:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-09-01
    • 2015-07-24
    • 2018-11-16
    • 1970-01-01
    • 2016-11-08
    • 1970-01-01
    • 2020-01-11
    • 2011-10-15
    相关资源
    最近更新 更多