问题描述 投票:0回答:3
我正在使用 Struts 2,当我尝试从 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

,并且它会寻找操作类。

看来,它无法找到我的动作类,这是我所理解的,我也参考了这个

page

看起来很相似,但我无法弄清楚我的代码中到底有什么问题。

我的

struts.xml

login.jsp
Login
类源代码如下:

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>

登录.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; } }
    
java jsp struts2 nullpointerexception action-mapping
3个回答
3
投票
您可能在

FilterDispatcher

 中使用已弃用的 
web.xml
。将其替换为 
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter

更多信息

这里


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 中使用操作扩展可以帮助您解决最后一个斜杠问题。


0
投票
我现在明白了,我在 struts.xml 中的操作名称是“

Login”,而在 struts 表单中,它的“login”是导致问题的原因。 这意味着操作的名称区分大小写 名称 Login

login
 是不同的,我之前没有注意到 
L vs l
 

在 Login.jsp 中:

<body> <s:form action="Login" method="post">

在 Strust.xml 中

<action name="login" class="com.myapp.strust2x.web.action.LoginAction" method=...

一旦我更改为相同的,它现在对我有用。

© www.soinside.com 2019 - 2024. All rights reserved.