Recuperare i nomi associati ai JavaBean JSP o variabile di compilazione con nome dinamica

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

Domanda

Sono usign un JavaBean in una pagina JSP. Vorrei dargli un nome dinamico, perché a seconda del valore di una variabile (chiamiamolo foo), voglio che hanno contenuti diversi, e voglio mantenere tutte queste differenti versioni in memoria. Voglio i fagioli di avere scope di sessione, perché rivalutare il contenuto è costoso.

In questo momento il fagiolo ha un nome statico, e se ricarico la pagina con un valore diverso di foo, il contenuto del fagiolo sono gli stessi di prima (sguardi jsp:usebean per un JavaBean con il nome specificato, e se esiste , utilizza il vecchio). Vorrei mantenere sia la vecchia versione e il nuovo, in modo da avere nomi diversi.

Quello che voglio fare è questo:

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

Il mio problema è che non riesco a fare riferimento al JavaBean nel codice JSP, come io non conosco il suo nome. Tutte le idee su come risolvere questo problema?

In sostanza voglio costruire una variabile con un nome dinamico, basato sul vaslue di un'altra variabile.

In alternativa, voglio recuperare i nomi dei JavaBeans associati alla pagina corrente, in modo che posso ottenere un riferimento al JavaBean appena creato.

È stato utile?

Soluzione

Il modo più semplice sarebbe quella di implementare un Map personalizzato, che si memorizza nel campo di applicazione della sessione. Con una Map è possibile utilizzare la notazione tutore per fare riferimento in modo dinamico una chiave.

<jsp:useBean id="beanMap" class="com.example.BeanMap" scope="session" />
...
${beanMap[someDynamicKey].someProperty}

Hai solo bisogno di eseguire l'override del metodo Map#get() di lasciarlo istanziare il fagiolo se assente invece di ritornare 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;
    }
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top