3

我是 Struts2 的新手,并在 struts 中创建了一个简单的 HelloWorld 应用程序,但问题是当我单击提交按钮时没有调用我的操作类,控制台上也没有任何异常。这是我的代码,

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_3_0.xsd" 
id="WebApp_ID" version="3.0">

  <welcome-file-list>
      <welcome-file>index.jsp</welcome-file>
   </welcome-file-list>
    <filter>
        <filter-name>struts2</filter-name>
        <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
    </filter>

    <filter-mapping>
        <filter-name>struts2</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
</web-app>

struts.xml

<?xml version="1.0" encoding="UTF-8"?>

<struts>
    <constant name="struts.enable.DynamicMethodInvocation"
        value="false" />
    <constant name="struts.devMode" value="true" />

    <package name="default" extends="struts-default" namespace="/">
        <action name="helloAction"
            class="com.tutorial.struts2.HelloWorldAction">
            <result name="success">helloworld.jsp</result>
        </action>
    </package>
</struts>

index.jsp

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
    <h1>Welcome to Struts</h1>
     <form action="/helloAction">
      <label for="name">Please enter your name</label><br/>
      <input type="text" name="userName"/>
      <input type="submit" value="Say Hello"/>
   </form>
   </body>
</html>

HelloWorldAction

package com.tutorial.struts2;


public class HelloWorldAction {

    public String userName;

    public String execute() throws Exception{
        System.out.println(userName);
        return "success";
    }

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }
}

helloworld.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">
<%@ taglib prefix="s" uri="/struts-tags" %>

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
     Hello World, <s:property value="userName"/>

</body>
</html>
4

5 回答 5

2

helloworld.jsp

<s:property value="name"/>

财产在哪里name??您在哪个行动类别中声明了name财产?

它应该是 <s:property value="userName"/>

请记住,struts 会尝试通过将get+YourProperty()

在您的情况下,它会尝试找出getName()您的操作类中不可用的方法。

编辑:

您的 urlhelloAction未正确映射尝试在浏览器中运行它,

http://yourIp:port/yourApplicationName/yourNameSpace/yourAction

这将成为您的项目

http://yourIp:8080/HelloWorldStruts/testNameSp/helloAction
于 2012-10-17T06:58:41.503 回答
2

我认为您需要对代码进行两次更改

public class HelloWorldAction extends Action 

是第一个和第二个,用户 struts 属性用于表单发布操作

<s:form action="helloAction">

希望能帮到你。

于 2012-12-21T07:21:53.060 回答
0

Action你应该在你的动作类中扩展:

public class HelloWorldAction extends Action {
于 2012-10-17T06:02:08.113 回答
0

尝试通过扩展com.opensymphony.xwork2.ActionSupport类并覆盖这样的执行方法

import com.opensymphony.xwork2.ActionSupport;

public class HelloWorldAction extends ActionSupport{

    public String execute() {
        System.out.println(userName);
        return "success";
    }


}
于 2012-10-17T06:22:08.863 回答
0

当心:它适用于 Struts 1

我有同样的问题,但我已经通过删除forward属性解决了我的问题action-mappings

这个是对的:

<action-mappings>
    <action input="/user_list.jsp" name="UserAddFormBean" path="/userAdd" 
            scope="request" 
            type="com.minetronics.struts.UserAdd" validate="true" forward="/user_add.jsp">
            <forward name="success" path="/user_add.jsp"/>
    </action>
</action-mappings>

但这将跳过调用execute并直接转到forward

<action-mappings>
    <action input="/user_list.jsp" name="UserAddFormBean" path="/userAdd" 
            scope="request" 
            type="com.minetronics.struts.UserAdd" validate="true">
            <forward name="success" path="/user_add.jsp"/>
    </action>
</action-mappings>
于 2013-06-27T14:57:17.393 回答