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