struts2로 작업 중이며 양식이 있으며 모든 값을 JSON 배열로 가져오고 싶습니다.
이 JSON 배열을 얻기 위해 JSON 형식을 변환하고 제출 이벤트 중에 Struts 작업으로 보내는 JavaScript 코드 조각을 만들었습니다.
<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 배열을 사용할 수 있습니다. 다음 단계는 검색 => 결과 페이지와 같은 다른 페이지에 결과를 표시하는 것입니다. 따라서 내 작업의 결과는 타일 (jsp)입니다.
<action name="search" class="searchAction" method="search">
<result name="success" type="tiles">results</result>
<result name="error" type="tiles">error</result>
</action>
자바 코드 :
public String search() {
JSONObject jObj = (JSONObject) new JSONTokener(jsonForm).nextValue();
....
return SUCCESS;
}
문제는 여기에 있습니다 ... 내 양식이 제출되고 내 작업이 좋은 JSON 배열로 호출되지만 성공 결과가 브라우저에 jsp ..를 표시하지 않고 페이지는 여전히 양식입니다.
누구든지 결과 페이지로의 리디렉션이 완료되지 않은 이유를 알고 있습니까?
양식을 JSON 배열로 제출하는 것이 좋은 방법입니까?
몇 가지 테스트 후 ... 그리고 의견 (감사합니다)으로 해결책을 썼습니다.
여전히 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가 호출하는 메소드에서 JSON 객체를 URL로 변환합니다.
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; & param = value;
필요에 따라 형식을 지정할 수 있습니다. URL은 javascript (호스트 등)로 완성됩니다.
URL의 각 매개 변수는 URL에 의해 호출되는 Action의 속성이어야합니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다