使用Struts2将validate()addFieldError发送到ajax JSON结果

时间:2016-02-06 13:11:58

标签: jquery json ajax validation struts2

我想将操作的validate()方法的结果作为(JSON?)数据发送到客户端的ajax调用,以便我可以通知用户。

我通过ajax在客户端发送表单数据。在服务器端,我正在实现一个简单的validate()方法(我尚未准备好验证框架)。这是我的ajax电话

function save_new_user() {

    var user = 
    {       username: $('#new_user_username').val(),
            email: $('#new_user_email').val(),
            password: $('#new_user_password').val()         
    };

    data = {'user':user}; 
    datastr = JSON.stringify(data);

    $.ajax({
        type : 'POST',
        url : 'SaveNewUser',
        data: datastr,
        dataType : 'json',
        contentType: 'application/json',
        success : function(data, textStatus, jqXHR) {
            if(data) {

            }
        },
        error: function(jqXHR, textStatus, errorThrown) {
            console.log(errorThrown);
        }
    });
}

在我的Struts2 Action中我有

public void validate() {
    if(user.getUsername().length() < 6){
        addFieldError("user", "username must be at least 6 charachers long");
    }

    if(user.getPassword().length() < 8){
        addFieldError("user", "password must be at least 8 charachers long");
    }
}

/* Execute */
public String execute() throws Exception  {

    dbServices.saveUser(user);

    return "SUCCESS";
}

我有一个默认堆栈应用于此动作调用

<package name="json-data" extends="json-default">
    <interceptors>
        <interceptor-stack name="jsonDataStack">
            <interceptor-ref name="json"/>
            <interceptor-ref name="basicStack"/>
            <interceptor-ref name="validation">
                <param name="excludeMethods">input,back,cancel</param>
            </interceptor-ref>
            <interceptor-ref name="jsonValidation"/>
            <interceptor-ref name="workflow"/>
        </interceptor-stack> 
    </interceptors>

    <default-interceptor-ref name="jsonDataStack"/>

</package>

并且正在调用validate()方法。

所以,这是我的问题:如何将validate()函数的结果作为数据发送到ajax调用,以便我可以使用它来通知用户?似乎方法addFieldError()没有以JSON可读形式配置数据,因为ajax结果中的错误消息是

SyntaxError: Unexpected token <(…)

1 个答案:

答案 0 :(得分:0)

this答案中,正则表达式用于过滤作为json对象返回的完整操作属性中的字段错误属性。

在这种情况下,我更喜欢添加&#34; fieldErrors&#34; property作为结果的根对象,而不是使用正则表达式进行过滤。

因此,我将此添加到操作配置(在本例中为注释)

.

在ajax配置中,在成功结果下,我使用返回的JSON作为

@Result(name="input", type="json", params={"root","fieldErrors"})

这会增加success : function(fieldErrors, textStatus, jqXHR) { for (var property in fieldErrors) { if (fieldErrors.hasOwnProperty(property)) { var this_field_err = fieldErrors[property]; $('#submit_result').append(property+" error"); for(var ix=0; ix<this_field_err.length; ix++) { $('#submit_result').append(this_field_err[ix]); $('#submit_result').append("<br>"); } } } } div我有页面

#submit_result