JSF - Diferença entre Action e ActionListener

1 resposta
H

Pessoal, estava fazendo uma aplicação web de exemplo, uma agenda, quando me deparo com um pequeno problema.

Quando eu criava a lista de contatos, tinha um botão ao lado para deletar aquele contato em questão:

<h:dataTable var="contato"
					value="#{AtualizarFormulario.listaDeContatos}">
					<h:column>
						<f:facet name="header">
							<h:outputText value="ID"></h:outputText>
						</f:facet>
						<h:outputText value="#{contato.id}"></h:outputText>
					</h:column>

					<h:column>
						<f:facet name="header">
							<h:outputText value="NOME"></h:outputText>
						</f:facet>
						<h:outputText value="#{contato.nome}"></h:outputText>
					</h:column>

					<h:column>
						<f:facet name="header">
							<h:outputText value="TELEFONE"></h:outputText>
						</f:facet>

						<h:outputText value="#{contato.telefone}"></h:outputText>
					</h:column>

					<h:column>
						<f:facet name="header">
							<h:outputText value="EMAIL"></h:outputText>
						</f:facet>
						<h:outputText value="#{contato.email}"></h:outputText>
					</h:column>

					<h:column>
						<f:facet name="header">
							<h:outputText value="DELETAR"></h:outputText>
						</f:facet>
						<h:commandButton value="Deletar"
							actionListener="#{AtualizarFormulario.deletarContatoSelecionado}"
							>
							<f:setPropertyActionListener value="#{contato.id}"
								target="#{AtualizarFormulario.usuDelete}"></f:setPropertyActionListener>
						</h:commandButton>
					</h:column>
				</h:dataTable>

Desta forma que eu fiz, ele não passava pelo set do "usuDelete" (que é o id do contato a ser deletado). Ele ia direto ao método.

Quando eu colocava isso:

<h:commandButton value="Deletar"	action="#{AtualizarFormulario.deletarContatoSelecionado}">
			<f:setPropertyActionListener value="#{contato.id}"
				target="#{AtualizarFormulario.usuDelete}"></f:setPropertyActionListener>
	 </h:commandButton>

Ele conseguia setar o usuDelete antes de ir ao método, eu ainda não entendi qual a diferença entre os dois, alguém podería me explicar por que existe essa diferença?

Obrigado.

1 Resposta

H

Action você realiza ações e navegações.
ActionListener você altera o estado de um objeto (componentes de tela ou suas classes), geralmente com ajax.

Criado 5 de dezembro de 2011
Ultima resposta 5 de dez. de 2011
Respostas 1
Participantes 2