Меня назвали « FooOneBean », и у него есть ряд свойств, одним из которых является « fooOnePropA », представляющий собой список Foo объекты.
В контроллере Java этот компонент устанавливается в запросе следующим образом:
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, который должен иметь возможность отображать раскрывающийся список на основе строкового имени компонента и свойства, установленного в JSP.Имя компонента или свойства может изменяться в зависимости от того, как вызывается 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}' Свойство 'propName' не найдено для типа java.lang.String
С другой стороны, если выпадающий списокустанавливается как:
<c:set var="dropdown" value="${beanName}.${propName}" />
Сбой из-за ошибки: Тип [java.lang.String] недопустим для элементов опций
Как это можно сделать в JSP?Я могу сделать это, используя Scriptlets, которых я хочу избежать.