Pergunta

Eu sou USAGN UM JAVABEAN em uma página JSP. Eu gostaria de dar um nome dinâmico, porque dependendo do valor de uma variável (vamos chamá -lo foo), Quero que ele tenha conteúdos diferentes e quero manter todas essas versões diferentes na memória. Quero que o feijão tenha escopo de sessão, porque reavaliar o conteúdo é caro.

No momento, o feijão tem um nome estático e se eu recarregue a página com um valor diferente de foo, o conteúdo do feijão é o mesmo de antes (jsp:usebean Procura um Javabean com o nome especificado e, se existir, ele usa o antigo). Eu gostaria de manter a versão antiga e o novo, para que eles tenham que ter nomes diferentes.

O que eu quero fazer é o seguinte:

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

Meu problema é que não posso fazer referência ao Javabean no código JSP, pois não sei o nome. Todas as ideias sobre como resolver isso?

Em essência, quero criar uma variável com um nome dinâmico, com base na vaslue de outra variável.

Como alternativa, quero recuperar os nomes dos Javabeanos associados à página atual, para obter uma referência ao Javabean que acaba de ser criado.

Foi útil?

Solução

Maneira mais fácil seria implementar um costume Map que você armazena no escopo da sessão. Com um Map Você pode usar a notação de cinta para consultar dinamicamente uma chave.

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

Você só precisa substituir o Map#get() método para deixá -lo instanciar o feijão se estiver ausente em vez de retornar 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;
    }
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top