struts2的一个问题

wjjxqld 2008-11-26 06:27:48
我用struct2.0做了一个简单的登录例子,但是在进行页面提交的时候却出现了一个错误:无法找到命名空间:
There is no Action mapped for namespace / and action name login. - [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:497)
org.apache.struts2.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:421)

以下是我的配置:
struts2.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Fountaction//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<package name="com" namespace="/" extends="struts-default">
<action name="login" class="com.LoginAction">

<result name="success">/success.jsp</result>
<result name="error">/error.jsp</result>
</action>
</package>
</struts>

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
<display-name>struts</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
<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>

</web-app>

index.jsp

<%@ page language="java" contentType="text/html; charset=GBK"
pageEncoding="GBK"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<s:form action="login.action" method="post">
<s:textfield name="user.name" label="用户名"/>
<s:password name="user.password" label="密码"/>
<s:submit value="登录"/>
</s:form>
</body>
</html>


succes.jsp
<%@ page language="java" contentType="text/html; charset=GBK"
pageEncoding="GBK"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<s:form action="login.action" method="post">
<s:textfield name="user.name" label="用户名"/>
<s:password name="user.password" label="密码"/>
<s:submit value="登录"/>
</s:form>
</body>
</html>



src下有个名为com的包,2个类,一个LoginAction,一个userBean

LoginAction

package com;

import com.opensymphony.xwork2.ActionSupport;

public class LoginAction extends ActionSupport
{

/**
* serialVersionUID:long
*/
private static final long serialVersionUID = 1L;
private String msg;
private UserBean user;
@Override
public String execute() throws Exception {

if(user.getName().equals("admin")&& user.getPassword().equals("123")){
msg = "欢迎光临:"+user.getName();
return SUCCESS;
}else{
msg="Invidate name or password";
return ERROR;
}

}

public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
public UserBean getUser() {
return user;
}
public void setUser(UserBean user) {
this.user = user;
}


}


userBean

package com;

public class UserBean
{
private String name;

private String password;

public String getName()
{
return name;
}
public void setName(String name)
{
this.name = name;
}
public String getPassword()
{
return password;
}
public void setPassword(String password)
{
this.password = password;
}

}

请高手指教
...全文
117 点赞 收藏 10
写回复
10 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
yulu0214 2008-11-27
struts2 会自动帮你截取namespace,截取规则 /工程名/text/**.action, namespace为“/text”,
搂住可以检查下自己传过去的namespace 是不是“/”
所以搂住可以把namespace="/",去掉试试,这样它的namespace就为默认的了.
回复
无悔克难 2008-11-27
去掉namespace="/" 这个属性配置,或者namespace="/xxx" <s:form action="login.action" namespace="/xxx" method="post">
回复
然月枕流君 2008-11-27
楼主,你的项目,我测试过了,改两个地方,以及改一下细节问题;

index.jsp :

<s:form action="login" method="post">
<s:textfield name="user.name" label="用户名"/>
<s:password name="user.password" label="密码"/>
<s:submit value="登录"/>
</s:form>



struts2.xml
<struts>
<package name="com" extends="struts-default">
<action name="login" class="com.LoginAction">

<result name="success">/success.jsp </result>
<result name="error">/error.jsp </result>
</action>
</package>
</struts>



然后我说下你细节的问题;
<result name="success">/success.jsp </result>
返回的界面是:success.jsp;
可是你写的jsp的名字是succes.jsp;兄弟差一个字母呢~他能找到才怪;
再有,你的succes.jsp和index.jsp ,怎么写成同样的代码;
把succes.jsp内容改下,之后就能过了,我运行过,能过,不就是类型转换嘛~~呵呵,以后注意细节
回复
阳台的狗狗 2008-11-27
另外你还少拉你的运行uri是什么?
回复
wjjxqld 2008-11-27
3楼与6楼的方法都试过了,可是还是不行,郁闷了,这难道是传说中的RPWT?
回复
null1null 2008-11-27
[Quote=引用 3 楼 zidasine 的回复:]
你定义了包命名空间 <package name="com" namespace="/" extends="struts-default">
那你的form里的action就要带上这个namespace 如果不带他就到默认的包去找当然找不到
改成
<s:form action="/login.action" method="post">
<s:textfield name="user.name" label="用户名"/>
<s:password name="user.password" label="密码"/>
<s:submit value="登录"/>
</s:form>
[/Quote]正解
回复
scorpionqxq 2008-11-26
对struts2的这个命名空间,还是搞不明白
1.<package name="/" namespace="/" extends="struts-default"> 这样写对么?
对的话,是不是在默认空间匹配,即http://localhost:8080/myproject/ 这一级找?
2.<package name="com" namespace="/" extends="struts-default"> 这样写的话,
是不是在com空间匹配,即http://localhost:8080/myproject/com/ 这一级找?
回复
zidasine 2008-11-26
你定义了包命名空间<package name="com" namespace="/" extends="struts-default">
那你的form里的action就要带上这个namespace 如果不带他就到默认的包去找当然找不到
改成
<s:form action="/login.action" method="post">
<s:textfield name="user.name" label="用户名"/>
<s:password name="user.password" label="密码"/>
<s:submit value="登录"/>
</s:form>
回复
时光瞄 2008-11-26
当你的表单用的是Struts2的HTML标签时,
<s:form action="login.action" method="post">
<s:textfield name="user.name" label="用户名"/>
<s:password name="user.password" label="密码"/>
<s:submit value="登录"/>
</s:form>

把action里面的.action去掉就可以了,struts的标签能自动识别,所以这样写就可以了..,
回复
wjjxqld 2008-11-26
恳请帮忙
回复
相关推荐
发帖
Java EE
创建于2007-09-28

6.7w+

社区成员

J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
申请成为版主
帖子事件
创建了帖子
2008-11-26 06:27
社区公告
暂无公告