Mapeamento no Struts

Olá, estou com o seguinte problema.
Fiz o mapeamento do meu formulário certinho como manda a apostila da Caelum, mas ele esta dando esse erro:

No action instance for path /removeContato could be created… sendo que o formulário existe.

RemoveContatoForm.java

package br.com.caelum.struts.form;

import br.com.caelum.jdbc.Contato;
import org.apache.struts.action.ActionForm;

public class RemoveContatoForm extends ActionForm{
    private Contato contato = new Contato();

    public Contato getContato() {
        return contato;
    }
}

o mapeamento desse formulário:

<form-beans>
        <form-bean name="ContatoForm" type="br.com.caelum.struts.form.ContatoForm"/>
        <form-bean name="RemoveContatoForm" type="br.com.caelum.struts.form.RemoveContatoForm"/>
    </form-beans>

RemoveContatoAction.java

package br.com.caelum.struts.action;

import br.com.caelum.jdbc.Contato;
import br.com.caelum.jdbc.ContatoDAO;
import br.com.caelum.struts.form.RemoveContatoForm;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;

public class RemoveContatoAction extends Action {

    @Override
    public ActionForward execute(ActionMapping map, ActionForm form,
            HttpServletRequest arg2, HttpServletResponse arg3) throws Exception {
        System.out.println("Removendo contato...");
        RemoveContatoForm formulario = (RemoveContatoForm) form;
        Contato contato = formulario.getContato();
        ContatoDAO dao = new ContatoDAO();
        dao.remove(contato);
        return map.findForward("ok");
    }
}

o mapeamento dessa Action…

<action path="/removeContato" type="br.com.caelum.struts.action.RemoveContatoForm">
            <forward name="ok" path="/listaContatos.do"/>
        </action>

na lista estou fazendo assim:

<c:forEach var="contato" items="${contatos}">
            <li>
                ${contato.id}-${contato.nome}
                (<a href="removeContato.do?contato.id=${contato.id}">remover</a>)<br/>
            </li>
        </c:forEach>

o que há de errado então? Alguém poderia me ajudar…? :roll:

…isso aqui já foi um paraíso. :x

o mapeamento deve ser realizado para RemoveContatoAction e não para RemoveContatoForm

[]'s

[quote=mario.fts]o mapeamento deve ser realizado para RemoveContatoAction e não para RemoveContatoForm

[]'s[/quote]

… mapeamento resolvido…
agora o erro é esse:

HTTP Status 500 -

type Exception report

message

description The server encountered an internal error () that prevented it from fulfilling this request.

exception

javax.servlet.ServletException: java.lang.NullPointerException
	org.apache.struts.action.RequestProcessor.processException(RequestProcessor.java:535)
	org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:433)
	org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:236)
	org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196)
	org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:414)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:717)

root cause

java.lang.NullPointerException
	br.com.caelum.struts.action.RemoveContatoAction.execute(RemoveContatoAction.java:20)
	org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:431)
	org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:236)
	org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196)
	org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:414)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:717)

note The full stack trace of the root cause is available in the Apache Tomcat/6.0.18 logs.
Apache Tomcat/6.0.18

legal… resolvido, mario.fts. Apenas acrescentei isso ao mapeamento:

<action path="/removeContato" name=“RemoveContatoForm” type=“br.com.caelum.struts.action.RemoveContatoForm”>

… que beleza, agora está “funfando”.

Oi wswillianss,

Amigo me dê uma ajuda por favor, vi pelo exemplo que talvez eu esteja fazendo algo que você já fez.
Eu tenho um JSP com formulário que o campo vem de uma ActionForm passando por uma Action, onde teoricamente faria o popular de um ccombo.
Se você puder me ajudar agradecerei bastante, esse meu projeto está atrasado já… E eu já penei bastante tentando resolver.
Seguem meus códigos.

ActionForm

    private PedidoCompra pedidoCompra = new PedidoCompra();
    private String idFornecedor = "";
    private List<Fornecedor> listaFornecedores;

Action

        PedidoCompraForm formularioCompra = (PedidoCompraForm) form;

        FornecedorDAO listaFornecedores = new FornecedorDAO();
        //formularioCompra.setListaFornecedores(listaFornecedores);
        request.setAttribute("listaFornecedores", listaFornecedores.listaFornecedor());

        PedidoCompra compras = formularioCompra.getPedidoCompra();

        PedidoCompraDAO dao = new PedidoCompraDAO();
        dao.salvar(compras);

JSP

                  <html:select property="idFornecedor">
                    <option name="" value="">--- Selecione ---</option>
                    <!-- popula os valores da combo com a lista de fornecedores. -->
                    <html:optionsCollection property="listaFornecedores" value="codigo" label="nome" />
                  </html:select>

Erro

root cause

javax.servlet.ServletException: javax.servlet.jsp.JspException: Failed to obtain specified collection
	org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:852)

Qualquer ajuda é bem vinda.
Valeu.

Aonde estar seu getPedidoCompra no seu ActionForm?