Получить имена JavaBean, связанные с JSP, или переменную сборки с динамическим именем - PullRequest
0 голосов
/ 12 мая 2010

Я использую JavaBean на странице jsp. Я хотел бы дать ему динамическое имя, потому что в зависимости от значения переменной (назовем ее foo), я хочу, чтобы она имела различное содержимое, и я хочу сохранить все эти разные версии в памяти. Я хочу, чтобы у bean-компонентов была область действия сеанса, потому что переоценка содержимого обходится дорого.

В данный момент у bean-компонента есть статическое имя, и если я перезагружу страницу с другим значением foo, содержимое бина будет таким же, как и раньше (jsp:usebean ищет JavaBean с указанным именем, и если он существует, он использует старый). Я хотел бы сохранить и старую версию, и новую, чтобы у них были разные имена.

Что я хочу сделать, это:

<jsp:useBean id="stats<%=foo%>" class="foo.bar" scope="session">
</jsp:useBean>

Моя проблема в том, что я не могу ссылаться на JavaBean в коде JSP, так как я не знаю его имени. Есть идеи, как это решить?

По сути, я хочу создать переменную с динамическим именем на основе vaslue другой переменной.

Кроме того, я хочу получить имена JavaBeans, связанных с текущей страницей, чтобы получить ссылку на только что созданный JavaBean.

1 Ответ

0 голосов
/ 12 мая 2010

Самый простой способ - реализовать пользовательский Map, который вы храните в области сеанса. С Map вы можете использовать скобки для динамической ссылки на ключ.

<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;
    }
}
...