Prezados,
Estou com um problema em um aplicação web que utiliza primefaces na sua interface, segue o problema:
Possuo uma tela dentro de um layout, nessa tela tem o componente WIZARD e em uma das etapas tenho uma tabela utilizando o DATATABLE onde posso selecionar um linha que pode ser excluída na sequencia. O problema está nesse processo de selecionar visualmente na tela a linha fica selecionada, mas quando entra no método do listener o atributo que deveria ter recebido a linha selecionada está null, alguém pode me ajuda com isso?
segue os códigos:
XXXxx.xhtml
[code]<?xml version='1.0' encoding='UTF-8' ?>
<ui:composition xmlns=“http://www.w3.org/1999/xhtml”
xmlns:ui=“http://java.sun.com/jsf/facelets”
xmlns:f=“http://java.sun.com/jsf/core”
xmlns:h=“http://java.sun.com/jsf/html”
xmlns:c=“http://java.sun.com/jsp/jstl/core”
xmlns:p=“http://primefaces.org/ui” template=“menu.xhtml”>
<ui:define name=“centro”>
<h:form id=“centro” style=“font-size:12px”>
<p:wizard widgetVar="wizGrafico"
flowListener="#{graficoAction.onFlowProcess}" nextLabel="Avançar"
backLabel="Voltar">
<p:tab id="cadastro" title="Cadastro">
<p:panel header="Cadastro">
<h:panelGrid columns="4">
<h:outputText value="Titulo: " />
<p:inputText id="tituloGrafico"
value="#{graficoAction.graficoAdd.titulo}" required="true" />
<p:tooltip for="tituloGrafico" showEvent="focus" hideEvent="blur" />
<p:message for="tituloGrafico" id="mensTituloGrafico"
showDetail="true" />
<h:outputText value="Gráfico: " />
<p:inputText id="nomeGrafico"
value="#{graficoAction.graficoAdd.grafico}" required="true" />
<p:tooltip for="nomeGrafico" showEvent="focus" hideEvent="blur" />
<p:message for="nomeGrafico" id="mensNomeGrafico"
showDetail="true" />
<h:outputText value="Largura: " />
<p:inputText id="larguraGrafico"
value="#{graficoAction.graficoAdd.largura}" required="true"
title="Recomendado um número maior que 800" />
<p:tooltip for="larguraGrafico" showEvent="focus"
hideEvent="blur" />
<p:message for="larguraGrafico" id="mensLarguraGrafico"
showDetail="true" />
<h:outputText value="Altura: " />
<p:inputText id="alturaGrafico"
value="#{graficoAction.graficoAdd.altura}" required="true"
title="Recomendado um número maior que 500" />
<p:tooltip for="alturaGrafico" showEvent="focus" hideEvent="blur" />
<p:message for="alturaGrafico" id="mensAlturaGrafico"
showDetail="true" />
<h:outputText value="Componente Web: " />
<p:selectOneMenu id="componente"
value="#{graficoAction.graficoAdd.componenteWeb}" effect="fade"
required="true">
<f:selectItem itemLabel="Selecione um tipo grafico" itemValue="" />
<f:selectItems
value="#{graficoAction.graficoAdd.listaTipoGrafico}"
var="tipoUm" itemLabel="#{tipoUm}" itemValue="#{tipoUm}" />
</p:selectOneMenu>
<p:tooltip for="componente" showEvent="focus" hideEvent="blur" />
<p:message for="componente" id="mensComponente" showDetail="true" />
<h:outputText value="Grupo: " />
<p:selectOneMenu id="grupo"
value="#{graficoAction.graficoAdd.grupo.idGrupo}" effect="fade"
required="true">
<f:selectItem itemLabel="Selecione um grupo" itemValue="" />
<f:selectItems value="#{graficoAction.grupoCombo}" var="grupoUm"
itemLabel="#{grupoUm.nome}" itemValue="#{grupoUm.idGrupo}" />
</p:selectOneMenu>
<p:tooltip for="grupo" showEvent="focus" hideEvent="blur" />
<p:message for="grupo" id="mensGrupo" showDetail="true" />
<h:outputText value="Gráfico Pai: " />
<p:selectOneMenu id="graficoPai"
value="#{graficoAction.graficoAdd.idPaiGrafico}" effect="fade">
<f:selectItem itemLabel="Selecione um gráfico" itemValue="" />
<f:selectItems value="#{graficoAction.graficoCombo}"
var="graficoUm" itemLabel="#{graficoUm.grafico}"
itemValue="#{graficoUm.idGrafico}" />
</p:selectOneMenu>
<p:tooltip for="graficoPai" showEvent="focus" hideEvent="blur" />
<p:message for="graficoPai" id="mensGraficoPai" showDetail="true" />
<h:outputText value="Tabela: " />
<p:inputTextarea id="tabela"
value="#{graficoAction.graficoAdd.tabela}" rows="2" cols="40"
autoResize="false" required="true" />
<p:tooltip for="tabela" showEvent="focus" hideEvent="blur" />
<p:message for="tabela" id="mensTabela" showDetail="true" />
<h:outputText value="Condição: " />
<p:inputTextarea id="condicao"
value="#{graficoAction.graficoAdd.condicao}" rows="2"
autoResize="false" cols="40"
title="Inserir $valor para a condição que será enviado pelo gráfico Pai" />
<p:tooltip for="condicao" showEvent="focus" hideEvent="blur" />
<p:message for="condicao" id="mensCondicao" showDetail="true" />
<h:outputText value="Banco: " />
<p:inputText id="banco"
value="#{graficoAction.graficoAdd.conexao}" required="true" />
<p:tooltip for="banco" showEvent="focus" hideEvent="blur" />
<p:message for="banco" id="mensBanco" showDetail="true" />
<h:outputText value="Exibir tabela: " />
<p:selectBooleanCheckbox id="exibitabela"
value="#{graficoAction.graficoAdd.dataTable}" />
<p:tooltip for="exibitabela" showEvent="focus" hideEvent="blur" />
<p:message for="exibitabela" id="mensExibitabela"
showDetail="true" />
</h:panelGrid>
</p:panel>
</p:tab>
<p:tab id="colunasAgrupador" title="Colunas e Agrupador">
<p:messages id="msgColunasAgrupador" for="pnlColunasAgrupador"
showDetail="true" autoUpdate="true" />
<p:panel id="pnlColunasAgrupador">
<p:dataTable id="tblColunaAgrup" var="colunaAgrup"
value="#{graficoAction.colunasNome}" paginator="true" rows="10"
selectionMode="single" selection="#{graficoAction.colunaDel}"
rowKey="#{colunaAgrup.ordem}" resizableColumns="true" >
<f:facet name="header">
Configuração das Colunas
</f:facet>
<p:column headerText="Coluna Tabela" style="width:240px">
<p:inplace id="colunaAgrup" editor="true">
<p:inputText value="#{colunaAgrup.coluna}" required="true" />
</p:inplace>
</p:column>
<p:column headerText="Nome" style="width:240px">
<p:inplace id="nomeAgrup" editor="true">
<p:inputText value="#{colunaAgrup.nome}" required="true" />
</p:inplace>
</p:column>
<p:column headerText="Agrupador" style="width:240px">
<p:selectBooleanCheckbox id="agrupadorColunaAgrup" value="#{colunaAgrup.flagAgrupador}"
required="true" />
</p:column>
<f:facet name="footer">
<p:commandButton id="adicionarColuna" icon="ui-icon-plusthick"
title="Adicionar"
actionListener="#{graficoAction.adicionarColuna}"
process="@this" update="tblColunaAgrup" />
<p:commandButton id="deletarColuna" icon="ui-icon-trash"
title="Deletar" actionListener="#{graficoAction.deletarColuna}"
process="@this" update="tblColunaAgrup"/>
</f:facet>
</p:dataTable>
</p:panel>
</p:tab>
<p:tab id="colunasGrafico" title="Colunas Gráfico">
<p:messages id="msgColunaGrafico" for="tblColunaGrafico"
showDetail="true" autoUpdate="true" />
<p:dataTable id="tblColunaGrafico" var="colunaGrafico"
value="#{graficoAction.colunasNome}" paginator="true" rows="10"
rowKey="#{colunaGrafico.ordem}"
selection="#{graficoAction.colunasSelecionado}"
resizableColumns="true">
<f:facet name="header">
Configuração das Colunas
</f:facet>
<p:column selectionMode="multiple" style="width:18px" />
<p:column headerText="Coluna Tabela" style="width:240px">
<h:outputText value="#{colunaGrafico.coluna}" required="true" />
</p:column>
<p:column headerText="Nome" style="width:240px">
<h:outputText value="#{colunaGrafico.nome}" required="true" />
</p:column>
</p:dataTable>
</p:tab>
<p:tab id="colunasFiltro" title="Coluna Filtro">
<p:messages id="msgColunaFiltro" for="tblColunaFiltro"
showDetail="true" autoUpdate="true" />
<p:dataTable id="tblColunaFiltro" var="colunaFiltro"
value="#{graficoAction.colunasNome}" paginator="true" rows="10"
rowKey="#{colunaFiltro.ordem}"
selection="#{graficoAction.colunasFiltro}" resizableColumns="true">
<f:facet name="header">
Configuração das Colunas
</f:facet>
<p:column selectionMode="multiple" style="width:18px" />
<p:column headerText="Coluna Tabela" style="width:240px">
<h:outputText value="#{colunaFiltro.coluna}" required="true" />
</p:column>
<p:column headerText="Nome" style="width:240px">
<h:outputText value="#{colunaFiltro.nome}" required="true" />
</p:column>
</p:dataTable>
</p:tab>
<p:tab id="colunasDrill" title="Coluna Drill">
<p:messages id="msgColunaDrill" for="tblColunaDrill"
showDetail="true" autoUpdate="true" />
<p:dataTable id="tblColunaDrill" var="colunaDrill"
value="#{graficoAction.colunasSelecionado}" paginator="true"
rows="10" rowKey="#{colunaDrill.ordem}"
selection="#{graficoAction.selecionadoDrill}"
resizableColumns="true">
<f:facet name="header">
Configuração das Colunas
</f:facet>
<p:column selectionMode="multiple" style="width:18px" />
<p:column headerText="Coluna Tabela" style="width:240px">
<h:outputText value="#{colunaDrill.coluna}" required="true" />
</p:column>
<p:column headerText="Nome" style="width:240px">
<h:outputText value="#{colunaDrill.nome}" required="true" />
</p:column>
</p:dataTable>
</p:tab>
<p:tab id="resGrafico" title="Resumo Gráfico">
<p:panel header="Resumo">
<h:panelGrid columns="2">
<h:outputText value="Gráfico: " />
<h:outputText styleClass="outputLabel"
value="#{graficoAction.graficoAdd.grafico}" />
<h:outputText value="Titulo: " />
<h:outputText styleClass="outputLabel"
value="#{graficoAction.graficoAdd.titulo}" />
<h:outputText value="Tipo do gráfico: " />
<h:outputText styleClass="outputLabel"
value="#{graficoAction.graficoAdd.componenteWeb}" />
<h:outputText value="Dimensão (Alt x Larg): " />
<h:outputText styleClass="outputLabel"
value="#{graficoAction.graficoAdd.altura} x #{graficoAction.graficoAdd.largura}" />
<h:outputText value="Grupo: " />
<h:outputText styleClass="outputLabel"
value="#{graficoAction.graficoAdd.grupo.nome}" />
<h:outputText value="Gráfico Pai: " />
<h:outputText styleClass="outputLabel"
value="#{graficoAction.graficoPai}" />
<h:outputText value="Pool de execução: " />
<h:outputText styleClass="outputLabel"
value="#{graficoAction.graficoAdd.conexao}" />
<h:outputText value="Query: " />
<h:outputText styleClass="outputLabel"
value="#{graficoAction.query}" />
<p:commandButton id="testar" value="Testar"
actionListener="#{graficoAction.testaQuery}" update=":centro" />
<p:commandButton id="salvar" value="Salvar"
actionListener="#{graficoAction.salvarGrafico}" update=":centro" />
</h:panelGrid>
</p:panel>
</p:tab>
</p:wizard>
</h:form>
</ui:define>
</ui:composition>[/code]
grafico.java
[code]public class GraficoAction implements Serializable {
private GraficoBusiness graficoNegocio;
private GrupoBusiness grupoNegocio;
private Grafico graficoAdd;
private Grafico graficoPesquisa;
@SuppressWarnings("unused")
private List<Grafico> graficoLista;
@SuppressWarnings("unused")
private List<Grupo> grupoCombo;
private List<Grafico> graficoCombo;
private ColunasGrafico selecionadoDrill;
private List<ColunasGrafico> colunasNome;
private ColunasGrafico[] colunasSelecionado;
private ColunasGrafico[] colunasFiltro;
private String graficoPai;
private String query;
private Integer ordemColuna = 0;
private ColunasGrafico colunaDel;
private Boolean mostraTabelaResumo = false;
public GraficoAction() {
graficoNegocio = new GraficoBusiness();
grupoNegocio = new GrupoBusiness();
graficoPesquisa = new Grafico();
graficoAdd = new Grafico();
colunasNome = new ArrayList<ColunasGrafico>();
ordemColuna = 0;
}
public List<Grafico> getGraficoCombo() {
if (graficoAdd == null || graficoAdd.getIdGrafico() == null
|| graficoAdd.getIdGrafico().equals("")) {
graficoCombo = graficoNegocio.consultaTodosGraficos(graficoAdd);
} else {
graficoCombo = graficoNegocio.consultaMenosGrafico(graficoAdd);
}
return graficoCombo;
}
public void setGraficoCombo(List<Grafico> graficoCombo) {
this.graficoCombo = graficoCombo;
}
public List<Grupo> getGrupoCombo() {
Grupo grupo = new Grupo();
return grupoNegocio.consultaGrupo(grupo);
}
public void setGrupoCombo(List<Grupo> grupoCombo) {
this.grupoCombo = grupoCombo;
}
public Grafico getGraficoAdd() {
return graficoAdd;
}
public void setGraficoAdd(Grafico graficoAdd) {
this.graficoAdd = graficoAdd;
}
public Grafico getGraficoPesquisa() {
return graficoPesquisa;
}
public void setGraficoPesquisa(Grafico graficoPesquisa) {
this.graficoPesquisa = graficoPesquisa;
}
public List<Grafico> getGraficoLista() {
return graficoNegocio.consultaTodosGraficos(graficoPesquisa);
}
public void setGraficoLista(List<Grafico> graficoLista) {
this.graficoLista = graficoLista;
}
public ColunasGrafico getSelecionadoDrill() {
return selecionadoDrill;
}
public void setSelecionadoDrill(ColunasGrafico selecionadoDrill) {
this.selecionadoDrill = selecionadoDrill;
}
public ColunasGrafico[] getColunasSelecionado() {
return colunasSelecionado;
}
public void setColunasSelecionado(ColunasGrafico[] colunasSelecionado) {
this.colunasSelecionado = colunasSelecionado;
}
public List<ColunasGrafico> getColunasNome() {
return colunasNome;
}
public void setColunasNome(List<ColunasGrafico> colunasNome) {
this.colunasNome = colunasNome;
}
public String getGraficoPai() {
return graficoPai;
}
public void setGraficoPai(String graficoPai) {
this.graficoPai = graficoPai;
}
public ColunasGrafico[] getColunasFiltro() {
return colunasFiltro;
}
public void setColunasFiltro(ColunasGrafico[] colunasFiltro) {
this.colunasFiltro = colunasFiltro;
}
public ColunasGrafico getColunaDel() {
return colunaDel;
}
public void setColunaDel(ColunasGrafico colunaDel) {
this.colunaDel = colunaDel;
}
public Boolean getMostraTabelaResumo() {
return mostraTabelaResumo;
}
public void setMostraTabelaResumo(Boolean mostraTabelaResumo) {
this.mostraTabelaResumo = mostraTabelaResumo;
}
public void pesquisaGrafico() {
graficoLista = graficoNegocio.consultaTodosGraficos(graficoPesquisa);
}
public void limparGrafico() {
graficoPesquisa = new Grafico();
graficoLista = graficoNegocio.consultaTodosGraficos(graficoPesquisa);
}
public void adicionarGrafico() {
FacesContext faces = FacesContext.getCurrentInstance();
ExternalContext context = faces.getExternalContext();
graficoAdd = new Grafico();
try {
context.redirect("cadastroGrafico.xhtml");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public void adicionarColuna() {
addColunaGrafico();
}
public void deletarColuna(ActionEvent event) {
FacesMessage mensagem;
if (colunaDel == null) {
mensagem = new FacesMessage(FacesMessage.SEVERITY_ERROR, null,
"Selecione uma coluna!");
FacesContext.getCurrentInstance().addMessage(null, mensagem);
} else {
Iterator<ColunasGrafico> colunasNomeIt = colunasNome.iterator();
while (colunasNomeIt.hasNext()) {
ColunasGrafico colunaGrafico = (ColunasGrafico) colunasNomeIt
.next();
if (colunaGrafico.compareTo(colunaDel) == 0) {
colunasNome.remove(colunaGrafico);
mensagem = new FacesMessage(FacesMessage.SEVERITY_INFO, null,
"Coluna excluida!");
FacesContext.getCurrentInstance().addMessage(null, mensagem);
}
}
}
}
public void alterarGrafico() {
FacesContext faces = FacesContext.getCurrentInstance();
ExternalContext context = faces.getExternalContext();
FacesMessage mensagem;
if (graficoAdd == null) {
mensagem = new FacesMessage(FacesMessage.SEVERITY_ERROR, null,
"Selecione um gráfico!");
FacesContext.getCurrentInstance().addMessage(null, mensagem);
} else {
try {
context.redirect("cadastroGrafico.xhtml");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
public void salvarGrafico() {
FacesContext faces = FacesContext.getCurrentInstance();
ExternalContext context = faces.getExternalContext();
FacesMessage mensagem;
if (!graficoAdd.getTitulo().isEmpty()
|| !graficoAdd.getGrafico().isEmpty()
|| graficoAdd.getLargura() != 0 || graficoAdd.getAltura() != 0
|| !graficoAdd.getComponenteWeb().isEmpty()
|| graficoAdd.getGrupo() != null
|| !graficoAdd.getTabela().isEmpty()
|| !graficoAdd.getConexao().isEmpty()) {
try {
if (graficoAdd.getIdGrafico() == null
|| graficoAdd.getIdGrafico().equals("")) {
graficoNegocio.adicionaGrafico(graficoAdd, colunasNome, colunasSelecionado, colunasFiltro, selecionadoDrill);
} else {
graficoNegocio.alteraGrafico(graficoAdd, colunasNome, colunasSelecionado, colunasFiltro, selecionadoDrill);
}
graficoLista = graficoNegocio
.consultaTodosGraficos(graficoPesquisa);
graficoAdd = new Grafico();
context.redirect("listaGrafico.xhtml");
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} else {
mensagem = new FacesMessage(FacesMessage.SEVERITY_ERROR, null,
"Campos Obrigatorio não preenchidos!");
FacesContext.getCurrentInstance().addMessage(null, mensagem);
}
}
public void excluirGrafico() {
FacesContext faces = FacesContext.getCurrentInstance();
ExternalContext context = faces.getExternalContext();
FacesMessage mensagem;
if (graficoAdd == null) {
mensagem = new FacesMessage(FacesMessage.SEVERITY_ERROR, null,
"Selecione um gráfico!");
FacesContext.getCurrentInstance().addMessage(null, mensagem);
} else {
Grafico graficoFilho = graficoNegocio
.consultaFilhoGrafico(graficoAdd.getIdGrafico());
if (graficoFilho != null) {
mensagem = new FacesMessage(FacesMessage.SEVERITY_ERROR, null,
"Gráfico pai não pode ser deletado!");
FacesContext.getCurrentInstance().addMessage(null, mensagem);
} else {
try {
graficoNegocio.excluiGrafico(graficoAdd);
graficoLista = graficoNegocio
.consultaTodosGraficos(graficoPesquisa);
graficoAdd = new Grafico();
mensagem = new FacesMessage(FacesMessage.SEVERITY_INFO,
null, "Gráfico excluido com sucesso!");
FacesContext.getCurrentInstance()
.addMessage(null, mensagem);
context.redirect("listaGrafico.xhtml");
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
public String onFlowProcess(FlowEvent event) {
if (event.getOldStep().equals("cadastro")
&& event.getNewStep().equals("colunasAgrupador")) {
colunasNome = new ArrayList<ColunasGrafico>();
ordemColuna = 0;
addColunaGrafico();
addColunaGrafico();
} else if (event.getOldStep().equals("colunasAgrupador")
&& event.getNewStep().equals("colunasGrafico")) {
if(colunasNome.size() < 2){
FacesMessage mensagem = new FacesMessage(FacesMessage.SEVERITY_ERROR, null,
"O número mínimo de colunas é 2");
FacesContext.getCurrentInstance().addMessage(null, mensagem);
return "colunasAgrupador";
}
colunasSelecionado = new ColunasGrafico[colunasNome.size()];
} else if (event.getOldStep().equals("colunasGrafico")
&& event.getNewStep().equals("colunasFiltro")) {
if(colunasSelecionado.length < 2){
FacesMessage mensagem = new FacesMessage(FacesMessage.SEVERITY_ERROR, null,
"O número mínimo de colunas é 2");
FacesContext.getCurrentInstance().addMessage(null, mensagem);
return "colunasGrafico";
}
colunasFiltro = new ColunasGrafico[colunasNome.size()];
} else if (event.getOldStep().equals("colunasFiltro")
&& event.getNewStep().equals("colunasDrill")) {
//nenhuma validacao
} else if (event.getOldStep().equals("colunasDrill")
&& event.getNewStep().equals("resGrafico")) {
if(graficoAdd.getIdPaiGrafico() != null){
consultaNomeGrupoPai();
}
graficoAdd.setGrupo(grupoNegocio.consultaIdGrupo(graficoAdd.getGrupo().getIdGrupo()));
}
return event.getNewStep();
}
private void addColunaGrafico() {
ordemColuna = ordemColuna + 1;
ColunasGrafico novaColuna = new ColunasGrafico(ordemColuna);
colunasNome.add(novaColuna);
}
private void consultaNomeGrupoPai() {
.....
}
public void testaQuery() {
....
}
public String getQuery() {
.....
}
}[/code]