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 は、プロパティ ファイルの getter メソッドを見つけようとすることを思い出してください。get+YourProperty()

getName()あなたの場合、利用できないアクションクラス内のメソッドを見つけようとします。

編集:

の URLhelloActionが正しくマッピングされていません。ブラウザでこれを実行してみてください。

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

あなたのプロジェクトのようになります

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

コードに2つの変更を加える必要があると思います

public class HelloWorldAction extends Action 

1 番目と 2 番目の、フォームから投稿へのアクションのユーザー 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 に答える