Problemas com ActionForm - Struts + Hibernate Annotation

3 respostas
mcoelhao

Boa tarde pessoal,
Minha estreia aqui com dúvidas.
Estou montando um sistemas pequeno de controle de compras para aprender a usar o struts e estou tendo alguns problemas.
Tenho um formulário para o usuário cadastrar os dados da compra onde os campos vem do ActionForm, mas está dando erro. Vou postar os códigos:
novaCompra.jsp

<%@ taglib uri="http://struts.apache.org/tags-html" prefix="html" %>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
   "http://www.w3.org/TR/html4/loose.dtd">
   <html:html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>JSP Page</title>
    </head>
    <body>
        <html:errors />      
        <html:form action="/novaCompra" >
            Data Pedido:
            <html:text property="compras.dtPedido" />
            Nome Projeto:
            <html:select property="compra.projetoCodigo" name="PedidoCompraForm">
                <html:optionsCollection property="projeto" value="projeto_codigo" label="nome"/>
            </html:select>
            Despesas:
            <html:text property="valorTotal" name="compra"/>
            Formas de Pagamento:
            <html:radio property="compra.formaPagamentocodigo" value="A vista" />
            <html:radio property="compra.formaPagamentocodigo" value="Boleto" />
            <html:radio property="compra.formaPagamentocodigo" value="Faturado - 28 dias" />
            <html:radio property="compra.formaPagamentocodigo" value="Outro" /><html:text property="pgPagamentoOutro" />
            Fornecedor:
            <html:select property="compra.fornecedor">
                <html:optionsCollection property="fornecedor" value="empresa_codigo" label="nomeFantasia"/>
            </html:select>

AdicionaCompraAction.java

public ActionForward execute(ActionMapping mapping, ActionForm  form,
            HttpServletRequest request, HttpServletResponse response)
            throws Exception {
        //log
        System.out.println("Tentanto criar um novo pedido...");
        
        //formulário do pedido a partir do form
        PedidoCompraForm formulario = (PedidoCompraForm) form;
        
        //acessa o bean
        Pedidocompra compra = formulario.getPedidocompra();
        request.setAttribute("compras", formulario);
        
        //adiciona no banco
        PedidoCompraDAO dao = new PedidoCompraDAO();
        dao.salvar(compra);
        
        //ok... Visualizacao
        return mapping.findForward("ok");

PedidoCompraForm.java

public class PedidoCompraForm extends ActionForm {
    private static final long serialVersionUID = 6277201993742385240L;
        
    private Pedidocompra pedidocompra = new Pedidocompra();

    /**
     * 
     * @return 
     */
    public Date getDtPedido(){
        return this.pedidocompra.getDtPedido();
    }
    
    public Pedidocompra getPedidocompra() {
        return this.pedidocompra;
    }

struts-config.xml

<struts-config>
    <form-beans>
        <form-bean name="PedidoCompraForm" type="br.com.erpciriello.compras.struts.form.PedidoCompraForm">
            <form-property name="dtPedido" type="java.util.Date" />
        </form-bean>
    </form-beans>
    
    <global-exceptions>
    
    </global-exceptions>

    <global-forwards>
        <forward name="welcome"  path="/Welcome.do"/>
    </global-forwards>

    <action-mappings>
        <action path="/Welcome" forward="/welcomeStruts.jsp"/>
        <action path="/teste" type="br.com.erpciriello.compras.struts.action.TesteSimplesAction">
            <forward name="ok" path="/index.jsp"/>
        </action>
       <action path="/listaPedidos" type="br.com.erpciriello.compras.struts.action.ListaPedidoCompraAction">
            <forward name="lista" path="/listaPedidoCompra.jsp"/>
            <forward name="listavazia" path="/listaPedidoVazia.jsp"/>
        </action>
        <action path="/comprar" forward="/novaCompra.jsp">
        </action>
        <action path="/novaCompra" name="PedidoCompraForm"
            type="br.com.erpciriello.compras.struts.action.AdicionaCompraAction">
                <forward name="ok" path="/listaPedidos.do"/>
        </action>        
    </action-mappings>
    
    <controller processorClass="org.apache.struts.tiles.TilesRequestProcessor"/>

    <message-resources parameter="com/myapp/struts/ApplicationResource"/>

Erro:

org.apache.jasper.JasperException: An exception occurred processing JSP page /novaCompra.jsp at line 16

13:         <html:errors />      
14:         <html:form action="/novaCompra" >
15:             Data Pedido:
16:             <html:text property="compras.dtPedido" />
17:             Nome Projeto:
18:             <html:select property="compra.projetoCodigo" name="PedidoCompraForm">
19:                 <html:optionsCollection property="projeto" value="projeto_codigo" label="nome"/>

root cause

javax.servlet.jsp.JspException: No getter method for property: "compras.dtPedido" of bean: "br.com.erpciriello.compras.struts.form.PedidoCompraForm"

Qualquer ajuda agradeço.
Valeu.

3 Respostas

doug

Olá
Na seu ActionForm adicione o método reset, fica assim:

@Override
	public void reset(ActionMapping mapping, HttpServletRequest request) {
		super.reset(mapping, request);
		
		/* sua classe e suas classe internas deve ser inicializado, por exemplo no meu caso (Cliente e Endereco)
cliente = new Cliente();
		
		Endereco endereco = new Endereco();
		cliente.setEndereco(endereco);
	}

e na sua JSP como complemento das tag do struts adicione o name, conforme segue exemplo:

&lt;html:select property="compra.projetoCodigo" name="PedidoCompraForm"&gt;

Obs:. em todos as tags que for referenciar ao objeto do formulário (PedidoCompraForm) no seu caso.

Verifica se existe o getProjetoCodigo na classe Compra, blz

espero ter ajudado
flws

mcoelhao

Oi Thiago,

Não entendi a necessidade desse metodo, você pode me explicar?
Valeu…

ctrlaltleo

O Struts utiliza o método reset para evitar a instanciação de novos objetos, assim melhora o desempenho. é uma forma de reciclar seus formBeans.

Criado 2 de outubro de 2008
Ultima resposta 31 de jan. de 2012
Respostas 3
Participantes 3