P:commandButton ecluir com PrimeFaces

11 respostas
C
Boa tarde amigos, estou iniciando com PrimeFaces e estou com um grande problema pra excluir um registro.

[color=green] <p:dataTable id=dtCarreta value="#{carretaMBean.cachedCarreta}" var=item

selection="#{carretaMBean.selectedCarretas}" emptyMessage="#{msgs.dtVazia}">

<f:facet name=header>

<p:commandButton id=cbtVisualizarCarreta value="#{msgs.cbtVisualizarCarreta}" image=ui-icon ui-icon-search

update=frmCadastrarCarreta:displayMulti oncomplete=multiCarDialog.show()/>

<p:tooltip for=cbtVisualizarCarreta value="#{msgs.tpPesquisarCarreta}" showEffect=grow

hideEffect=grow showEffectLength=500 hideEffectLength=500 position=topRight/>
<p:spacer width="20 px" />

                        <p:commandButton id="tpEditarCarreta" action="#{carretaMBean.showDetails}"
                                         image="ui-icon-arrowrefresh-1-e" update="frmCadastrarCarreta:pnlCadastro">
                            <f:setPropertyActionListener value="#{item}" target="#{carretaMBean.selectedCarretas}" />
                        </p:commandButton>
                        <p:tooltip for="tpEditarCarreta" value="#{msgs.tpEditarCarreta}" showEffect="grow" position="topRight"
                                   hideEffect="grow" showEffectLength="500" hideEffectLength="500" />
                    </f:facet>
                    <p:column selectionMode="multiple"/>
                    <p:column sortBy="#{item.codigocarreta}" filterBy="#{item.codigocarreta}">
                        <f:facet name="header">
                            <h:outputText value="#{msgs.optTableCodigoCarreta}" />
                        </f:facet>
                        <h:outputText value="#{item.codigocarreta}"/>
                    </p:column>
                    <p:column sortBy="#{item.descricao}" filterBy="#{item.descricao}">
                        <f:facet name="header">
                            <h:outputText value="#{msgs.optTableDescricaoCarreta}" />
                        </f:facet>
                        <h:outputText value="#{item.descricao}"/>
                    </p:column>
                    <p:column sortBy="#{item.placa}" filterBy="#{item.placa}">
                        <f:facet name="header">
                            <h:outputText value="#{msgs.optTablePlacaCarreta}" />
                        </f:facet>
                        <h:outputText value="#{item.placa}"/>
                    </p:column>
                    <p:column sortBy="#{item.ano}" filterBy="#{item.ano}">
                        <f:facet name="header">
                            <h:outputText value="#{msgs.optTableAnoCarreta}" />
                        </f:facet>
                        <h:outputText value="#{item.ano}"/>
                    </p:column>
                    <p:column sortBy="#{item.cor}" filterBy="#{item.cor}">
                        <f:facet name="header">
                            <h:outputText value="#{msgs.optTableCorCarreta}" />
                        </f:facet>
                        <h:outputText value="#{item.cor}"/>
                    </p:column>
                    <p:column sortBy="#{item.carroceria.descricao}" filterBy="#{item.carroceria.descricao}">
                        <f:facet name="header">
                            <h:outputText value="#{msgs.optTableCarroceriaCarreta}" />
                        </f:facet>
                        <h:outputText value="#{item.carroceria.descricao}"/>
                    </p:column>
                    <p:column>
                        <f:facet name="header">
                            <h:outputText value="#{msgs.optTableAcao}" />
                        </f:facet> [/color]
                      [color=red]  <p:commandButton id="btnExcluirCarreta" image="ui-icon ui-icon-close" 
                                         update="frmCadastrarCarreta:dtListExcluir" oncomplete="confirmation.show()">
                        </p:commandButton>
                        <p:tooltip for="btnExcluirCarreta" value="#{msgs.tpExcluirCarreta}" showEffect="grow" position="topRight"
                                   hideEffect="grow" showEffectLength="500" hideEffectLength="500" /> [/color] 
                   [color=green] </p:column>
                </p:dataTable> [/color]
