Java 访问提交的对象时在Struts2中获取NullPointerException

Java 访问提交的对象时在Struts2中获取NullPointerException,java,javascript,jquery,jakarta-ee,struts2,Java,Javascript,Jquery,Jakarta Ee,Struts2,我有以下代码和配置 波乔 我的行动 package demo; //... import statements ... public class MyAction extends ActionSupport { public static final String FAILURE = "failure"; private MyInfo info; private String result; private String message; pub

我有以下代码和配置

波乔

我的行动

package demo;

//... import statements ...

public class MyAction extends ActionSupport {

    public static final String FAILURE = "failure";

    private MyInfo info;
    private String result;
    private String message;

    public String execute() {
        result = SUCCESS;
        return result;
    }

    public String processInfo() {
        result = FAILURE;
        try {
            String name = info.getName();
            //... More Statements //
            result = SUCCESS;
        } catch(Exeption e) {
            message = "Unable to process information : " + e.getMessage;
        }

        return result;
    }

    //Getter and Setter methods of info, result, and message.


}
Struts.xml


JSP的head部分中的jQuery

var jQ=jQuery.noConflict();
jQ(文档).ready(函数(){
jQ(“btn提交”)。单击(函数(){
//执行一些验证
var formData=jQ(“#infoForm”).serialize();
jQ.ajax({
url:“processInfo.action”,
数据:formData,
数据类型:“json”,
错误:函数(){
警报(“处理请求时发生了一些错误。”);
},
成功:功能(响应){
如果(response.result=“failure”){
警报(“信息处理失败”);
}else if(response.result){
警报(“信息处理成功”);
}
}
});
});
});

在大多数情况下,它运行平稳。但有时我会在
info.getName()
上的
MyAction.processInfo()
中得到NullPointerException。似乎未填充
info
。我已经看到表单提交时带有正确的值(使用Firebug和篡改数据插件进行分析)。我不相信
params
拦截器跳过创建
info
。我的配置中可能缺少某些内容。有人能猜出来或者告诉我幕后发生了什么吗?

不可能是这样的

1) 您将操作的方法声明为
private

2) 从
processInfo

我猜它们都是在发布到这里之前由于代码清理而导致的错误,但是要小心:)

附言:我不知道这是否是一个糟糕的做法,但我强烈建议你将动作的名称和类关联起来(例如,
processInfo
demo.myAction
对可以在一个演示中工作,但当你有100个动作时,你会发疯)


我的2美分。。。我知道这并不能回答您的问题,但正如您所说,它在大多数情况下都能正常工作,因此这是一个随机问题,很难在您的机器上调试(并且发布了假代码:)

经过仔细的日志分析后,发现这不是struts2问题。当请求被发送到web服务器时,然后在将其发送到应用程序之前,web服务器尝试解析该请求。日志表明,有时web服务器无法解析请求参数。所以web服务器省略了请求中的参数,并将其发送给应用程序进行处理。在完成分析和结论后,我将与大家分享这些发现。很好,我现在很好奇:)谢谢你的纠正和建议。让我更新代码。我承认你太聪明了。这真的是假的代码,但我试图勾勒出真正的实现。由于很多原因,我无法共享真正的代码。
package demo;

//... import statements ...

public class MyAction extends ActionSupport {

    public static final String FAILURE = "failure";

    private MyInfo info;
    private String result;
    private String message;

    public String execute() {
        result = SUCCESS;
        return result;
    }

    public String processInfo() {
        result = FAILURE;
        try {
            String name = info.getName();
            //... More Statements //
            result = SUCCESS;
        } catch(Exeption e) {
            message = "Unable to process information : " + e.getMessage;
        }

        return result;
    }

    //Getter and Setter methods of info, result, and message.


}