Struts 2 sem XML

11 respostas
D

Opa galera blz?

Então, encontrei na net aqui há uma informação dizendo que dá para rodar o Struts 2 sem o arquivo xml no caso o Struts.xml, fiz como está no tutorial que encontrei, mais quando eu tento executar a action que não está mais mapeada por xml e sim diretamente dentro da classe, da a mensagem de erro dizendo que a action não está mapeada, estou usando somente os jars mostrado no tutorial mas não funfa.

O link do tutorial é [url]http://vonjuliano.wordpress.com/2010/12/07/trabalhando-com-struts-2-de-forma-simples/[/url]

abaixo minha Action:

package com.br.ACTIONS.relatorios;

import DAO.RelatoriosDAO;

import java.sql.ResultSet;
import java.util.HashMap;
import java.util.Map;
import java.util.logging.Level;
import java.util.logging.Logger;

import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JRResultSetDataSource;
import net.sf.jasperreports.engine.JasperCompileManager;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.JasperReport;
import net.sf.jasperreports.view.JasperViewer;

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

@Namespace(value = "/com.br.ACTIONS.relatorios")
public class RelatoriosAction {
    private RelatoriosDAO relD;
    
    public RelatoriosAction(){
        relD = new RelatoriosDAO();
    }
    
    @Action(value = "clientePorProdutos", results = @Result(name = "success", location = "/index.jsp"))
    public String clientePorProdutos(){
        try {
            Map parameters = new HashMap();

            ResultSet rs = relD.clientesPorProduto();
            JasperReport jasperReport = JasperCompileManager.compileReport("C:\\Users\\caltech\\Documents\\NetbeansProjects\\SiteClass\\arquivos\\reports\\produtosPorCliente.jrxml");
            JasperPrint jasperPr = JasperFillManager.fillReport(jasperReport, parameters,new JRResultSetDataSource(rs));

            JasperViewer viewer = new JasperViewer(jasperPr, false);
            viewer.setExtendedState(JasperViewer.MAXIMIZED_BOTH);//maximizado
            viewer.setTitle("Clientes por Produto");//titulo do relatório
            viewer.setVisible(true);
        } catch (JRException ex) {
            Logger.getLogger(RelatoriosAction.class.getName()).log(Level.SEVERE, null, ex);
        }
        return "success";
    }
}

Se eu mapear essa mesma Action por XML ela funciona, mais sem o XML não, alguém sabe me dizer o pode estar errado nesse meu mapeamento sem XML?

11 Respostas

von.juliano

Dibilou, o seu problema está nessa linha:

@Namespace(value = "/com.br.ACTIONS.relatorios")Aqui você não se refere ao seu pacote, deve ser usada para se referir em qual divisão do seu sistema você está. Por exemplo http://localhost:8080/sistema/relatorios/listar. Mude para @Namespace(value = “/relatorios”) e você vai conseguir acessar com uma url semelhante a essa que mostrei.

Blz? Flw! :thumbup:

D

Vish ainda não reconheceu, mudei o @NameSpaced para /relatorios e acessei da forma que vc falou http://localhost:8084/SiteClass/relatorios/clientePorProdutos
mais ainda deu o erro HTTP Status 404 - There is no Action mapped for namespace /relatorios and action name clientePorProdutos.

O arquivo Struts.xml ainda continua no meu projeto pq minhas outras actions estão mapeadas dentro dele, estou testando esse outro método de mapear as actions, será que a existencia do Struts.xml é que esta fazendo o erro aconter?

D

Removi o arquivo Struts.xml para testar se era ele que esta causando o problema mais não era, a action não foi encontrada do mesmo jeito.

von.juliano

Apesar de usar o xml apenas para outras configurações, como integrar com Spring, creio que não haja problema usá-lo em conjunto com as anotações. Mas é estranho, eu tenho projetos aqui nesse exato formato, não consigo ver alguma diferença.
Vou subir essa classe aqui pra ver o que acontece. :smiley:

D

Acho que a unica explicação do mapeamento não estar funcionando dessa forma, é pq o Jar “struts2-convention-plugin-2.2.3” deve estar em conflito com algum outro Jar do meu projeto.

Ou a versão dos Jar que estou usando usando é que estão causando o problema.

saoj

Struts2 sem o XML mas cheio de annotations? Dá uma lida nesse comparativo: http://forum.mentaframework.org/posts/list/1112.page

von.juliano

Oi Sérgio,

O Struts 2 é sem dúvida uma ferramenta pouco eficiente perto de muitas outras. O problema é quando não temos a opção de trocá-la, foi por isso que escrevi o post - já que tenho que usá-lo, que seja de uma forma simplificada. No caso da validação por exemplo, eu uso Bean Validation, simplesmente porque não dá pra trabalhar com as ferramentas de validação que o Struts 2 fornece.

Flw! :thumbup:

von.juliano

@Dibilou

Joguei a Action que você postou em um projeto aqui (no próprio struts2simples) e funcionou normalmente. Estou com o struts2-convention-plugin-2.2.1.jar, e acho dificil de ser um problema que surgiu dessa versão para a 2.2.3.

Faça um teste, coloque essa action em um projeto separado. Possivelmente, é alguma configuração nesse projeto que já usa xml que está conflitando (talvez no web.xml).

Flw! :thumbup:

D

É em um projeto separado funcionou, vou tentar descobrir o esta causando esse conflito.

Obrigado von.juliano

Abraço a todos.

T

Boa tarde!

Meu nome é Thalita Fabres, sou Analista de RH da Consuloria Grupo Let. Atualmente estamos com uma oportunidade de Java em aberto e gostaria de divulgá-la aqui com vocês.

Segue:

Programador Java Pleno

Forma de contratação: PJ
Formação: Superior completo em T.I, Informática ou áreas afins.
Cetificações serão um diferencial
Experiência: Sólida vivêcia em desenvolvimento de aplicações Web e integração de sistemas, ambos voltados para grandes números de usuários.
Experiência em aplições para RH será um diferencial
Conhecimentos necessários: JAVA, JAVA para Web, SQL e Banco de dados SQL, HTML, dentre outros.
Salário: R$6.500,00
Local de trabalho: Centro do Rio (RJ)
Horário: 9hs ás 18hs - segunda a sexta

OS CANDIDATOS INTERESSADOS QUE ESTIVEREM DENTRO DO PERFIL DEVEM ENCAMINHAR O CURRÍCULO PARA [email removido]/ COLOCANDO NO ASSUNTO O NOME DA VAGA.

Agradeço a atenção de todos e peço desculpas pelo incomodo.
Att,

Thalita

Marcio_Nogueira

Coloque uma / na frente do nome de sua action.

Criado 5 de outubro de 2011
Ultima resposta 5 de out. de 2011
Respostas 11
Participantes 5