问题:使用$.ajax更新动态更新dropDownList显示内容时,接收页面得不到返回值。无法执行success后代码。
js代码:
function set() {
var postData = {
keyword : $("#keyword").val(),
kaisiNendo : $("#kaisiNendo").val(),
gyoumu : $("#gyoumu").val(),
}
$.ajax({
url : sofia.contextPath() + "/keiyaku/wfgs2000/wfgs2011/get.do",
dataType : "json",
async : false,
type : "post",
data : postData,
success : function(result) {
sofia.ui.applyDropDownList('gyousyu', result.list);
}
})
}
java后台代码:
public void get(Wfgs2011Dto wfgs2011Dto, AjaxOutputStreamWrapper output) throws Exception {
ArrayList<LabelValueBean> list = new ArrayList<LabelValueBean>();
list = ListGeneratorKeiyaku.generate(ListKbnKeiyaku.SelectBox, false,Constants.KYK_KBNTYPE_KENSETU_KOUJI_SHINSEI);
JSONObject result = new JSONObject();
result.put("list", list);
FacadeUtils.writeJson(result, output);
}
}
result.put("list", list);//
如果这样直接返回到js,则返回的result中的数据不是json类型,所以js页面无法获取数据。所以需要在返回之前将list转化为json格式
public void get(Wfgs2011Dto wfgs2011Dto, AjaxOutputStreamWrapper output) throws Exception {
ArrayList<LabelValueBean> list = new ArrayList<LabelValueBean>();
list = ListGeneratorKeiyaku.generate(ListKbnKeiyaku.SelectBox, false,Constants.KYK_KBNTYPE_KENSETU_KOUJI_SHINSEI);
JSONObject result = new JSONObject();
result.put("list", BeanUtility.toJSONArray(list));
FacadeUtils.writeJson(result, output);
}
}
/**
* ListからJSONArrayへの変換
*
* @param list
* 対象リスト
* @return 変換したJSONArray
* @throws Exception
*/
public static JSONArray toJSONArray(List list) throws Exception {
// JSON配列に変換
JSONArray jsonList = new JSONArray();
for (Object object : list) {
JSONObject json = new JSONObject();
Map map = BeanUtils.describe(object);
//class情報が付加されるので削除
if (map.containsKey("class")) {
map.remove("class");
}
//String型のnullを空文字に変換
//nullが入っているとJSONValue.parseでnullの次のkeyが抜け落ちて取得されるため
Iterator it = map.keySet().iterator ();
while (it.hasNext()) {
Object key = it.next();
if (map.get(key) == null) {
if (object.getClass().getDeclaredField(key.toString()).getType() == String.class) {
map.put(key, "");
}
}
}
json.putAll(map);
jsonList.add(json);
}
return jsonList;
}