1

Struts と Struts 2.x を使用しています。Struts 2 フォームからアクション クラスへのリクエストを作成しようとすると、例外が発生します。

File:   org/apache/struts2/impl/StrutsActionProxy.java
Line number:    69
Stacktraces
java.lang.NullPointerException   org.apache.struts2.impl.StrutsActionProxy.getErrorMessage(StrutsActionProxy.java:69)
    com.opensymphony.xwork2.DefaultActionProxy.prepare(DefaultActionProxy.java:185)
    org.apache.struts2.impl.StrutsActionProxy.prepare(StrutsActionProxy.java:63)
    org.apache.struts2.impl.StrutsActionProxyFactory.createActionProxy(StrutsActionProxyFactory.java:37)
    com.opensymphony.xwork2.DefaultActionProxyFactory.createActionProxy(DefaultActionProxyFactory.java:58)
    org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:554)
    org.apache.struts2.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:434)

私の理解が間違っていなければ。ログインボタンからリクエストするstruts.xmlと、アクションクラスが検索されます。

私のアクションクラスを見つけることができないようです. Mystruts.xmlおよびlogin.jspLogin クラスのリソース コードは次のとおりです。

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>
    <constant name="struts.devMode" value="true" />

    <package name="default" extends="struts-default">
        <action name="login" class="com.myapp.strust2x.web.action.LoginAction" method="execute">
            <result name="success">/welcome.jsp</result>
        </action>
    </package>
</struts>

login.jsp

<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%>
<%@ 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>
</head>
<body>
     <s:form action="Login" method="post">
        <s:textfield key="userName" label="User Name"/><br />
        <s:password key="passowrd" label="Password"/><br />
        <s:submit value="Login" label="Login" />
    </s:form>
</body>
</html>

ログインアクション

package com.myapp.strust2x.web.action;

    import com.myapp.Constant;
    
    public class LoginAction {
    
        private String userName;
        private String passowrd;
    
        public LoginAction() {
            System.out.println("now Object Created LoginAction");
        }
        
        public String execute() throws Exception {
            System.out.println("HI i am from hello");
            return Constant.SUCCESS;
        }
    
        public String getUserName() {
            return userName;
        }
    
        public void setUserName(String userName) {
            this.userName = userName;
        }
    
        public String getPassowrd() {
            return passowrd;
        }
    
        public void setPassowrd(String passowrd) {
            this.passowrd = passowrd;
        }
    
    }
4

3 に答える 3

0

69 行目です。エラー メッセージは次のようになりNullPointerExceptionます。StrutsActionProxy

There is no Action mapped for namespace [xxx] and action name [yyy] associated with context path [zzz]

名前空間はここでは空ではありません。名前空間は、アクション マッピングから決定されます。URL に最後のスラッシュがある場合、アクション マッパーはアクション名を名前空間として使用します。これは間違っています。パッケージ構成で名前空間を明示的に定義し、Struts JSP タグで名前空間属性を使用することをお勧めします。URL でアクション拡張を使用すると、最後のスラッシュの問題を解決できる場合があります。

于 2016-02-10T10:28:53.173 に答える