Преобразовать из имени бина и имени свойства в свойство в JSP - PullRequest
0 голосов
/ 01 октября 2018

Меня назвали « 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, которых я хочу избежать.

1 Ответ

0 голосов
/ 02 октября 2018

Спасибо за комментарии от 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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...