Struts 2 com annotation

1 resposta
filipeandrep

Prezados,

estou migrando para struts 2 com annotations e estou tendo alguns probleminhas… o mais chato é o da minha action não estar sendo localizada dando um erro de namespace. Estou enviando abaixo meus codigos com o erro gerado:

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
    <session-config>
        <session-timeout>
            30
        </session-timeout>
    </session-config>
    <welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
    </welcome-file-list>
    
    <filter>
        <filter-name>struts2</filter-name>
        <filter-class>
            org.apache.struts2.dispatcher.FilterDispatcher
        </filter-class>
        <init-param>
            <param-name>actionPackages</param-name>
            <param-value>br.gov.inca.rbtmo.action</param-value>
        </init-param>
    </filter>
    
    <filter-mapping>
        <filter-name>struts2</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
    <servlet>
        <servlet-name>dwr</servlet-name>
        <servlet-class>org.directwebremoting.servlet.DwrServlet</servlet-class>
        <init-param>
            <param-name>debug</param-name>
            <param-value>true</param-value>
        </init-param>
    </servlet>
    
    <servlet-mapping>
        <servlet-name>dwr</servlet-name>
        <url-pattern>/dwr/*</url-pattern>
    </servlet-mapping> 
    
</web-app>

struts.xml

&#65279;<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">

<struts>
    <constant name="struts.enable.DynamicMethodInvocation" value="true" />
    <constant name="struts.devMode" value="false" />
</struts>

Questionario (Action)

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.gov.inca.rbtmo.action;

import javax.servlet.http.HttpServletRequest;
import org.apache.struts2.ServletActionContext;
import org.apache.struts2.config.Result;

/**
 *
 * @author fpaes
 */
@Result(name = "success", value = "/questionario.jsp")
public class Questionario{

    private String quest;
    private int usuario;

    public String getQuest() {
        return quest;
    }

    public void setQuest(String quest) {
        this.quest = quest;
    }

    public int getUsuario() {
        return usuario;
    }

    public void setUsuario(int usuario) {
        this.usuario = usuario;
    }

    public String execute() throws Exception {
        /*ServletOutputStream out = null;
        HttpServletResponse response = ServletActionContext.getResponse();*/
        HttpServletRequest request = ServletActionContext.getRequest();
        
        //out = response.getOutputStream();
        return "success";
    }
}

erro:

Struts Problem Report

Struts has detected an unhandled exception:
# Messages: 	There is no Action mapped for namespace / and action name Questionario.
Stacktraces
There is no Action mapped for namespace / and action name Questionario. - [unknown location]

    com.opensymphony.xwork2.DefaultActionProxy.prepare(DefaultActionProxy.java:186)
    org.apache.struts2.impl.StrutsActionProxyFactory.createActionProxy(StrutsActionProxyFactory.java:41)
    org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:494)
    org.apache.struts2.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:419)
    org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215)
    org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
    org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
    org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:174)
    org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
    org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
    org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108)
    org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:151)
    org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:874)
    org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665)
    org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528)
    org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81)
    org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:689)
    java.lang.Thread.run(Thread.java:619)
    

You are seeing this page because development mode is enabled. Development mode, or devMode, enables extra debugging behaviors and reports to assist developers. To disable this mode, set:

  struts.devMode=false

in your WEB-INF/classes/struts.properties file.

o erro ocorre quando tento acessar: http://localhost:8080/minhaaplicacao/Questionario.action

desde já agradeço.

1 Resposta

filipeandrep

Galera,

já resolvi o problema… segue a solução:

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.gov.inca.rbtmo.action;

import com.opensymphony.xwork2.ActionSupport;
import org.apache.struts2.config.Result;
import org.apache.struts2.config.Results;

/**
 *
 * @author fpaes
 */
@Results({
    @Result(name = "success", value = "/index.jsp"),
    @Result(name = "questionario", value = "/questionario.jsp")
    }
)

public class Questionario extends ActionSupport{
    private static final long serialVersionUID = 1L;
    private String quest;
    private int usuario;

    public String getQuest() {
        return quest;
    }

    public void setQuest(String quest) {
        this.quest = quest;
    }

    public int getUsuario() {
        return usuario;
    }

    public void setUsuario(int usuario) {
        this.usuario = usuario;
    }

    public String gerarQuestionario(){
      
        return "questionario";
    }
    public String execute(){
      
        return "success";
    }
}

Para acessar o metodo execute não é necessário referenciar o metodo desejado na url, então fica desse jeito:

sintaxe:
http://://.action

ex.:

http://localhost:8080/minhaaplicacao/questionario.action

Para acessar outros metodos é necessário referencia-lo na url, então fica desse jeito:

sintaxe:
http://://!.action

ex.:

http://localhost:8080/minhaaplicacao/questionario!gerarQuestionario.action

Criado 17 de setembro de 2008
Ultima resposta 17 de set. de 2008
Respostas 1
Participantes 1