Получить имена Javabean, связанные с JSP или переменную сборки с динамическим именем

StackOverflow https://stackoverflow.com/questions/2818306

Вопрос

Я 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;
    }
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top