Pergunta

Vou elaborar um pouco.Jsf é extremamente doloroso para trabalhar da perspectiva do designer, algo como tentar fazer um desenho com as mãos amarradas nas costas, mas é bom para mastigar formulários e listar muitos dados.Portanto, os sites que estamos criando na minha empresa são páginas de administração jsf e páginas de usuário jsp.O problema ocorre quando as páginas do usuário têm alguns formulários complicados e outras coisas e o jsf começa a funcionar.

Aqui está a pergunta:Estou na página jsp pura.Preciso acessar alguma página jsf que usa bean de sessão.Como posso inicializar esse bean?Se eu estivesse na página jsf, poderia ter algum commandLink que prepararia os dados.A única coisa que consigo criar é uma página jsf fictícia que fará o trabalho e me redirecionará para a página jsf necessária, mas isso é meio feio e não quero acabar com 50 páginas fictícias.Prefiro encontrar algum mecanismo para reinicializar o bean que já está em sessão com alguns parâmetros desejados.

Editar:mais alguns detalhes.Nesta situação específica, tenho testes completos ou filtrados.É o mesmo teste com a mesma lógica e tudo mais, exceto que se o teste for filtrado, deve eliminar algumas questões dependendo das respostas.Ao clicar em um link, deverá iniciar um teste solicitado em um dos dois modos.Os links fazem parte da árvore do menu principal e são visíveis em muitas páginas jsp irmãs.Minha tarefa é ter 4 links:testA completo, testA filtrado, testB completo, testB filtrado, todos levam na mesma página jsf e TestFormBean devem ser reinicializados de acordo.

Editar:Pesquisei um pouco sobre facetas e, embora isso não vá me ajudar agora, com certeza vou manter isso em mente no próximo projeto.

Foi útil?

Solução

Para resolver este, eu provavelmente criaria um fragmento JSF que incluísse apenas o seu formulário e, em seguida, usaria um <c:import> tag para incluí-lo em minha página JSF.

Essa solução é provavelmente um pouco frágil dependendo do seu ambiente.

EDITAR:Veja a resposta de Chris Hall, FacesContext não está disponível fora do FacesServlet.

Outras dicas

você já pensou em usar facelets?Ele permite que você se livre de todas as diferenças JSF/JSP (é um controlador de visualização alternativo e superior).

Ele também suporta excelente semântica em tempo de design com a tag jsfc...

<input type="text" jsfc="#{SomeBean.property}" class="foo" />

é traduzido internamente para o material JSF correto, para que você possa trabalhar com suas ferramentas existentes.

Você pode recuperar um bean gerenciado dentro de uma biblioteca de tags usando algo assim:

FacesContext context = FacesContext.getCurrentInstance();
Object myBean = context.getELContext().getELResolver().getValue(context.getELContext(), null, "myBeanName");

No entanto, você precisaria usar a biblioteca de tags de uma de suas páginas JSF.FacesContext.getCurrentInstance() retorna null quando é chamado fora do FacesServlet.

Na verdade, resolvi isso removendo o bean da sessão, então ele precisa ser gerado novamente quando a página jsf for chamada.Então pego parâmetros de uma solicitação no construtor.

Crie um manipulador de tags JSP personalizado.Você pode então recuperar o bean do escopo da sessão e inicializá-lo imediatamente.Veja isso tutorial para mais detalhes.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top