Получить имена Javabean, связанные с JSP или переменную сборки с динамическим именем
-
26-09-2019 - |
Вопрос
Я Usign Javabean на странице JSP. Я хотел бы дать ему динамическое имя, потому что в зависимости от значения переменной (давайте назовем это foo
), Я хочу, чтобы это было разное содержание, и я хочу сохранить все эти разные версии в памяти. Я хочу, чтобы бобы имели сферу сеанса, потому что переоценка содержимого дороги.
Прямо сейчас фасоль имеет статическое имя, и если я перезагружаю страницу с другим значением foo
, Содержимое бобов такое же, как и раньше (jsp:usebean
Ищет JavaBean с указанным именем, и если он существует, он использует старый). Я хотел бы сохранить как старую версию, так и новые, поэтому они должны иметь разные имена.
То, что я хочу сделать, это так:
<jsp:useBean id="stats<%=foo%>" class="foo.bar" scope="session">
</jsp:useBean>
Моя проблема в том, что я не могу ссылаться на Javabean в коде JSP, так как я не знаю его имя. Любые идеи о том, как это решить?
По сути, я хочу построить переменную с динамическим именем на основе VASLUE другой переменной.
Кроме того, я хочу получить имена Javabeans, связанных с текущей страницей, чтобы я получаю ссылку на JavaBean только что создал.
Решение
Самый простой способ осуществить обычай Map
который вы храните в области сеанса. С А. Map
Вы можете использовать нотацию Brace для динамично см. Ключ.
<jsp:useBean id="beanMap" class="com.example.BeanMap" scope="session" />
...
${beanMap[someDynamicKey].someProperty}
Вам нужно только переопределить Map#get()
метод, чтобы позволить ему создать фасоль, если отсутствует вместо возврата null
.
public class BeanMap extends HashMap<String, Bean> {
@Override public Bean get(Object key) {
Bean bean = super.get(key);
if (bean == null) {
bean = new Bean();
super.put(String.valueOf(key), bean);
}
return bean;
}
}