【问题标题】:Send validate() addFieldError to ajax JSON result with Struts2 [duplicate]使用 Struts2 将 validate() addFieldError 发送到 ajax JSON 结果
【发布时间】:2016-02-06 13:11:58
【问题描述】:

我想将操作的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 <(…)

【问题讨论】:

  • 感谢@Roman,我将在这里添加一个不同的答案,但这两个问题实际上非常相似

标签: jquery json ajax validation struts2


【解决方案1】:

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

在这种情况下,我更喜欢将“fieldErrors”属性添加为结果的根对象,而不是使用正则表达式进行过滤。

所以,我将它添加到动作配置中(在本例中带有注释)

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

并且在ajax配置中,在success结果下,我使用了返回的JSON作为

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>"); 
                }
            }
        }
    }

这将添加到我有页面的#submit_result div

username error: Username must be at least 6 charachers long
password error: Password msut be at least 8 charachers long 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-12-17
    • 1970-01-01
    • 2016-09-19
    • 2012-06-12
    • 2017-04-04
    • 2015-01-08
    • 2011-09-30
    • 1970-01-01
    相关资源
    最近更新 更多