0

我有以下代码和配置

波乔

public class MyInfo {
    private String name;
    private String desc;

    //... getters, setters ...
}

我的行动

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

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
    "http://struts.apache.org/dtds/struts-2.3.dtd">  
<struts>
    <constant name="struts.devMode" value="true" />
    <package name="base-ajax" namespace="/" extends="json-default,struts-default" abstract="true" >
        <global-results>
            <result type="json"></result>
            <result name="failure" type="json"></result>
        </global-results>
    </package>

    <package name="info-ajax" namespace="/" extends="base-ajax">
        <action name="processInfo" method="processInfo" class="demo.MyAction">
            <result type="json"></result>
        </action>
    </package>
<struts>

呈现的 JSP 片段

<form id="infoForm" method="post" action="processInfo.action">
    <input id="infoName" type="text" name="info.name"></input>
    <input id="infoDesc" type-"text" naame="info.desc"></input>
    <a id="btn-submit" href="#">Submit</a>
</form>

jQuery 在 JSP 的 head 部分。

var jQ = jQuery.noConflict();

jQ(document).ready(function() {
    jQ("#btn-submit").click(function() {
        //perform some validation
        var formData = jQ("#infoForm").serialize();
        jQ.ajax({
            url: "processInfo.action",
            data: formData,
            dataType: "json",
            error: function() {
                alert("Some error has occurred while processing request.");
            },
            success: function(response) {
                if(response.result = "failure") {
                    alert("Information processing failed.");
                } else if(response.result) {
                    alert("Information processed successfully.");
                }
            }
        });
    });
});

在大多数情况下,它运行平稳。MyAction.processInfo()但有时我会在on中得到 NullPointerException info.getName()。似乎info没有人口。我已经看到表单正在以正确的值提交(使用 Firebug 和篡改数据插件进行分析)。我不相信params拦截器会跳过创建info。我的配置中可能缺少某些内容。谁能弄清楚或指导我幕后发生的事情?

4

1 回答 1

1

它不可能以这种方式工作。

1)你有你的行动的方法声明为private;

2)你的回报SUCCUESS,而不是SUCCESS从内部processInfo

我猜它们都是在将其发布到此处之前由代码清理引起的错误,但要小心:)

PS:我不知道这是否是一种不好的做法,但我强烈建议您将 Action 的名称和类关联起来(例如,processInfo并且demo.myActionpair 可以在演示中工作,但是当您有 100 个 Actions 时,您会发疯的)。

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

于 2012-11-20T11:00:40.803 回答