Action do <h:commandLink> não está funcionando

Bem,

por esse motivo eu tentei utilizar o t:saveState, justamente pq o scopo é Request, e com o saveState ele fica entre Request e Session.

Bem, n posso colocar como session no momento, pois vai mudar algumas coisas. Eu não sei porque mas, ao tentar utilizar o a4j:keepAlive ele da um erro muito estranho.

As duas soluções que eu mais vi pela internet foi utilizar o saveState e o keepAlive. Porem com o saveState não funciona. e o keepAlive da error.

o savestate que você utilizou é de qual tag?

como vc declarou ela?

<%@taglib uri="http://myfaces.apache.org/tomahawk" prefix="t"%>

..............................................

	<t:saveState value="#{acaoBean}"/>
				<t:saveState value="#{progprojBean }"/>

roberto.,

seu manageBean implementa Serializable?

Aqui estao os 2.


public class AcaoBean {
	private Acao acao = new Acao();
	private List<Acao> acaos = new ArrayList<Acao>();
	private ProgProj progProj = new ProgProj();
	private AcaoService acaoService = new AcaoService();
	private ProgProjService progProjService = new ProgProjService();
	private UsuariosService usuariosService = new UsuariosService();
	
	private Metodos metodos = new Metodos();

	
	public String incluir() {
		try {
			acaoService.incluir(acao);
			acao = null;
			Mensagem.addMsgSucesso("Inclusão realizada com sucesso.");
		} catch (NegocioException e) {
			Mensagem.addMsgErro(e.getMessage());
		}
		return null;
	}

	public String alterar() {
		try {
			acaoService.alterar(acao);
			acao = null;
			Mensagem.addMsgSucesso("Alteração realizada com sucesso.");
			return "listarAcao";
		} catch (NegocioException e) {
			Mensagem.addMsgErro(e.getMessage());
			return null;
		}
	}

	public String excluir() {
		try {
			acaoService.excluir(acao);
			acao = null;
			acaos = acaoService.obterTodos();
			Mensagem.addMsgSucesso("Exclusão realizada com sucesso.");
		} catch (NegocioException e) {
			Mensagem.addMsgErro(e.getMessage());
		}
		return null;
	}
 
