在我的struts2应用程序中,我要求将pojo列表发送到struts2动作。但无法通过行动获得这种方式。
这是我的JavaScript函数。
function go() {
var requests = Array();
var url='testUrl';
$('.innertable').each(function(index){
var form= $(this).closest('form');
if(index!=0)
{
var xVal=form.find("#xVal"+index).val();
}
else
{
var xVal=form.find("#xVal"+index).val();
}
var testPojo = {
xVal:xVal
}
requests.push(testPojo);
});
alert('======='+JSON.stringify(requests));
$.ajax({
url: url,
data: JSON.stringify(requests),
contentType: "application/json; charset=utf-8",
type: 'POST',
success: function(data){
//success code
},
error: function(xhr, status, error) {
alert(xhr.responseText);
window.location.reload();
}
});
}
我的struts2动作
public String testUrl()
{
//here what code i can use to get List of pojo
return SUCCESS;
}
当我运行此操作时,我会在警报中获取请求的值:
[{"xVal":"$3,000"},{"xVal":"$5,000"}]
如何在struts2操作中获取此值?
答案 0 :(得分:1)
最后我解决了这个问题。我在这里分享这可能对其他任何人都有用。
代替使用ajax发送数据这里我发送的数据附加在url的查询字符串中。这是样本。
$.ajax({
url: url+"?data="+JSON.stringify(requests),
contentType: "application/json; charset=utf-8",
type: 'POST',
success: function(data){
//success code
},
error: function(xhr, status, error) {
alert(xhr.responseText);
alert('there is some problem in updating data');
}
});
这是行动准则
public String testUrl()
{
String data = request.getParameter("data");
System.out.println("data is :"+data);
List<TestPojo> testPojos=new ArrayList<TestPojo>();
try{
JSONArray jsonArray1 = new JSONArray(data);
for (int i = 0; i < jsonArray1.length(); i++) {
JSONObject jsonObject = jsonArray1.getJSONObject(i);
TestPojo testPojo = new TestPojo();
testPojo.setTestField(jsonObject.get("testField").toString());
testPojos.add(testPojo);
}
//additional code here
}catch (Exception e) {
System.out.println("error");
}
return SUCCESS;
}
答案 1 :(得分:0)
@Ravi Kant首先为什么要将json字符串发送给行动?我的意思是为什么json格式?任何具体原因?您需要通过在Action文件中将请求声明为String变量来接收此请求变量,并使用getter和setter方法从表单中获取值。
private String requests;
public String getRequests() {
return requests;
}
public void SetRequests(String requests) {
this.requests = requests;
}
答案 2 :(得分:0)
例如:您可以尝试这种方式
$.ajax({
type : 'post',
url : 'getsampleZone.action',
data: "disctric ="+ value,
dataType: 'json',
async: true ,
success:function(x){
alert("aasdsds");
}
});
在行动页面;
private String disctric;
System.out.println("disctric >>>>"+getDisctric());
public String getDisctric() {
return disctric;
}
public void setDisctric(String disctric) {
this.disctric = disctric;
}
答案 3 :(得分:0)
你可以这样使用
var jsonStr = JSON.stringify(requests);
$.ajax({
url: url,
data: "jsonAct="+jsonStr ,
contentType: "application/json; charset=utf-8",
type: 'POST',
success: function(data){
//success code
}
&#13;
然后为动作类
中的jsonAct生成setter getterprivate String jsonAct;
public String getJsonAct() {
return jsonAct;
}
public void setJsonAct(String jsonAct) {
this.jsonAct = jsonAct;
}
我遇到了同样的问题并得到了解决。