struts2把Action配成login就报错,配成其他的就不会,这是为何?

jsp代码,就是在body上加个表单,表单内容如下:

<form action="login.action" method="post">
        <table>
            <tr>
                <td>用户名:</td>
                <td><input type="text" name="user.username"></td>
            </tr>
            <tr>
                <td>密码:</td>
                <td><input type="password" name="user.password"></td>
            </tr>
            <tr>
                <td><input type="reset" value="重填"></td>
                <td><input type="submit" value="登录"></td>
            </tr>
        </table>
    </form> 

然后是Action

 public class LoginAction extends ActionSupport
{
    /**
     * 
     */
    private static final long serialVersionUID = 1L;
    private User user;
    @Override
    public String execute() throws Exception 
    {
        if("zhangsan".equals(user.getUsername())&&"123".equals(user.getPassword()))
        {
            System.out.println("SUCCESS 结果");
            return SUCCESS;
        }

        else
        {
            System.out.println("error结果");
            return ERROR;
        }
    }

    public User getUser() {
        return user;
    }
    public void setUser(User user) {
        this.user = user;
    }   
}

再然后是struts2的XML文件:

 <?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="default" extends="struts-default">
        <action name="login" class="com.action.LoginAction">
            <result name="success">/success.jsp</result>
            <result name="error">/error.jsp</result>
        </action>
    </package>
</struts>   

最后是一个javabean

 public class User implements Serializable
{

    /**
     * 
     */
    private static final long serialVersionUID = 1L;

    private String username;
    private String password;

    public String getUsername() {
        return username;
    }
    public void setUsername(String username) {
        this.username = username;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }
}

error.jsp与success.jsp随便写就好,然后运行就一直报No result defined for action com.action.LoginAction and result 的错误,只要把struts.xml文件跟上面给出的jsp form里的login改成其他任意名字,例如:hhh之后,就正常运行不再报错。这是为何?求各位帮个忙解答下,感激不尽

9个回答

web.xml中struts配置的问题。祝好!

   <filter>
   <filter-name>struts2</filter-name>
   <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
  </filter>

  <filter-mapping>
   <filter-name>struts2</filter-name>
   <url-pattern>/*</url-pattern>
  </filter-mapping>
wojiushiwo945you
毕小宝 回复yu766588220: Ok,解决问题就好!祝好!
5 年多之前 回复
yu766588220
花公子丶 回复毕小宝: 感谢你,确实是没啥问题,而是包的问题。我把LoginAction放在com.action这个包下。如果把包名改成其他,立即就可以了。不过不知道这是为何?
5 年多之前 回复
wojiushiwo945you
毕小宝 回复yu766588220: 我发给你私信了。你看看。
5 年多之前 回复
yu766588220
花公子丶 回复毕小宝: 你好,能不能这样,你把你按我这个弄出来并且运行成功的那个项目发给我,这样可以吗?网盘分享之类的都可以。我想拿来对比下,看到底问题出在哪里
5 年多之前 回复
wojiushiwo945you
毕小宝 回复yu766588220: 是不是哪里还定义了其他的stuts配置为com.action.LoginAction的呢?ctrl+H全局找找看。
5 年多之前 回复
wojiushiwo945you
毕小宝 回复yu766588220: 你可以重新建一个空白工程把这几部分拷进去试试。你贴出来的这些代码没有问题。
5 年多之前 回复
wojiushiwo945you
毕小宝 回复yu766588220: 可是我把你的代码从头到尾拷贝之后加上上面的web.xml配置就成功了啊。
5 年多之前 回复
yu766588220
花公子丶 不行呢,还是同样的问题。我这个是配成login就不行,配成其他的就正常,不知道这个login到底是有什么冲突
5 年多之前 回复


你配置文件里默认的就是以[.action]结尾的;如果你想改结尾,你继续往后学就知道了;
所以你将login.action改成login试试。

如果回答对您有帮助,请采纳

yu766588220
花公子丶 这个我试过了。其实我以前搞过struts2的,就是太久没弄忘了。我这个问题就是跟login杠上了。我把login换成LoginAction,换成HHH或者其他的都行。就是用login就报错,不用login就一切正常。有点诡异。我的struts是直接myeclipse工具导入的,而不是手动导入
5 年多之前 回复

把web.xml里的*.action改成/*即可,真实体验

yu766588220
花公子丶 问题还是那样呢。不知道为何,就是跟login杠上了,只要把login换成其他,例如:LoginAction或者HH,或者aaa他都行,都运行正常,没啥问题,但是只要是login,立马报错。
5 年多之前 回复

在LoginAction类下的实例化User对象那里,private User user=new User(),然后在User类下添加一个无参构造方法,public User(){},这样试一下看行吗?

我理解错了,看你报的错误,貌似是因为没有为action和result定义一个result,可能是因为少添加了一个result,你试着在LoginAction类中的execute方法下添加一个return LOGIN,然后在struts.xml文件中的action下添加一行代码:/success.jsp试下,如果还不行可能是其它问题!

u012561176
茕夜 回复yu766588220: 你可以新疆一个空的Struts2的项目,在copy相应的代码,如毕小宝朋友跟你说的那样!
5 年多之前 回复
u012561176
茕夜 回复yu766588220: 可能是和别的项目里的action同名,然后出冲突了,你看看你开启Tomcat服务器的时候,有没有报错,估计应该有错,我也理解错了,初学者,不要介意!
5 年多之前 回复
yu766588220
花公子丶 虽然不知道你的思路是什么,也看着觉得不太行,不过还是死马当活马医的试了一下,不过还是不行哦。就像你楼上的毕小宝,他是直接拷贝我的这些代码,然后运行成功了。所以我这个login是不知道跟什么东西给冲突了。因为只要我不用login,把login改为其他,立马就成功了
5 年多之前 回复

在struts.xml配置文件添加大代码为:

 <result name="login">/sucess.jsp</result>

我也遇到过这种情况,你把这个jsp页面复制一个,然后删除这个,复制后的页面就可以正常运行了。经验


/WEB-INF/jsp/user/userlist.jsp


看看你action中的name加了没有?

yu766588220
花公子丶 您指的是这个?<struts> <package name="default" extends="struts-default"> <action name="login" class="com.action.LoginAction"> <result name="success">/success.jsp</result> <result name="error">/error.jsp</result> </action> </package> </struts>
5 年多之前 回复

问题已经解决,自己给个答案,这个问题主要是因为用了struts2.1所引起的。在2.1中有一个插件struts2-convention-plugin-2.1.8.jar,这个插件是2.1版本中新添加的默认核心包,这个插件是实现Struts2的零配置,但是这样问题就来了,如果引入就必须引入namespace命名空间,否则就会出现刚才的No result defined for action的异常。所以在struts.xml配置文件里,给package配置一个命名空间namespace=“/”即可。

a0b123456
shift-- 请问一下,怎么解释换个name就好使?其实使用“login”作为name打断点可以看到进去action了,但是不识别返回结果。
3 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