JSF: Erro ao realizar um Action

4 respostas
T

Salve galera.
Eu estou tentando criar uma pequena aplicação de teste aqui e estou tendo problemas ao fazer um delete.
Eu tenho um bean que tem uma propriedade ArrayList que contem varios objetos Dependentes. A classe que contem os dependentes se chama ListaDependentes e a propriedade eh a ldependentes. E no metodo getLdependentes() eu faço o select no banco e armazeno o ArrayList de Objetos Dependente nesta propriedade.
Aí eu uso esse bean para mostrar esses dependentes na tela e ao lado de cada nome tem um link pra fazer um delete deste dependente.

A construção do link para fazer o delete eh o seguinte:

<h:column>
   <f:facet name="header">
        <h:outputText  value="Delete"/>
   </f:facet>
<h:commandLink id="Delete"action="#dependente.deleteDependente}">
     <h:outputText value="Delete" />
     <f:param name="cod" value="#{dependente.cod}" />
</h:commandLink>
</h:column>

O bean que contem o ArrayList esta registrado no faces-config desta forma:

<managed-bean>
   <description>
       Bean de Listagem de Dependentes
    </description>
<managed-bean-name>listaDependentes</managed-bean-name>
<managed-bean-class>jsf.beans.ListaDependentes</managed-bean-class>
<managed-bean-scope>request</managed-bean-scope>
</managed-bean>

Aí quando eu clico no link Delete aparece a seguinte mensagem de erro em um dos logs do TOMCAT:

17/04/2006 14:16:53 com.sun.faces.el.impl.Coercions coerceToInteger
WARNING: An exception occured trying to convert String “ldependentes” to type “java.lang.Integer”
17/04/2006 14:16:53 com.sun.faces.el.impl.ArraySuffix evaluate
SEVERE: The “.” operator was supplied with an index value of type “java.lang.String” to be applied to a List or array, but that value cannot be converted to an integer.
17/04/2006 14:16:53 com.sun.faces.lifecycle.ApplyRequestValuesPhase execute
SEVERE: javax.faces.el.ReferenceSyntaxException: The “.” operator was supplied with an index value of type “java.lang.String” to be applied to a List or array, but that value cannot be converted to an integer.
javax.faces.el.EvaluationException: javax.faces.el.ReferenceSyntaxException: The “.” operator was supplied with an index value of type “java.lang.String” to be applied to a List or array, but that value cannot be converted to an integer.

Alguem teria alguma pista do que pode estar acontecendo

4 Respostas

afamorim

Coloque o codigo do Bean para poder ajudar.
:slight_smile:

T

Foi mal…segue o codigo do bean que contem o ArrayList

public class ListaDependentes implements Serializable
{

    private	Collection ldependentes;

	//public ListaDependentes(){ }

/*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*/
	public Collection getLdependentes()
    {

        Map sessao = null;
        //HttpServletRequest request = null;
        ArrayList depsaux = new ArrayList();

        sessao  = FacesContext.getCurrentInstance().getExternalContext().getSessionMap();
        //request = (HttpServletRequest) FacesContext.getCurrentInstance().getExternalContext().getRequest();
        depsaux = (ArrayList) sessao.get("listaDependentes");

        if (depsaux == null)
        {
          System.out.println("depsaux = null. Getter method");
          try
          {
             Dependentes dps = new Dependentes();
             depsaux = dps.listaDependentes();
             System.out.println("Gerou Listagem de Dependentes!!!");

          }
          catch(Exception ex)
          {
             System.out.println("Erro ao carregar a lista de dependentes. " + ex);
          }

        }

        this.setLdependentes(depsaux);

        sessao.put("listaDependentes",this.ldependentes);

        return this.ldependentes;
	}
/*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*/

	public void setLdependentes(Collection dps)
    {
		this.ldependentes = dps;
	}




}
afamorim

Aonde esta o metodo remover???

deixa eu falar como eu faço…

eu tenho um bean para uma determinada funcionalidade, tipo:
Cadastra, Alterar, Consultar Link, um bean que faz tudo isso.

o codigo do bean fica assim:

package com.vortice.seguranca.cliente.bean;

import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;
import javax.faces.model.DataModel;
import javax.faces.model.ListDataModel;

