没有映射名称空间/控制器和操作名称的Action

时间:2014-12-10 07:01:57

标签: struts2 dao

我正在尝试学习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

&#13;
&#13;
<%@ 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;
&#13;
&#13;



registration.jsp

&#13;
&#13;
<%@ 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;
&#13;
&#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

&#13;
&#13;
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;
&#13;
&#13;


全部。

2 个答案:

答案 0 :(得分:0)

以下是你应该注意的要点,

  1. 如果您使用 TestBean 类作为数据载体,则必须实施 ModelDriven 接口。
  2. TestAction.java 应出现在&#34; 控制器&#34;包。
  3. 如果你想在 execute()方法中使用 HttpServletRequest和HttpServletResponse ,那么最简单的方法就是实现 ServletRequestAware ServletResponseAware 接口并实现各自的方法。
  4. 最重要的是,如果 success.jsp 位于 Web内容文件夹中,则无需指定

     <result name="SUCCESS">/success.jsp</result>
    
  5. 就像

    一样
     <result name="SUCCESS">success.jsp</result>
    

    如果你有任何文件夹,&#34; Folder1&#34;在Web Content中,然后指定

     <result name="SUCCESS">Folder1/success.jsp</result>
    

答案 1 :(得分:0)

  1. 此错误

      

    没有映射名称空间/控制器和操作名称

    的Action

    通常意味着Struts无法找到指定名称空间中指定的操作(在本例中为/controller)。在您的情况下BTW您没有在任何地方指定/controller并且错误消息中缺少操作名称,因此您的操作/ JSP /配置中的一堆其他错误可能会生成此错误

  2. 你还有两个错别字,阻止任何工作:

    • sturts-default代替struts-default

      <package name="default" extends="struts-default">
      
    • "SUCCESS"而不是"success",这是映射到您从Action方法返回的常量SUCCESS的结果。

          <result name="success">/success.jsp</result>
      
  3. 如果使用的Struts版本高于或等于2.1.3,you need the new filter, StrutsPrepareAndExecuteFilter instead of the deprecated FilterDispatcher;

  4. 操作方法必须是public String something(),不带参数。这个:

    public String execute(HttpServletRequest request , HttpServletResponse response)   throws Exception
    

    完全错了,应该是:

    public String execute(){}
    
  5. 下面

    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());
        // ...
    }
    
  6. 不相关,但Java命名约定对局部变量和实例属性使用小写名称。

    1. 在JSP页面中,您需要使用起始小写字符访问getter:

      <s:textfield name="Name" label="Name"/>
      

      必须是

      <s:textfield name="name" label="Name"/>
      

      等其他领域。此外,如果您指向像TestBean这样的对象,则需要执行以下操作:

      <s:textfield name="bean.name" label="Name"/>
      
    2. 这是主要的问题...... BTW考虑在读完一本书后开始编码,或者一些好的教程。在黑暗中开始,这不是正确的方式,恕我直言。