今天想尝试下Struts2的注解方式在web.xml里修改了原来的Filter 
<filter>
  <filter-name>struts2</filter-name>
  <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
  
  <init-param>
<param-name>actionPackages</param-name>
<param-value>manning.chapterTwo</param-value>
</init-param>
</filter>然后在包manning.chapterTwo下面添加一个Action,代码如下:
package manning.chapterTwo;import org.apache.struts2.convention.annotation.Result;
import com.opensymphony.xwork2.ActionSupport;@Result(name="success",location="login.jsp")public class AnnotationAction extends ActionSupport {
 
/**
 * 
 */
private static final long serialVersionUID = 2296720831644414741L;
public String execute()
{

return "success";
}}启动,访问http://127.0.0.1:8888/Struts/annotationAction.action                 Struts是工程名提示说找不到action
是我少配什么东西了么?

解决方案 »

  1.   

    Struts 版本是最新的2.3.3  
      

  2.   

    是否使用了spring ?启用注解需要在配置文件中声明这两个东西
         <!-- 用注解方式注入bean -->
        <context:annotation-config/>
        
        <!-- 扫描包路径 -->   
        <context:component-scan base-package="com"/>
      

  3.   


    没用Spring,也许哟啊加这些么?
      

  4.   

    /**
     * @author haigejiang
     *
     */
    @ParentPackage(value="default")//命名空间默认default
    @Action//表明是一个Action
    @Results(value={
    @Result(name="addsuccess",location="subject!addsuccess.action",type="redirectAction"),
    @Result(name="success",location="/WEB-INF/page/add_success.jsp"),
    @Result(name="index",location="/WEB-INF/page/index.jsp"),
    @Result(name="toadd",location="/WEB-INF/page/add.jsp"),
    @Result(name="tovote",location="/WEB-INF/page/vote.jsp")
    })public class SubjectAction extends BaseAction{
      

  5.   

    web.xml
    <filter>
      <filter-name>struts2</filter-name>
      <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
      
      <init-param>
    <param-name>actionPackages</param-name>
    <param-value>manning.chapterTwo</param-value>
    </init-param>
    </filter><filter-mapping>
      <filter-name>struts2</filter-name>
       <url-pattern>/*</url-pattern>
    </filter-mapping>
    试了半天都没效果....
    package manning.chapterTwo;import org.apache.struts2.convention.annotation.Action;
    import org.apache.struts2.convention.annotation.ParentPackage;
    import org.apache.struts2.convention.annotation.Result;
    import com.opensymphony.xwork2.ActionSupport;@ParentPackage(value="manning.chapterTwo")
    @Action
    @Result(name="success",location="login.jsp")public class AnnotationAction extends ActionSupport {
     
    /**
     * 
     */
    private static final long serialVersionUID = 2296720831644414741L;
    public String execute()
    {

    return "success";
    }}struts.properties
    struts.devMode=false
    struts.enable.DynamicMethodInvocation=true
    struts.i18n.reload=true
    struts.ui.theme=simplestruts.locale=zh_CN
    struts.i18n.encoding=GBKstruts.serve.static.browserCache=false
    struts.url.includeParams=none
      

  6.   

    访问地址是:http://127.0.0.1:8888/Struts/annotationAction.action
      

  7.   

    我还是有配置文件的,只是少了action的节点<?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE struts PUBLIC 
    "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN"
    "http://struts.apache.org/dtds/struts-2.1.dtd">

    <struts>


    <constant name="struts.devMode" value="true" />
    <constant name="struts.i18n.encoding" value="UTF-8" />
    <constant name="struts.custom.i18n.resources" value="messages" />
    <!-- 配置默认的Action -->
     
    <package name="default" namespace="/" extends="struts-default">

    <interceptors>
    <!-- 定义权限验证拦截器 -->
    <interceptor name="AuthInterceptor" class="cn.jbit.votingsystem.interceptor.AuthInterceptor"/>



    <!-- 自定义连接器栈-->
    <interceptor-stack name="myStack">
    <interceptor-ref name="defaultStack"/>
    <interceptor-ref name="AuthInterceptor"/>

    </interceptor-stack>
    </interceptors>

    <!-- 使用拦截器栈 -->
       <default-interceptor-ref name="myStack"/>
       
       <global-results>
    <result name="error" >/WEB-INF/page/error.jsp</result>
    <result name="login">/WEB-INF/page/login.jsp</result>
    </global-results>





    </package>

    </struts>
    然后Acton里面才是这样写的
    /**
     * @author haigejiang
     *
     */
    @ParentPackage(value="default")//命名空间默认default
    @Action//表明是一个Action
    @Results(value={
    @Result(name="addsuccess",location="subject!addsuccess.action",type="redirectAction"),
    @Result(name="success",location="/WEB-INF/page/add_success.jsp"),
    @Result(name="index",location="/WEB-INF/page/index.jsp"),
    @Result(name="toadd",location="/WEB-INF/page/add.jsp"),
    @Result(name="tovote",location="/WEB-INF/page/vote.jsp")
    })public class SubjectAction extends BaseAction{
      

  8.   

    我回复自己怎么没看见呢?我估计还是得配置struts.xml文件
      

  9.   

    http://127.0.0.1:8888/Struts/annotationAction.action访问地址应该是:http://127.0.0.1:8888/Struts/annotation.action
      

  10.   

    你的ACTION访问路径错了,应该是
    http://127.0.0.1:8888/Struts/annotation.action约定的规则是:如果是已Action结尾要去掉Action,以大小写为单词分隔,以“-”符号分割。
    我的项目里有个ACTION的命名是WsThreadInfoAction,访问它的链接就是ws-thread-info.action
      

  11.   

    刚才又试了一下,放在默认的package下面就没事
    新建一个package就不行了struts.xml文件如下
    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
    "http://struts.apache.org/dtds/struts-2.0.dtd">
    <struts> <package name="armeng" namespace="/" extends="struts-default">

      <action name="submit"   class="action.MoreSubmitAction">
    <result name="save">/result.jsp</result>
    <result name="print">/result.jsp</result>
    </action>
    <action name="login">
    <result>/login.jsp</result>
    </action> <action name="userLogin" class="action.LoginAction">
                    <result name="success" type="freeer">
                        /WEB-INF/templates/user.ftl
                    </result>
                    <result name="jspsuccess" >
                        /loginsuccess.jsp
                    </result>
            </action>
            

    </package>

    <package name="haha" namespace="/zero" extends="struts-default">
    <action name="sum" class="test.FirstAction">
    <result name="positive">/positive.jsp</result>
    <result name="negative">/negative.jsp</result>
    </action>

    </package>

    </struts>
    test.FirstAction是用来验证package生效的Action,可以运行web.xml<filter>
      <filter-name>struts2</filter-name>
      <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
      
      <init-param>
    <param-name>actionPackages</param-name>
    <param-value>haha</param-value>
    </init-param>
    </filter>Action类
    package test;import org.apache.struts2.convention.annotation.Action;
    import org.apache.struts2.convention.annotation.ParentPackage;
    import org.apache.struts2.convention.annotation.Result;
    import com.opensymphony.xwork2.ActionSupport;@ParentPackage(value="haha")
    @Result(name="success",location="/login.jsp")public class AnnotationAction extends ActionSupport {
     
    /**
     * 
     */
    private static final long serialVersionUID = 2296720831644414741L;
    public String execute()
    {

    return "success";
    }}访问链接
    http://127.0.0.1:8888/Struts/annotation.action
      

  12.   

    现在已经正常了。配置如下:AnnotationAction在test这个包下面
    web.xml<filter>
      <filter-name>struts2</filter-name>
      <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
      
      <init-param>
    <param-name>actionPackages</param-name>
    <param-value>test</param-value>
    </init-param>
    </filter><filter-mapping>
      <filter-name>struts2</filter-name>
       <url-pattern>/*</url-pattern>
    </filter-mapping>struts.xml
    <constant name="struts.convention.package.locators" value="test,action" />
      

  13.   

    因为csdn禁止连续回复3次,所以找朋友帮忙回复了一下。