我有一个名为example.jsp的jsp视图文件,当点击一个按钮时,调用了jquery方法:
$(document).ready(function() {
$("#a_button").click(function() {
var json_model== {
field1 : $("#a_textarea1").val(),
field2 : $("#a_textarea2").val(),
field3 : $("#a_textarea3").val(),
};
$.getJSON('AnAction', {
model : json_model
}, function(jsonResponse) {
alert('jsonResponse here');
});
});
});
这是我的行动课:
public class ActionClass implements Action {
private Model model;
@Override
public String execute() throws Exception {return null;}
public String actionMethod() {
System.out.println("Its Here");
System.out.println(model.getField1()+" "+model.getField2()+" "+model.getField3()+" ");
return SUCCESS;
}
public Model getModel() {
return model;
}
public void setModel(Model model) {
this.model = model;
}
}
这里是Model class:
public class Model {
private String field1;
private String field2;
private String field3;
public Model(String field1,String field2, String field3) {
super();
this.field1 = field1;
this.field2 = field2;
this.field3 = field3;
}
public String getField1() {
return field1;
}
public void setField1(String field1) {
this.field1 = field1;
}
public String getField2() {
return field2;
}
public void setResult(String field2) {
this.field2 = field2;
}
public String getField3() {
return field3;
}
public void setField3(String field3) {
this.field3 = field3;
}
}
我的struts.xml:
<action name="AnAction" class="controller.ActionClass" method="actionMethod">
<result type="json">/example.jsp</result>
</action>
当我点击按钮时,我的动作调用工作正常,我在服务器端控制台上看到其在这里文本。但是动作调用不会映射模型对象。我的意思是&#39;模型&#39;调用操作时为null。但是,当我将field1,field2和field3移动到ActionClass时,如下所示。但是我当然只想要Action Class中的模型对象。我怎样才能做到这一点。感谢您的所有建议。
//THIS IS WORKED VERSION OF ACTION CLASS
public class ActionClass implements Action {
private String field1;
private String field2;
private String field3;
@Override
public String execute() throws Exception {return null;}
public String actionMethod() {
System.out.println("Its Here");
System.out.println(field1+" "+field2+" "+field3+" ");
return SUCCESS;
}
public String getField1() {
return field1;
}
public void setField1(String field1) {
this.field1 = field1;
}
public String getField2() {
return field2;
}
public void setResult(String field2) {
this.field2 = field2;
}
public String getField3() {
return field3;
}
public void setField3(String field3) {
this.field3 = field3;
}
}
//AND MY JQUERY METHOD WHICH IS COMPATIBLE WITH ABOVE
$(document).ready(function() {
$("#a_button").click(function() {
$.getJSON('AnAction', {
field1 : $("#a_textarea1").val(),
field2 : $("#a_textarea2").val(),
field3 : $("#a_textarea3").val()
}, function(jsonResponse) {
alert('jsonResponse here');
});
});
});
答案 0 :(得分:1)
您可以使用前缀为model.
var json_model = {
"model.field1" : $("#a_textarea1").val(),
"model.field2" : $("#a_textarea2").val(),
"model.field3" : $("#a_textarea3").val(),
};
$.getJSON('AnAction', json_model, function(jsonResponse) {
alert('jsonResponse here');
});
该模型还需要一个默认构造函数
public Model() {}
所以你可以将它实例化为动作
private Model model = new Model();
在这些更改之后,params
拦截器将能够在OGNL的帮助下填充model
对象。并且因为您的模型属性只是字符串,所以它们将被设置而不会对参数进行任何可能的类型转换。
答案 1 :(得分:0)
感谢罗曼C.随着他的回应做了一些改变,它起作用了! 我与Roman C的反应的区别仅在于:
1)我没有在动作类中实例化模型对象。 2)我将所有'私人'访问修饰符更改为'公共'(否则,OGNL有问题)