	public List<Acao> getAcaos() {
		
		System.out.println(this.progProj.getCodigo());
				
				//acaos = acaoService.obterTodos();
				
				try {
					acaos = acaoService.obterAcoesPorProj(this.progProj.getCodigo());
				} catch (NegocioException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
				
		
		return acaos;
	}

	public Acao getAcao() {
		if (acao == null) {
			acao = new Acao();
		}
		return acao;
	}

	public void setAcao(Acao acao) {
		this.acao = acao;
	}


// Projeto
	
	public Long getcodprojeto() {
			if (getAcao().getProjeto() != null) {
				return getAcao().getProjeto().getCodigo();
			}
			return 0L;
		}
	
	public void setcodprojeto(Long Codprojeto) throws NegocioException {
		ProgProj progProj = progProjService.obterPorCodigo(Codprojeto);
		getAcao().setProjeto(progProj);
	}
	

	public List<SelectItem> getprojetos() throws NegocioException {
		List<SelectItem> itens = new ArrayList<SelectItem>();

		itens.add(new SelectItem(0L, "Selecione"));
		for (ProgProj progProj : progProjService.obterTodos()) {
			itens.add(new SelectItem(progProj.getCodigo(), metodos.retornaStr( progProj.getSetor().getNome()+" - "+ progProj.getProgprojStr()+" - "+	 progProj.getSeq()+" - "+progProj.getNome(), 150)));
		}

		return itens;
	}

	
// Usuário 
	
	public Long getcodusuario() {
			if (getAcao().getUsuario() != null) {
				return getAcao().getUsuario().getCodigo();
			}
			return 0L;
		}
	
	public void setcodusuario(Long Codusuario) throws NegocioException {
		Usuarios usuarios = usuariosService.obterPorCodigo(Codusuario);
		getAcao().setUsuario(usuarios);
	}
	

	public List<SelectItem> getusuarios() throws NegocioException {
		List<SelectItem> itens = new ArrayList<SelectItem>();

		itens.add(new SelectItem(0L, "Selecione"));
		for (Usuarios usuarios : usuariosService.obterTodos()) {
			itens.add(new SelectItem(usuarios.getCodigo(), usuarios.getNome()));
		}

		return itens;
	}

	public void setProgProj(ProgProj progProj) {
		this.progProj = progProj;
	}

	public ProgProj getProgProj() {
		return progProj;
	}

	

public class ProgProjBean {
	private ProgProj progProj = new ProgProj();
	private List<ProgProj> progProjs;
	private List<ProgProj> listaProjAgua = new ArrayList<ProgProj>();
	private List<ProgProj> listaProjEsgoto = new ArrayList<ProgProj>();
	private List<ProgProj> listaProjDrenagem = new ArrayList<ProgProj>();
	private List<ProgProj> listaProjResiduos = new ArrayList<ProgProj>();
	private ProgProjDAO progDao = new ProgProjDAO();
	private ProgProjService progProjService = new ProgProjService();
	private SetorService setorService = new SetorService();

	private UsuariosService usuariosService = new UsuariosService();
	

	 UsuariosBean usuarioMBean = (UsuariosBean) FacesContextComum
		.getSessionAttribute("usuariosBean");
	
	
	public String incluir() {
		try {
			progProjService.incluir(progProj);
			progProj = null;
			Mensagem.addMsgSucesso("Inclusão realizada com sucesso.");
		} catch (NegocioException e) {
			Mensagem.addMsgErro(e.getMessage());
		}
		return null;
	}

	public String alterar() {
		try {
			progProjService.alterar(progProj);
			progProj = null;
			Mensagem.addMsgSucesso("Alteração realizada com sucesso.");
			return "listarProgProj";
		} catch (NegocioException e) {
			Mensagem.addMsgErro(e.getMessage());
			return null;
		}
	}

	public String excluir() {
		try {
			progProjService.excluir(progProj);
			progProj = null;
			progProjs = progProjService.obterTodos();
			Mensagem.addMsgSucesso("Exclusão realizada com sucesso.");
		} catch (NegocioException e) {
			Mensagem.addMsgErro(e.getMessage());
		}
		return null;
	}
 
	
	
	public List<ProgProj> getProgProjs() {
		try {
			if (progProjs == null) {
				progProjs = progProjService.obterTodos();
			}
		} catch (NegocioException e) {
			Mensagem.addMsgErro(e.getMessage());
		}
		return progProjs;
	}
	
	
	public List<ProgProj> getProgProjsPorMunicipio(){
		
		
		try {
			if (progProjs == null) {
				progProjs = progProjService.obterProgsPorMunicipio(usuarioMBean.getMunicipio().getCodigo());
			}
		} catch (NegocioException e) {
			Mensagem.addMsgErro(e.getMessage());
		}
		return progProjs;
	}

	public ProgProj getProgProj() {
		if (progProj == null) {
			progProj = new ProgProj();
		}
		return progProj;
	}

	public void setProgProj(ProgProj progProj) {
		this.progProj = progProj;
	}

// Relatórios
	
	public String gerarRelatorioResumo() {
		
		Relatorio.carregarRelatorio("/relatorios/ResumoProg.jasper", false);
		return null;
	}	
	
	
// Setor 
	
	public Long getcodigosetor() {
			if (getProgProj().getSetor() != null) {
				return getProgProj().getSetor().getCodigo();
			}
			return 0L;
		}
	
	public void setcodigosetor(Long Codigosetor) throws NegocioException {
		Setor setor = setorService.obterPorCodigo(Codigosetor);
		getProgProj().setSetor(setor);
	}
	

	public List<SelectItem> getsetores() throws NegocioException {
		List<SelectItem> itens = new ArrayList<SelectItem>();

		itens.add(new SelectItem(0L, "Selecione"));
		for (Setor setor : setorService.obterTodos()) {
			itens.add(new SelectItem(setor.getCodigo(), setor.getNome()));
		}

		return itens;
	}

	
// ProjPai 
	
	public Long getcodprojpai() {
			if (getProgProj().getProjpai() != null) {
				return getProgProj().getProjpai().getCodigo();
			}
			return 0L;
		}
	
	public void setcodprojpai(Long Codprojpai) throws NegocioException {
		ProgProj progProj = progProjService.obterPorCodigo(Codprojpai);
		getProgProj().setProjpai(progProj);
	}
	

	public List<SelectItem> getprojpais() throws NegocioException {
		List<SelectItem> itens = new ArrayList<SelectItem>();

		itens.add(new SelectItem(0L, "Selecione"));
		for (ProgProj progProj : progProjService.obterTodos()) {
			itens.add(new SelectItem(progProj.getCodigo(), progProj.getNome()));
		}

		return itens;
	}

	
// Usuário 
	
	public Long getcodusuario() {
			if (getProgProj().getUsuario()!= null) {
				return getProgProj().getUsuario().getCodigo();
			}
			return 0L;
		}
	
	public void setcodusuario(Long Codusuario) throws NegocioException {
		Usuarios usuarios = usuariosService.obterPorCodigo(Codusuario);
		getProgProj().setUsuario(usuarios);
	}
	

	public List<SelectItem> getusuarios() throws NegocioException {
		List<SelectItem> itens = new ArrayList<SelectItem>();

		itens.add(new SelectItem(0L, "Selecione"));
		for (Usuarios usuarios : usuariosService.obterTodos()) {
			itens.add(new SelectItem(usuarios.getCodigo(), usuarios.getNome()));
		}

		return itens;
	}

	public void setListaProjAgua(List<ProgProj> listaProjAgua) {
		this.listaProjAgua = listaProjAgua;
	}

	public List<ProgProj> getListaProjAgua() {
		
		setListaProjAgua(progDao.listarProjAgua(usuarioMBean.getMunicipio().getCodigo()));
		
		/*int resto = listaProjAgua.size()%5;
			
		if (resto != 0){
			
			Integer qntoFalta = 5 - resto;
			
			
			for (int i=0;i<qntoFalta;i++){
				
				listaProjAgua.add(new ProgProj());
				
			}
			*/
			
		
			
	
		
		return listaProjAgua;
	}

	public void setListaProjEsgoto(List<ProgProj> listaProjEsgoto) {
		this.listaProjEsgoto = listaProjEsgoto;
	}

	public List<ProgProj> getListaProjEsgoto() {
		
		setListaProjEsgoto(progDao.listarProjEsgoto(usuarioMBean.getMunicipio().getCodigo()));
		
		return listaProjEsgoto;
	}

	public void setListaProjDrenagem(List<ProgProj> listaProjDrenagem) {
		this.listaProjDrenagem = listaProjDrenagem;
	}

	public List<ProgProj> getListaProjDrenagem() {
		
		setListaProjDrenagem(progDao.listarProjDrenagem(usuarioMBean.getMunicipio().getCodigo()));
		
		return listaProjDrenagem;
	}

	public void setListaProjResiduos(List<ProgProj> listaProjResiduos) {
		this.listaProjResiduos = listaProjResiduos;
	}

	public List<ProgProj> getListaProjResiduos() {
		
		setListaProjResiduos(progDao.listarProjResiduos(usuarioMBean.getMunicipio().getCodigo()));
		
		return listaProjResiduos;
	}

	

Bem, eu pensava que apenas entidades deveriam implementar serializable.

ae estão eles.

Coloca a tag h:messages no inicio do seu form, dai caso ocorra algum erro na validação ou conversão de algum componentes a mensagem será adicionada no componente.

Coloquei o h:messages … e nada de funcionar, ou melhor,

nada de mostrar error.

roberto, no caso como vc esta guardando o estado do managed bean inteiro

 <t:saveState value="#{acaoBean}"/>  

Seu manage bean deve implementar Serializable sim, a fim de vc conseguir resgatar seus atributos.

o mesmo se aplica pro a4j:keepAlive, que no caso guarda o proprio menagedBean de qualquer jeito, precisa estar serializado.

Continua sem funcionar.

ngm ?

[quote=robertoJames]Estou passando por esse problema de novo.

aqui está meu rich:dataTable


<rich:panel>
		<rich:dataTable value="#{acaoBean.acaos}" var="set">
			<rich:column>
				<f:facet name="header">
			<h:outputText value="Setor" />
				</f:facet>
				<h:outputText value="#{set.projeto.setor.nome}" />
			</rich:column>
			<rich:column>
				<f:facet name="header">
			<h:outputText value="Progr / Proje" />
				</f:facet>
				<h:outputText value="#{set.projeto.progprojStr} : #{set.projeto.seq}" />
			</rich:column>
			<rich:column>
				<f:facet name="header">
					<h:outputText value="Seq" />
				</f:facet>
				<h:outputText value="#{set.seq}" />
			</rich:column>
			<rich:column>
				<f:facet name="header">
					<h:outputText value="Nome" />
				</f:facet>
				<h:outputText value="#{set.nome}" />
			</rich:column>
			<rich:column>
				<f:facet name="header">
					<h:outputText value="Início" />
				</f:facet>
				<h:outputText value="#{set.dataIniStr}"  />
			</rich:column>
			<rich:column>
				<f:facet name="header">
					<h:outputText value="Fim" />
				</f:facet>
				<h:outputText value="#{set.dataFimStr}"  />
			</rich:column>
			<rich:column>
				<f:facet name="header">
					<h:outputText value="Responsável" />
				</f:facet>
				<h:outputText value="#{set.usuario.nome}" />
			</rich:column>
			<rich:column>
				<f:facet name="header">
					<h:outputText value="Real.(%)" />
				</f:facet>
				<h:outputText value="#{set.realizado}" />
			</rich:column>
			<rich:column>
				<f:facet name="header">
					<h:outputText value="Ações" />
				</f:facet>
				
				<h:commandButton image="/recursos/imagem/visualizar.png" action="alterarAcao">
				
				<f:setPropertyActionListener value="#{set}"
						target="#{acaoBean.acao}" />
					
					<f:setPropertyActionListener value="#{progprojBean.progProj}"
						target="#{acaoBean.progProj}" />
							
				</h:commandButton>
				
				&nbsp;&nbsp;
				<h:commandLink value="Excluir" action="#{acaoBean.excluir}"
					onclick="return confirm('Deseja confirmar a exclusão?');">
					<f:setPropertyActionListener value="#{set}"
						target="#{acaoBean.acao}" />
				</h:commandLink>
			</rich:column>
		</rich:dataTable>
		</rich:panel>

Quando clico em visualizar <h:commandButton image="/recursos/imagem/visualizar.png" action=“alterarAcao”>

ao invés dele executar a action:


<navigation-case>
   <from-outcome>alterarAcao</from-outcome>
   <to-view-id>/paginas/cadastro/acao/alterar.jsp</to-view-id>
  </navigation-case>

ele da um refresh na página,

ou seja, ele atualiza a pagina atual e não redireciona para a action mencionada acima.

Alguem poderia me ajudar ?
[/quote]

vc colocou a tag <h:form> ???


<f:view>
	<html>
	<head>
	<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
	<a4j:loadStyle src="/recursos/css/estilo.css"></a4j:loadStyle>
	<title>PMSB</title>
	</head>
	<body>
	<h:form>
		<h:messages />
		
				
		PAINEL DE ACOES
		
		<h:commandButton image="/recursos/imagem/visualizar.png" action="alterarAcao" />
				
		
		<rich:dataTable value="#{acaoBean.acaos}" var="set" 
		style="cursor:pointer;"
		onRowMouseOver="this.style.backgroundColor='#CEF9FD'"
		onRowMouseOut="this.style.backgroundColor='#{a4jSkin.tableBackgroundColor}'">
		
			<rich:column>
				<f:facet name="header">
			<h:outputText value="Setor" />
				</f:facet>
				<h:outputText value="#{set.projeto.setor.nome}" />
			</rich:column>
			<rich:column>
				<f:facet name="header">
			<h:outputText value="Progr / Proje" />
				</f:facet>
				<h:outputText value="#{set.projeto.progprojStr} : #{set.projeto.seq}" />
			</rich:column>
			<rich:column>
				<f:facet name="header">
					<h:outputText value="Seq" />
				</f:facet>
				<h:outputText value="#{set.seq}" />
			</rich:column>
			<rich:column>
				<f:facet name="header">
					<h:outputText value="Nome" />
				</f:facet>
				<h:outputText value="#{set.nome}" />
			</rich:column>
			<rich:column>
				<f:facet name="header">
					<h:outputText value="Início" />
				</f:facet>
				<h:outputText value="#{set.dataIniStr}"  />
			</rich:column>
			<rich:column>
				<f:facet name="header">
					<h:outputText value="Fim" />
				</f:facet>
				<h:outputText value="#{set.dataFimStr}"  />
			</rich:column>
			<rich:column>
				<f:facet name="header">
					<h:outputText value="Responsável" />
				</f:facet>
				<h:outputText value="#{set.usuario.nome}" />
			</rich:column>
			<rich:column>
			
			
			
				<f:facet name="header">
					<h:outputText value="Real.(%)" />
				</f:facet>
				<h:outputText value="#{set.realizado}" />
			</rich:column>
			<rich:column>
			
				<t:saveState value="#{acaoBean}"/>
				<t:saveState value="#{progprojBean}"/>
			
				<f:facet name="header">
					<h:outputText value="Ações" />
				</f:facet>
				
				<h:commandButton image="/recursos/imagem/visualizar.png" action="alterarAcao" />
				
			
				&nbsp;&nbsp;
				<h:commandLink value="Excluir" action="#{acaoBean.excluir}"
					onclick="return confirm('Deseja confirmar a exclusão?');">
					<f:setPropertyActionListener value="#{set}"
						target="#{acaoBean.acao}" />
				</h:commandLink>
			</rich:column>
		</rich:dataTable>
		
		
		
		
		<rich:spacer height="20" />
		<h:commandButton value="Nova Ação"
			action="incluirAcao" />
		<rich:spacer width="10" />
		<h:commandButton value="Voltar" action="PMSB" />
		
	</h:form>
	</body>
	</html>
</f:view>

ola,

poderia postar os código novamente (todos)? pode ser que alterou o código.

Abraços Luiz

continuo com o mesmo problema.

alguem poderia me dar alguma luz. ???