Struts 2 - Camada Service null

Pessoal;

Tenho minha action logo abaixo :

package action;

import org.apache.struts2.convention.annotation.Action;
import org.apache.struts2.convention.annotation.Namespace;
import org.apache.struts2.convention.annotation.Result;

import services.clienteService;
import domain.clienteDomain;


@Namespace(value = "/jsp/paginas")
public class cadastroAction {
	
	/*
	 * Variáveis.
	 */
	private String SUCCESS = "success";
	
	public clienteService service;
	
	public clienteDomain cliente;

	/*
	 * Salva os dados do formulário no banco.
	 */
	@Action(value = "cliente", results = @Result(name = "success", location = "/jsp/paginas/cadastroCliente.jsp"))
 	public String salvar() {
		service.salvar(cliente);
		return SUCCESS;
	}

	/*	 * Métodos getters e setters.
	 */
	/**
	 * @param cliente the cliente to set
	 */
	public final void setCliente(clienteDomain cliente) {
		this.cliente = cliente;
	}

	/**
	 * @param service the service to set
	 */
	public final void setService(clienteService service) {
		this.service = service;
	}
	
}

O que ocorre é o seguinte, minha variável service está como null sempre que dou um submit no formulário jsp.
Lembrando que a variável cliente está com todos os atributos preenchidos conforme informado no formulário jsp.

Estou trabalhando com camadas, este service é uma interface e possuo uma classe que implementa ela.

Algiuém tem alguma idéia do que pode estar ocorrendo ?

Obrigado.

Boa noite lucas.

Retire:

[code]
/**
* @param service the service to set
*/
public final void setService(clienteService service) {
this.service = service;
}

[code]

e verifique se o nullpointer está no service ou no salvar.

Até mais.

[quote=edysnipes]Boa noite lucas.

Retire:

[code]
/**
* @param service the service to set
*/
public final void setService(clienteService service) {
this.service = service;
}

[code]

e verifique se o nullpointer está no service ou no salvar.

Até mais.[/quote]

PS: Implemente o ActionSuport em suas Action. Existem vários benefícios como por exemplo tipos de retorno SUCESS, ERROR, INPUT, etc.

[quote=edysnipes][quote=edysnipes]Boa noite lucas.

Retire:

[code]
/**
* @param service the service to set
*/
public final void setService(clienteService service) {
this.service = service;
}

[code]

e verifique se o nullpointer está no service ou no salvar.

Até mais.[/quote]

PS: Implemente o ActionSuport em suas Action. Existem vários benefícios como por exemplo tipos de retorno SUCESS, ERROR, INPUT, etc.[/quote]

A vantagem do strtus 2 é justamente não precisar desse implements…

Quanto ao teu problema, lucas_duzo, fiquei curioso por utilizar o final nos setters.
Até onde sei, a especificação javaBeans (que é incorporada pelo Struts 2), não necessita desse modificador.

Boa tarde.

Valeu pela dica machado.

Mas gostaria que você explicasse os prós e contras do uso do ActionSuport.

Como você seta as mensagens do antigo addActionError() por exemplo?

Abrigado.

[quote=drsmachado][quote=edysnipes][quote=edysnipes]Boa noite lucas.

Retire:

[code]
/**
* @param service the service to set
*/
public final void setService(clienteService service) {
this.service = service;
}

[code]

e verifique se o nullpointer está no service ou no salvar.

Até mais.[/quote]

PS: Implemente o ActionSuport em suas Action. Existem vários benefícios como por exemplo tipos de retorno SUCESS, ERROR, INPUT, etc.[/quote]

A vantagem do strtus 2 é justamente não precisar desse implements…

Quanto ao teu problema, lucas_duzo, fiquei curioso por utilizar o final nos setters.
Até onde sei, a especificação javaBeans (que é incorporada pelo Struts 2), não necessita desse modificador.[/quote]

Bom dia Machado;

Retirei o “final” dos setters, porém continuo com o mesmo problema, meu domain está perfeito, porém o service não !!!
=/

Segui o link http://vonjuliano.wordpress.com/2010/12/07/trabalhando-com-struts-2-de-forma-simples/ para entender um pouco mais struts2…

Obrigado

public clienteService service;   
       
    public clienteDomain cliente;   
  
    /*  
     * Salva os dados do formulário no banco.  
     */   
    @Action(value = "cliente", results = @Result(name = "success", location = "/jsp/paginas/cadastroCliente.jsp"))   
    public String salvar() {   
        service.salvar(cliente);   
        return SUCCESS;   
    }   

Pois bem…
O trecho acima é do teu código. Em momento algum você instancia teu service e, a não ser que esteja trabalhando com Spring Framework para fazer a injeção do mesmo, você precisaria fazer um

service = new ClienteService();

Veja que aqui, neste exemplo, ele tem o dao e, no construtor da Action, ele instancia o mesmo:

    public CarroAction() {  

        this.dao = new JdbcCarroDao();  

    }  

Sem que você instancie, ele nunca terá valor, será sempre null.

Ao que me parece, você apenas modificou a estrutura, adicionou um service, baseado na última parte do exemplo.