我正在使用struts2,我有一个表单,我想获取JSON数组中的所有值。
为了获得这个JSON数组,我创建了一个JavaScript片段来转换JSON中的表单,并在提交事件期间将其发送到Struts操作:
<script type="text/javascript">
jQuery("#advanced-search").submit(function(e){
var formInput=jQuery(this).serializeJSON({parseBooleans: true,parseNulls: true});
jQuery.ajax({
type: "POST",
url: "<s:url action='searchJSON'/>",
data: "jsonForm="+JSON.stringify(formInput),
dataType: "json"
});
});
</script>我的表单操作实现如下:
<form action="javascript:void(0);" id="advanced-search" method="post">
...
</form>该操作被调用,我可以使用我的JSON数组。下一步是将结果显示到另一个页面,如search =>结果页。因此,我的操作的结果是一个瓷砖(jsp):
<action name="search" class="searchAction" method="search">
<result name="success" type="tiles">results</result>
<result name="error" type="tiles">error</result>
</action>Java代码:
public String search() {
JSONObject jObj = (JSONObject) new JSONTokener(jsonForm).nextValue();
....
return SUCCESS;
}问题在这里..。提交了我的表单,并使用一个好的JSON数组调用了我的操作,但是成功的结果没有显示jsp..在浏览器中,页面仍然是表单。
有人知道为什么重定向到结果页没有完成吗?
将表单作为JSON数组提交是一种好方法吗?
发布于 2014-11-14 11:08:39
经过一些测试..。带着这些评论(谢谢各位),我写了一个解决方案。
我仍然使用带有JSON格式的ajax提交,但是回调消息是重定向的url:
HTML:
<form action="javascript:void(0);" id="advanced-search" method="post">
...
</form>联署材料:
jQuery("#advanced-search").submit(function(e){
//var formInput=jQuery(this).serializeObject();
var formInput=jQuery(this).serializeJSON({parseBooleans: true,parseNulls: true});
e.preventDefault();
jQuery.ajax({
url: "<s:url action='searchJSON'/>",
data: "jsonForm="+JSON.stringify(formInput),
contentType: "application/json",
dataType: "json"
}).done(function( msg ) {
window.location.href="<s:url action='search'/>?"+msg;
});
});然后,在ajax调用的方法中,我在url中转换JSON对象:
在Struts.xml中:
<action name="searchJSON" class="searchAction" method="searchJSON">
<result type="json">
<param name="root">urlRedirectAjax</param>
</result>
</action>方法:
public class SearchAction extends ActionSupport {
private String urlRedirectAjax;
public String searchJSON(){
StringBuilder urlResultat = new StringBuilder();
JSONObject jObj = (JSONObject) new JSONTokener(jsonForm).nextValue();
if(jObj == null)
return ERROR;
if(jObj.has("elementJSON")){
JSONObject jsObjMot = (JSONObject) jObj.get("elementJSON");
String separator = "";
for(Object key : jsObjMot.keySet()){
urlResultat.append(separator);
separator = ";";
urlResultat.append((String) key);
}
urlResultat.append("&");
}
.....
urlRedirectAjax = urlResultat.toString();
return SUCCESS;
}
public String getUrlRedirectAjax() {
return urlRedirectAjax;
}
public void setUrlRedirectAjax(String urlRedirectAjax) {
this.urlRedirectAjax = urlRedirectAjax;
}
}ajax方法接收的url如下所示:param=value;value;value;¶m=value;
可以根据需要对其进行格式化。url在javascript (主机等)中完成。
url中的每个param必须是URL调用的Action的属性。
https://stackoverflow.com/questions/26778292
复制相似问题