Struts2框架提示 No result defined for action and result fail

当时我正在学习Struts2的使用,当时就是用Struts2框架写一个登录的功能,按照网上的教程一步一步的操作,终于全部步骤都弄好了,见证奇迹的时刻要来了,可是当我填写完用户名和密码之后,点击登录,却出现上面的那个图,这让我很失望啊,而且就是这个错误,花了我一个晚上才弄明白了。

实际上,是有两个错误在里面的。

  1. 在struts.xml配置文件中,action的值,我当时写是action=“login”,如下所示:
    <?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>
        <package name="struts2" extends="struts-default">
            <action name="login" class="com.test.action.LoginAction">
                <result name="success">/success.jsp</result>
                <result name="fail">/fail.jsp</result>
            </action>
        </package>
    </struts>    

    网上找了各种方法都没解决,最后才知道,实际上,login是struts里的一个保留字,不能使用,因此换一个就好了,我就换成action=“userlogin”,果然就好使了,这都是经验不够丰富啊。当然可能有其他的人也会碰到这个问题,但原因不一定跟我相同,有的网友说要在action标签里加上namespace=“/”,这个方法也是这种问题的一个解决方法吧,只不过我遇到的不是这种情况。

  2. action类里的字段的值都为null。诶,出现这个问题也是怪我自己太不小心了,是我在写username字段的get方法时把getUsername写成了getUesrname,真是粗心啊。我开始还在怀疑是不是Struts2框架在数据封装上出现问题了,所以就一直找Struts是如何进行数据封装的相关问题,但最终也没找原因,不过这也没白费功夫,这让我了解到了Struts2的数据封装有好几种方式,而不仅仅是我所知道的属性驱动方式,同时也知道了虽然Struts2框架中,action只是普通的java类,并不强制要求实现Action接口或继承ActionSupport类,但是继承ActionSupport类可以方便我们的action开发,它可以对表单数据进行数据校验(重写validate()方法)和校验信信息国际化(getText()方法)。更详细的请参考博文Struts2 继承ActionSupport的用处
posted @ 2017-06-17 23:28  胡小白  阅读(10199)  评论(0编辑  收藏  举报