我正在尝试学习Struts2,我使用了一个命中行动的视图页面,动作类正在使用一个bean,其中写入了getter setter方法,并且该动作也使用了写入连接的dao。我想要提到我正在使用jboss v5.0和eclipse,我已经添加了所有的jar文件。
现在,当我尝试运行此应用程序时,欢迎jsp页面正常点击,然后单击“提交”按钮,显示以下错误:
没有映射名称空间/控制器和操作名称
的Action我正在放置我的代码和目录结构。我已经尝试过使用namespace="/"
<result name="SUCCESS">/success.jsp</result>
,但它仍无效
passing
+JAX-WS Web Services
+Deployment Descriptor:Passing
-Java Resources
-src
-controller
-TestAction.java
-TestAction
-execute(HttpServletRequest request , HttpServletResponse response) : String
-model
-TestBean.java
-TestBean
-age
-ocation
-name
-getAge() :String
-getName() :String
-getLocation() :String
-setAge(String) : void
-setName(String) : void
-getlocation(String) : void
-UserDao.java
- UserDao
-Logincheck() :Connection
registration.jsp
的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>Passing</display-name>
<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>
<welcome-file-list>
<welcome-file>registration.jsp</welcome-file>
</welcome-file-list>
</web-app>
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="default" extends="sturts-default">
<action name="TestAction" class="controller.TestAction">
<result name="SUCCESS">/success.jsp</result>
</action>
</package>
</struts>
的success.jsp
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<!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>
<center> Welcome, Data successfully inserted</center>
</body>
</html>
&#13;
registration.jsp
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<%@ taglib uri="/struts-tags" prefix="s"/%>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<s:form action="TestAction" method="post" >
<s:textfield name="Name" label="Name"/>
<s:textfield name="Age" label="Age"/>
<s:textfield name="Location" label="Location"/>
<s:submit label="Submit"></s:submit>
</s:form>
</body>
</html>
&#13;
TestAction.java
package controller;
import java.sql.Connection;
import java.sql.PreparedStatement;
import com.opensymphony.xwork2.ActionSupport;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import model.TestBean;
import model.UserDao;
import org.apache.struts2.ServletActionContext;
public class TestAction extends ActionSupport{
public String execute(HttpServletRequest request , HttpServletResponse response) throws Exception
{
String Name = request.getParameter("Name");
String Age = request.getParameter("Age");
String Location = request.getParameter("Location");
TestBean bean = new TestBean();
bean.setName(Name);
bean.setAge(Age);
bean.setLocation(Location);
UserDao obj = new UserDao();
Connection x= obj.Logincheck();
if(x!=null)
{
PreparedStatement ps= x.prepareStatement("insert into Registration values(?,?,?)");
ps.setString(1, bean.getName());
ps.setString(2, bean.getAge());
ps.setString(3, bean.getLocation());
int i = ps.executeUpdate();
System.out.println("The value of i =" +i);
if(i>0)
{
return SUCCESS;
}
}
return null;
}
}
TestBean.java
package model;
public class TestBean {
String name;
String age;
String location;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
public String getLocation() {
return location;
}
public void setLocation(String location) {
this.location = location;
}
}
UserDao.java
package model;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
public class UserDao {
public Connection Logincheck()
{
Connection con=null;
try
{
try
{
Class.forName("oracle.jdbc.driver.OracleDriver");
}
catch(ClassNotFoundException e)
{
e.printStackTrace();
}
con= DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:XE", "username", "password");
if(con!=null)
{
return con;
}
}
catch(Exception e)
{
e.printStackTrace();
}
return null;
}
}
&#13;
全部。
答案 0 :(得分:0)
以下是你应该注意的要点,
最重要的是,如果 success.jsp 位于 Web内容文件夹中,则无需指定
<result name="SUCCESS">/success.jsp</result>
就像
一样 <result name="SUCCESS">success.jsp</result>
如果你有任何文件夹,&#34; Folder1&#34;在Web Content中,然后指定
<result name="SUCCESS">Folder1/success.jsp</result>
答案 1 :(得分:0)
此错误
没有映射名称空间/控制器和操作名称
的Action
通常意味着Struts无法找到指定名称空间中指定的操作(在本例中为/controller
)。在您的情况下BTW您没有在任何地方指定/controller
并且错误消息中缺少操作名称,因此您的操作/ JSP /配置中的一堆其他错误可能会生成此错误
你还有两个错别字,阻止任何工作:
sturts-default
代替struts-default
:
<package name="default" extends="struts-default">
"SUCCESS"
而不是"success"
,这是映射到您从Action方法返回的常量SUCCESS
的结果。
<result name="success">/success.jsp</result>
如果使用的Struts版本高于或等于2.1.3,you need the new filter, StrutsPrepareAndExecuteFilter
instead of the deprecated FilterDispatcher
;
操作方法必须是public String something()
,不带参数。这个:
public String execute(HttpServletRequest request , HttpServletResponse response) throws Exception
完全错了,应该是:
public String execute(){}
下面
String Name = request.getParameter("Name");
String Age = request.getParameter("Age");
String Location = request.getParameter("Location");
TestBean bean = new TestBean();
bean.setName(Name);
bean.setAge(Age);
bean.setLocation(Location);
你正在重新发明车轮非常。属性必须是私有的,在类级别,具有getter和setter,并且它们将被自动填充,而无需访问请求。在你的情况下:
private TestBean bean;
/* GETTER AND SETTER */
public String execute(){
System.out.println(bean.getName());
// ...
}
不相关,但Java命名约定对局部变量和实例属性使用小写名称。
在JSP页面中,您需要使用起始小写字符访问getter:
<s:textfield name="Name" label="Name"/>
必须是
<s:textfield name="name" label="Name"/>
等其他领域。此外,如果您指向像TestBean这样的对象,则需要执行以下操作:
<s:textfield name="bean.name" label="Name"/>
这是主要的问题...... BTW考虑在读完一本书后开始编码,或者一些好的教程。在黑暗中开始,这不是正确的方式,恕我直言。