Olá, sou iniciante no uso do JSF e estou com a seguinte dúvida: há situações nas quais você precisa expor o resultado de uma pesquisa para o usuario. Cada uma das linhas contidas no resultado desta pesquisa representa um bean cujos detalhes podemos querer expor posteriormente quando o usuário por exemplo clica sobre o mesmo.
Para tal, são necessárias portanto duas páginas JSP. Uma que expõe o resultado da pesquisa e outra aonde é possível visualizar os detalhes de cada item da mesma.
Estou procedendo da seguinte forma: populo um dataTable com os dados da resposta, tal como (irei omitir os cabeçalhos e expor apenas os dados para simplificar) abaixo:
<h:tableData value="#{bean.resultado}" var="item">
<h:column>
<h:outputText value="#{item.descricao}"/>
</h:column>
<h:column>
<!-- Aqui entra o início da minha gambiarra -->
<h:outputLink value="detalhe.jsp?idItem=#{item.id}">
<h:outputText value="#{item.descricao2}"/>
</h:outputLink>
</h:column>
</h:tableData>
Na página referenciada (detalhe.jsp), no início da mesma coloco um scriptlet que carrega do banco de dados o objeto item que possui o id passado como parâmetro e em seguida o armazeno na sessão ou na requisição, dependendo do caso.
Como podem ver, trata-se de uma solução digna do prêmio Gambiarra 2007. Minha dúvida portanto é a seguinte: sei que no Faces há um objeto chamado ListDataModel que serve justamente para lidarmos com este tipo de situação, mas encontrei pouquíssima documentação a seu respeito (basicamente, apenas o Javadoc). Como devo usá-lo? É realmente este o tipo de abordagem que devo tomar? Qual a maneira menos gambiarresca de proceder em situações tais como esta que acabo de descrever? Como devo proceder para me livrar de uma vez por todas destes malditos scriptlets?