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?