我正在使用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 =&gt;结果页面。所以我的动作结果是一个tile(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数组提交是一种好方法吗?
答案 0 :(得分:0)
好的经过一些测试......并且评论(谢谢你们)我写了一个解决方案。
我仍然使用带有JSON格式的ajax提交,但回调消息是重定向的URL:
HTML:
<form action="javascript:void(0);" id="advanced-search" method="post">
...
</form>
JS:
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方法收到的网址如下: param = value; value; value;&amp; param = value;
可以根据需要对其进行格式化。网址在javascript(主机等)
中完成URL中的每个参数都必须是url调用的Action的属性。