é o seguinte estou utilizando displaytag, eu tava com problemas para exibir os campos marcados com check porem com o decorator resolvi esse problema agora na hora de alterar está acontecendo um problema de chamada da action porque ele consegue pegar o value do check altera no banco porem ao invez de voltar pra tela com o result ele chama a action novamente e aí ao inevez de alterar mantem como estava antes, porem isso não ocorre sempre em determinadas requisições ele executa corretamente e em outras não. alguém sabe dizer o que pode estar acontecendo do porquê em momentos ele chamar uma vez apenas a action como deve ser e em outras chama-la duas vezes. detalhe estou usando struts 2.0
Problemas com checkbox na displaytag
8 Respostas
Olá, cara se entendi bem, ele faz o que vc quer e depois chama a mesma Action novamente?
Da uma olhada no “Forward” no arquivo do struts config, vê pra onde ele ta redirecionando.
abraço
isso mesmo, o mapeamento ta aparentemente correto eu coloquei para o result ir para a pagina inicial e faz isso corretamente.
Tem como você postar o código e o xml do struts config?
xml :
<?xml version="1.0" encoding="UTF-8" ?><package name="administrativo" namespace="/paginas/administrativo"
extends="struts-default">
<action name="listarTipoTelefone"
class="br.com.vcn.administrativo.action.TipoTelefoneAction"
method="listar">
<result name="success">
/paginas/administrativo/tipoTelefone.jsp
</result>
</action>
<action name="incluirTipoTelefone"
class="br.com.vcn.administrativo.action.TipoTelefoneAction"
method="incluir">
<result>
/paginas/administrativo/tipoTelefoneForm.jsp
</result>
</action>
<action name="habilitarTipoTelefone"
class="br.com.vcn.administrativo.action.TipoTelefoneAction"
method="habilitar">
<result name="success" type="redirect-action">
listarTipoTelefone
</result>
</action>
<action name="excluirTipoTelefone"
class="br.com.vcn.administrativo.action.TipoTelefoneAction"
method="excluir">
<result name="success" type="redirect-action">
listarTipoTelefone
</result>
</action>
<action name="alterarTipoTelefone"
class="br.com.vcn.administrativo.action.TipoTelefoneAction"
method="alterar">
<result name="success">
/paginas/administrativo/tipoTelefoneForm.jsp
</result>
</action>
<action name="gravarTipoTelefone"
class="br.com.vcn.administrativo.action.TipoTelefoneAction"
method="gravar">
<result name="success" type="redirect-action">
listarTipoTelefone
</result>
<result name="input">
/paginas/administrativo/tipoTelefoneForm.jsp
</result>
</action>
<action name="excluirTipoTelefone" class="br.com.vcn.administrativo.action.TipoTelefoneAction"
method="excluir">
<result name="success" type="redirect-action">
listarTipoTelefone
</result>
</action>
<action name="pesquisarTipoTelefone"
class="br.com.vcn.administrativo.action.TipoTelefoneAction"
method="pesquisar">
<result>
/paginas/administrativo/tipoTelefoneLista.jsp
</result>
</action>
</package>
jsp:
<%@ taglib uri=“http://displaytag.sf.net” prefix=“display”%>
<%@ taglib uri="/struts-tags" prefix=“s”%>
<%@ taglib uri=“http://java.sun.com/jsp/jstl/core” prefix=“c”%>
<s:if test="${not empty listaTipoTelefone}">
<c:set var=“urlAlterarTipoTelefone”>
<s:url action=“alterarTipoTelefone”
namespace="/paginas/administrativo" />
</c:set>
<c:set var="urlExcluirTipoTelefone">
<s:url action="excluirTipoTelefone"
namespace="/paginas/administrativo" />
</c:set>
<c:set var="urlHabilitarTipoTelefone">
<s:url action="habilitarTipoTelefone"
namespace="/paginas/administrativo" />
</c:set>
<display:table decorator="br.com.vcn.util.Wraper" id="tipoTelefone"
name="listaTipoTelefone" list="listaTipoTelefone" class="its"
style="width: 100%;">
<display:column property="cdTipoTelefone" title="Código"></display:column>
<display:column property="dsTipoTelefone" title="Nome"></display:column>
<display:column property="flHabilitado" title=""
paramId="cdTipoTelefone" paramProperty="cdTipoTelefone"
href="${urlHabilitarTipoTelefone}"></display:column>
<display:column paramId="cdTipoTelefone"
paramProperty="cdTipoTelefone" href="${urlAlterarTipoTelefone}">
<img alt="Editar" border="0" src="/vcn/Imagens/edit.png" />
</display:column>
<display:column paramId="cdTipoTelefone"
paramProperty="cdTipoTelefone" href="${urlExcluirTipoTelefone}">
<img alt="Excluir" border="0" src="/vcn/Imagens/delete.png" />
</display:column>
</display:table>
</s:if>
<s:else>
Nenhum registro encontrado
</s:else>
action:
package br.com.vcn.administrativo.action;
import java.util.Collection;
import persistencia.DaoFactory;
import persistencia.TipoTelefoneDao;
import br.com.vcn.modelo.TipoTelefone;
import com.opensymphony.xwork2.ActionSupport;
public class TipoTelefoneAction extends ActionSupport {
private static final long serialVersionUID = 1L;
private TipoTelefone tipoTelefone;
private Collection<?> listaTipoTelefone;
private String dsTipoTelefone;
private Long cdTipoTelefone;
public String input() {
return SUCCESS;
}
public String listar() {
try {
final DaoFactory fabrica = DaoFactory.getDAOFactory();
final TipoTelefoneDao dao = fabrica.createTipoTelefoneDao();
setListaTipoTelefone(null);
setListaTipoTelefone(dao.listarTodos());
} catch (Exception e) {
e.printStackTrace();
}
return SUCCESS;
}
public String incluir() {
return SUCCESS;
}
public String habilitar() {
try {
final DaoFactory fabrica = DaoFactory.getDAOFactory();
final TipoTelefoneDao dao = fabrica.createTipoTelefoneDao();
tipoTelefone = dao.consultar(this.cdTipoTelefone, false);
if (tipoTelefone.getFlHabilitado())
tipoTelefone.setFlHabilitado(false);
else
tipoTelefone.setFlHabilitado(true);
fabrica.iniciarTransacao();
dao.gravar(tipoTelefone);
fabrica.commitTransacao();
listar();
} catch (Exception e) {
e.printStackTrace();
}
return SUCCESS;
}
public String pesquisar() {
if (dsTipoTelefone == null) {
dsTipoTelefone = "";
} else
setDsTipoTelefone(this.dsTipoTelefone.toUpperCase());
try {
final DaoFactory fabrica = DaoFactory.getDAOFactory();
final TipoTelefoneDao dao = fabrica.createTipoTelefoneDao();
setListaTipoTelefone(dao.consultar(this.getDsTipoTelefone(), false));
} catch (Exception e) {
e.printStackTrace();
}
return SUCCESS;
}
public String alterar() {
try {
final DaoFactory fabrica = DaoFactory.getDAOFactory();
final TipoTelefoneDao dao = fabrica.createTipoTelefoneDao();
setTipoTelefone(null);
setTipoTelefone(dao.consultar(this.cdTipoTelefone, false));
} catch (Exception e) {
e.printStackTrace();
}
return SUCCESS;
}
public String excluir() {
try {
final DaoFactory fabrica = DaoFactory.getDAOFactory();
final TipoTelefoneDao dao = fabrica.createTipoTelefoneDao();
fabrica.iniciarTransacao();
dao.excluir(dao.consultar(cdTipoTelefone, false));
fabrica.commitTransacao();
} catch (Exception e) {
e.printStackTrace();
}
return SUCCESS;
}
public String gravar() {
try {
final DaoFactory fabrica = DaoFactory.getDAOFactory();
final TipoTelefoneDao dao = fabrica.createTipoTelefoneDao();
fabrica.iniciarTransacao();
if (this.getTipoTelefone().getCdTipoTelefone() != null) {
TipoTelefone t = dao.consultar(getTipoTelefone()
.getCdTipoTelefone(), false);
t.setDsTipoTelefone(this.tipoTelefone.getDsTipoTelefone());
dao.gravar(t);
} else {
dao.gravar(this.tipoTelefone);
}
fabrica.commitTransacao();
setTipoTelefone(null);
} catch (Exception e) {
e.printStackTrace();
}
return SUCCESS;
}
public TipoTelefone getTipoTelefone() {
return tipoTelefone;
}
public void setTipoTelefone(TipoTelefone tipoTelefone) {
this.tipoTelefone = tipoTelefone;
}
public Collection<?> getListaTipoTelefone() {
return listaTipoTelefone;
}
public void setListaTipoTelefone(Collection<?> listaTipoTelefone) {
this.listaTipoTelefone = listaTipoTelefone;
}
public String getDsTipoTelefone() {
return dsTipoTelefone;
}
public void setDsTipoTelefone(String dsTipoTelefone) {
this.dsTipoTelefone = dsTipoTelefone;
}
public Long getCdTipoTelefone() {
return cdTipoTelefone;
}
public void setCdTipoTelefone(Long cdTipoTelefone) {
this.cdTipoTelefone = cdTipoTelefone;
}
}
Cara aparentimente ta blz… só pra saber é o método “incluirTipoTelefone” que ta dando erro? se for, da um nome para o seu result no struts-config. e vê se é isso.
/paginas/administrativo/tipoTelefoneForm.jsp
não é o habillitarTipoTelefone. ele ta sendo chamado ora uma vez ora duas.
Cara gostaria mesmo de ajuda-lo, mas não tenho como testar aqui no trabalho. mas debug o código cara. vê se ele ta dando 02 submit seguido, etc.
blz cara valew pela força.