Pessoal,
Tem uma dataTable para exibição de alguns dados, porém não exibo tudo, para não ficar muito poluído, por conta disso, criei um botão “Detalhes”, que mostra todos os dados do produto selecionado (a linha selecionada no dataTable). O problema é que quando a página é aberta pela primeira vez, ou quando o usuário clica duas vezes em cima da linha, nada é exibido, pois não tem como saber o id da linha/produto selecionado. Gostaria de saber como faço para verificar se a linha está mesmo selecionada antes de exibir os detalhes, isso vai ser muito útil também quando o usuário clicar em Excluir. Resumindo: como faço para verificar se a linha está selecionada, antes de exibir os detalhes dessa linha?
Meu xhtml:
<p:dataTable id="produtos" var="produto" value="#{produtoController.listaProdutos}"
rendered="#{!empty produtoController.listaProdutos}"
paginator="true" rows="20"
paginatorTemplate="{FirstPageLink} {PreviousPageLink}
{PageLinks} {NextPageLink} {LastPageLink}"
rowIndexVar="#{produto.id}"
selection="#{produtoController.produtoSelecionado}"
selectionMode="single">
<p:column style="text-align: left;">
<f:facet name="header">
<b>Código</b>
</f:facet>
<h:outputText value="#{produto.id}"/>
</p:column>
<p:column style="text-align: left;">
<f:facet name="header">
<b>Descrição</b>
</f:facet>
<h:outputText value="#{produto.descricao}"/>
</p:column>
</p:dataTable>
<h:outputText value="Nenhum produto cadastrado!" rendered="#{empty produtoController.listaProdutos}"/>
<h:panelGrid columns="5" style="margin: auto;">
<p:commandButton image="ui-icon ui-icon-disk" value="Novo"
action="#{produtoController.incluirNovoProduto}" ajax="false"/>
<p:commandButton value="Detalhes" image="ui-icon-search"
update="detalhesProduto" oncomplete="produtoDialog.show()"/>
<p:commandButton image="ui-icon ui-icon-pencil" value="Alterar"/>
<p:commandButton image="ui-icon ui-icon-close" value="Excluir"/>
<p:commandButton image="ui-icon ui-icon-arrowthickstop-1-w" value="Voltar"
onclick="javascript:history.back(1)"/>
</h:panelGrid>
<p:dialog header="Detalhes do Produto" widgetVar="produtoDialog" width="450"
resizable="true" closable="true" showEffect="slide" hideEffect="slide">
<h:panelGrid id="detalhesProduto" columns="2" cellpadding="4">
<h:outputText style="font-weight: bold;" value="Código:" />
<h:outputText value="#{produtoController.produtoSelecionado.id}" />
<h:outputText style="font-weight: bold;" value="Descrição:" />
<h:outputText value="#{produtoController.produtoSelecionado.descricao}" />
<h:outputText style="font-weight: bold;" value="Categoria:" />
<h:outputText value="#{produtoController.produtoSelecionado.categoria.descricao}" />
<h:outputText style="font-weight: bold;" value="Unidade:" />
<h:outputText value="#{produtoController.produtoSelecionado.unidade.descricao}" />
<h:outputText style="font-weight: bold;" value="Estoque Mínimo:" />
<h:outputText value="#{produtoController.produtoSelecionado.estoqueMin}" />
<h:outputText style="font-weight: bold;" value="Estoque Máximo:" />
<h:outputText value="#{produtoController.produtoSelecionado.estoqueMax}" />
<h:outputText style="font-weight: bold;" value="Valor:" />
<h:outputText value="R$ #{produtoController.produtoSelecionado.valor}" />
<h:outputText style="font-weight: bold;" value="Localização:" />
<h:outputText value="#{produtoController.produtoSelecionado.localizacao}" />
<h:outputText style="font-weight: bold;" value="Perecível:" />
<h:outputText value="Sim" rendered="#{produtoController.produtoSelecionado.perecivel}" />
<h:outputText value="Não" rendered="#{!produtoController.produtoSelecionado.perecivel}" />
<h:outputText style="font-weight: bold;" value="Ativo:" />
<h:outputText value="Sim" rendered="#{produtoController.produtoSelecionado.ativo}" />
<h:outputText value="Não" rendered="#{!produtoController.produtoSelecionado.ativo}" />
<h:outputText style="font-weight: bold;" value="Observações:" />
<h:outputText value="#{produtoController.produtoSelecionado.obs}" />
</h:panelGrid>
</p:dialog>
Meu BEAN:
public class ProdutoController {
private Produto produto;
private ProdutoDao produtoDao;
private Produto produtoSelecionado;
public ProdutoController() {
this.produto = new Produto();
this.produtoDao = new ProdutoDaoImp();
}
public Produto getProduto() {
return produto;
}
public void setProduto(Produto produto) {
this.produto = produto;
}
public Produto getProdutoSelecionado() {
return produtoSelecionado;
}
public void setProdutoSelecionado(Produto produtoSelecionado) {
this.produtoSelecionado = produtoSelecionado;
}
public List<Produto> getListaProdutos() {
return produtoDao.list();
}
public List<Produto> getListaProdutosAtivos() {
return produtoDao.listarAtivos();
}