[color=#444444] Panel que o botao excluir chama p/ confirmar a exclusão: [/color]

[color=green] <p:confirmDialog id=“excluirCarreta” message="#{msgs.optLabelMsgExclusaoCarreta}"

width=“350” showEffect=“explode” hideEffect=“explode”

header="#{msgs.optLabelMsgConfirmarCarreta}" severity=“alert”

widgetVar=“confirmation” modal=“true”>

<p:commandButton value="#{msgs.cbtSim}" action="#{carretaMBean.doRemoveCarreta}" image=“ui-icon-check”

update=“dtCarreta” oncomplete=“confirmation.hide()” style=“left: 30%;” onclick=“FocoCarreta(this);”>

<f:setPropertyActionListener value="#{item}" target="#{carretaMBean.selectedCarreta}" />

</p:commandButton>
<p:commandButton value="#{msgs.cbtNao}" image="ui-icon-cancel"
                             onclick="confirmation.hide()" type="button" style="left: 35%;"/>
        </p:confirmDialog> [/color]

Mas o problema é quando clico na confirmação da exclusão, o método retorna sempre null. Não sei mais o que fazer. Por favor alguém me ajude…

11 Respostas

igoorgalvao

Amigo

Eu usei a seguinte forma para excluir um registro

<h:column>
	<f:facet name="header">
		<h:outputText value="Excluir" />
	</f:facet>
	<h:commandButton value="Excluir" action="#{bean.excluir(lista)}" immediate="true" />
</h:column>

BEAN

public String excluir(Usuario us) {
}

Ou seja no meu caso eu passo o proprio registro para excluir, você pode passar o id e excluir.
A grande sacada é que vc pode criar método e passar parametros.

Quaquer duvida poste ae…

Abraços

E

Parece que você está saindo do contexto do form onde chama o botão excluir.
Seu bean é @RequestScope ?

C

Sim, meu bean é @RequestScope

igoorgalvao

o escopo é sim @RequestScoped.

Vou postar o trecho do código para ver se consigo te ajudar.
XHTML

<h:dataTable id="tableDate" width="100%" rendered="#{not empty cadastrarUsuario.listaUsuario}"
				value="#{cadastrarUsuario.listaUsuario}" var="lista" style="text-align: center;">
				<h:column>
					<f:facet name="header">
						<h:outputText value="Nome" />
					</f:facet>
					<h:outputText style="text-align: center;" value="#{lista.nome}" />
				</h:column>
				<h:column>
					<f:facet name="header">
						<h:outputText value="Idade" />
					</f:facet>
					<h:outputText style="text-align: center;" value="#{lista.idade}" />
				</h:column>
				<h:column>
					<f:facet name="header">
						<h:outputText value="Editar" />
					</f:facet>
					<h:commandButton value="Editar" action="#{cadastrarUsuario.editar(lista)}" immediate="true" />
				</h:column>
				<h:column>
					<f:facet name="header">
						<h:outputText value="Excluir" />
					</f:facet>
					<h:commandButton value="Excluir" action="#{cadastrarUsuario.excluir(lista)}" immediate="true" />
				</h:column>
			</h:dataTable>

Bean

public String excluir(Usuario us) {
		try {
			if (!StringUtil.isEmpty(us.getId())) {
				addMensagemErro("Erro ao Excluir");
				return "cadastrarCliente";
			}

			usuarioService.excluir(us);

			pesquisar();
		} catch (Exception e) {
			addMensagemErro("Erro ao Excluir");
			e.printStackTrace();
		}

		return "cadastrarCliente";
	}

Ou seja eu tenho uma lista de usuario e no xhtml eu passo ele para o bean receber atraves de parametro.

Espero ter ajudado.

C

Bom dia,

Seguindo a sugestão do Igor, meu método excluir esta assim:

[color=green] public void doRemoveCarreta() {

carretaDAO.removeCarreta(selectedCarreta);

cachedCarreta = null;

selectedCarreta.setAno(null);

selectedCarreta.setCarroceria(null);

selectedCarreta.setCor(null);

selectedCarreta.setDescricao(null);

selectedCarreta.setPlaca(null);

selectedCarreta.setCodigocarreta(null);

} [/color]

Não conseguiu passar o id por parametro. Poderia postar seu método excluir ai ou me enviar por email? [email removido]

Abraço

C

O cara desculpa, eu postei a última msg e nao vi que vc tinha postado os códigos ja kkk… desculpa… vou testar aqui.

E

A diferença do código do igoor é o confirmdialog. Ali que deve ser o problema.
clever, tente modificar para @ViewScope.

C

Entao cara eu tentei no desespero todos os escopos de sessão e nada… os codigs do igor também nao funcionaram…
Acho que tem alguma macumba nisso, só pode kk…
E se eu colocar o p:dialog detro da coluna que o botao excluir esta, ele até exclui mas sempre pega o ultimo registro cadastrado da tabela…

C
Pessoal descobri oque esta errado. O meu método no DAO nao esta excluindo a lista de checkbox selecionada. Pode me ajudar a arruimar esse método?

Método excluir no DAO:

[color=red]public void removeCarreta(Carreta carreta) {

removePojo(carreta);

}[/color]
Bean:

[color=green]public void doRemoveListaCarretas() {

carretaDAO.removeListaCarreta(selectedCarretas);

cachedCarreta = null;

selectedCarreta.setAno(null);

selectedCarreta.setCarroceria(null);

selectedCarreta.setCor(null);

selectedCarreta.setDescricao(null);

selectedCarreta.setPlaca(null);

selectedCarreta.setCodigocarreta(null);

}[/color]

Página xhtml:
[color=green] <p:commandButton id=“btnExcluirCarreta” image=“ui-icon ui-icon-close” oncomplete=“confirmation.show()” />

<p:confirmDialog id="excluirCarreta" message="#{msgs.optLabelMsgExclusaoCarreta}"
                                         width="350" showEffect="explode" hideEffect="explode"
                                         header="#{msgs.optLabelMsgConfirmarCarreta}" severity="alert"
                                         widgetVar="confirmation" modal="true">
                            <p:commandButton value="#{msgs.cbtSim}" action="#{carretaMBean.doRemoveCarreta}" image="ui-icon-check"
                                             update="dtCarreta" oncomplete="confirmation.hide()" style="left: 30%;" onclick="FocoCarreta(this);">
                               <f:setPropertyActionListener value="#{item}" target="#{carretaMBean.selectedCarretas}" />
                            </p:commandButton>

                            <p:commandButton value="#{msgs.cbtNao}" image="ui-icon-cancel"
                                             onclick="confirmation.hide()" type="button" style="left: 35%;"/>
                        </p:confirmDialog>[/color]

Abraço.

C
Pessoal tá quase funcionando, só tem um probleminha. Quando eu seleciono o checkbox a variável selectedCarretas esta valorizada certa, mas quando clico no botao excluir, a variável passa a estar nula. Não sei oque esta acontecendo. Alguém tem uma ideia ? Método excluir no DAO:
public void removeListaCarreta(Carreta[] selectedCarretas) {
    for (int i = 0; i > 0; i++) {
        this.removeCarreta(selectedCarretas[i]);
    }
}
Bean:
public void doRemoveListaCarretas() {
    carretaDAO.removeListaCarreta(selectedCarretas);
}
Página xhtml:
<p:commandButton id="btnExcluirCarreta" image="ui-icon ui-icon-close" oncomplete="confirmation.show()" />
<p:confirmDialog id="excluirCarreta" message="#{msgs.optLabelMsgExclusaoCarreta}"
                             width="350" showEffect="explode" hideEffect="explode"
                             header="#{msgs.optLabelMsgConfirmarCarreta}" severity="alert"
                             widgetVar="confirmation" modal="true">
                <p:commandButton value="#{msgs.cbtSim}" action="#{carretaMBean.doRemoveListaCarretas}" image="ui-icon-check" ajax="false"
                                 update="dtCarreta" oncomplete="confirmation.hide()" style="left: 30%;" onclick="FocoCarreta(this);">
                    <f:setPropertyActionListener value="#{item}" target="#{carretaMBean.selectedCarretas}" />
                </p:commandButton>

                <p:commandButton value="#{msgs.cbtNao}" image="ui-icon-cancel"
                                 onclick="confirmation.hide()" type="button" style="left: 35%;"/>
            </p:confirmDialog>
C
Boa tarde amigos, resolvi o problema. Ficou assim: DAO:
public void removeListaCarreta(Carreta[] selectedCarretas) {
        if (selectedCarretas != null) {
            for (int i = 0; i < selectedCarretas.length; i++) {
                this.removeCarreta(selectedCarretas[i]);
            }
        }
    }
ManagedBean:
public void doRemoveListaCarretas() {
        carretaDAO.removeListaCarreta(selectedCarretas);
        cachedCarreta = null;
        selectedCarreta.setAno(null);
        selectedCarreta.setCarroceria(null);
        selectedCarreta.setCor(null);
        selectedCarreta.setDescricao(null);
        selectedCarreta.setPlaca(null);
        selectedCarreta.setCodigocarreta(null);
    }
xhtml:
<p:commandButton id="btnExcluirCarreta" value="#{msgs.cbtExcluirCarreta}"
                                             image="ui-icon ui-icon-close" oncomplete="confirmation.show()" />
<p:confirmDialog id="excluirCarreta" message="#{msgs.optLabelMsgExclusaoCarreta}"
                             width="350" showEffect="explode" hideEffect="explode"
                             header="#{msgs.optLabelMsgConfirmarCarreta}" severity="alert"
                             widgetVar="confirmation" modal="true">
                <p:commandButton value="#{msgs.cbtSim}" action="#{carretaMBean.doRemoveListaCarretas}" image="ui-icon-check"
                                 update="dtCarreta" oncomplete="confirmation.hide()" style="left: 30%;">
                </p:commandButton>

                <p:commandButton value="#{msgs.cbtNao}" image="ui-icon-cancel"
                                 onclick="confirmation.hide()" type="button" style="left: 35%;"/>
            </p:confirmDialog>

Abraço.

Criado 12 de julho de 2011
Ultima resposta 18 de jul. de 2011
Respostas 11
Participantes 3