import org.apache.myfaces.custom.datascroller.ScrollerActionEvent;

import com.vortice.seguranca.abstracao.cliente.SegurancaDelegateIf;
import com.vortice.seguranca.abstracao.cliente.bean.SegurancaPageBean;
import com.vortice.seguranca.vo.LinkVO;

public class LinkBean extends SegurancaPageBean {
	
	private SegurancaDelegateIf delegate;
	
	private DataModel links;
	
	private LinkVO link;
	
	public LinkBean(){
		try{
			delegate = getDelegate();
			links = new ListDataModel();
			link = new LinkVO();
		}catch(Exception e){
			e.printStackTrace();
		}
	}
	
	public String salvar(){
		try{
			if (getLink().getCodigo() != null && getLink().getCodigo().intValue() > 0){
				delegate.update(link);
			}else{
				delegate.insert(link);
			}
			FacesMessage msgs = new FacesMessage("Resgistro Salvo com Sucesso.");
			FacesContext.getCurrentInstance().addMessage(null, msgs);
			return getSucesso();
		}catch(Exception e){
			FacesMessage msgs = new FacesMessage(FacesMessage.SEVERITY_ERROR, e.getMessage(), e.getMessage());
			FacesContext.getCurrentInstance().addMessage(null, msgs);
			return tratarExcecao(e);
		}
	}
	
	public String consultar(){
		LinkVO vo = new LinkVO();
		vo.setDescricao(getLink().getDescricao());
		vo.setUrl(getLink().getUrl());
		try{
			getLinks().setWrappedData(delegate.findByFilter(vo));
			return getSucesso();
		}catch(Exception e){
			FacesMessage msgs = new FacesMessage(FacesMessage.SEVERITY_ERROR, e.getMessage(), e.getMessage());
			FacesContext.getCurrentInstance().addMessage(null, msgs);
			return tratarExcecao(e);
		}
	}
	
	public String remover(){
		try{
			delegate.remove(getLink());
			FacesMessage msgs = new FacesMessage("Resgistro Removido com Sucesso.");
			FacesContext.getCurrentInstance().addMessage(null, msgs);
			return getSucesso();
		}catch(Exception e){
			FacesMessage msgs = new FacesMessage(FacesMessage.SEVERITY_ERROR, e.getMessage(), e.getMessage());
			FacesContext.getCurrentInstance().addMessage(null, msgs);
			return tratarExcecao(e);
		}
	}
	
	public String carregar(){
		try{
			link = delegate.findByPrimaryKey(getLink());
			return getSucesso();
		}catch(Exception e){
			FacesMessage msgs = new FacesMessage(FacesMessage.SEVERITY_ERROR, e.getMessage(), e.getMessage());
			FacesContext.getCurrentInstance().addMessage(null, msgs);
			return tratarExcecao(e);
		}
	}
	
	public void scrollerAction(ActionEvent event){
		/*System.out.println("VEIO NO ACTION");
        ScrollerActionEvent scrollerEvent = (ScrollerActionEvent) event;
        FacesContext.getCurrentInstance().getExternalContext().log("scrollerAction: facet: "
                                        + scrollerEvent.getScrollerfacet() + ", pageindex: " 
                                        + scrollerEvent.getPageIndex());*/
        this.consultar();
        
    }
	
	public DataModel getLinks() {
		return links;
	}

	public void setLinks(DataModel links) {
		this.links = links;
	}

	public LinkVO getLink() {
		return link;
	}

	public void setLink(LinkVO link) {
		this.link = link;
	}
}

assim fica o codigo para remover:

<t:commandLink action="#{LinkBean.remover}" title="#{properties['lb_remover']}" id="remover" immediate="true" onclick="setAcao(document.forms[0], 'Remove_Links');">
														<t:updateActionListener property="#{LinkBean.link.codigo}" value="#{links.codigo}" />
														<t:graphicImage align="center" value="/nucleo/images/delete.gif" border="0"/>
													</t:commandLink>

vale lembra que esse codigo esta dentro de um dataTable

A

Ola,

Você tem algum exemplo simples para implementar o paginator com richfaces… ou o scopo pelo menos?

Valeu

Criado 17 de abril de 2006
Ultima resposta 25 de jun. de 2008
Respostas 4
Participantes 3