开发环境struts2+Hibernate+spring用了json,不知道我的action写的对不对,但是页面能取到json值,就是用上“.”后取不到值。该怎么来取值呢?
Action类:
public class GoodsAction extends ActionSupport{
private T01 goods;
private String bianhao;
private String jsonchar;
//省略getter/setter
@SuppressWarnings("unchecked")
public String queryGoodsInfo()
{
System.out.println("bianhao= "+bianhao);
goods=goodsService.queryGoodsInfo(bianhao);
jsonchar="{\"mingcheng\":\""+goods.getT01d04()+"\",\"guige\":"+goods.getT01d08()+"}";
System.out.println(jsonchar);
//[color=red]这个在后台可以打印出来{"mingcheng":"2","guige":null}[/color]
return SUCCESS;
}
配置action的.xml文件是:
jsonchar
前端页面addplan.jsp:
function changes() {
if(bXmlHttpSupport) {
var bianhao = document.getElementById("t27d03").value;
var sUrl = '../../goods/QueryGoodsInfo.action?bianhao='+bianhao;
var oRequest = new XMLHttpRequest();
oRequest.onreadystatechange = function() {
if(oRequest.readyState == 4) {
var oBook = eval('(' + oRequest.responseText + ')');
var a={"name":"lw"};
alert(a.name);
这句话可以弹出结果:lw
alert("oBook="+oBook);
这句话也可以弹出结果: {"mingcheng":"2","guige":null},
但是这句话 alert("mingcheng= "+oBook.mingcheng)就弹出undifined,不知道为什么?请指点;
//document.write(oBook.mingcheng);
document.getElementById("t27d04").value =oBook.mingcheng;
}
};
oRequest.open('POST', sUrl);
oRequest.send(null);
}
}
[b]问题补充:[/b]
先多谢两位,我还有不明白的地方;
1.Map map = new HashMap();map.put("uid", userinfo.getPassportId());map.put("nickName", userinfo.getNickName());[color=red]JSONObject json1 = JSONObject.fromObject(map);[/color]
huangnetian (高级程序员) 2009-04-21 采纳为答案
JSONObject是哪里来的?是不是用了什么类包?
2.我试了alert(typeof oBook);发现返回的是String,怎么才能返回对象呢?多谢;
[b]问题补充:[/b]
lovewhzlq (架构师) 2009-04-21 :
import org.stringtree.json.JSONWriter;
JSONWriter writer = new JSONWriter();
Map map = new HashMap();
map.put("mingcheng",goods.getT01d04());
map.put("guige",goods.getT01d08());
String jsonStr = writer.write(map);
这样前端页面获得的还是String[color=red],(var oBook = eval('(' + oRequest.responseText + ')');
)[/color],是不是不能这样获取啊?怎么才会是Object呢?还是不懂;
你去把这个js下载到本地,引入页面
http://www.json.org/json2.js
var oBook = eval('(' + oRequest.responseText + ')');
改为
var oBook = JSON.parse( oRequest.responseText);
就应该ok了
jason的数据不用手动用去拼,最好先放到map里,然后再转成jason格式的对象
Map map = new HashMap();
map.put("uid", userinfo.getPassportId());
map.put("nickName", userinfo.getNickName());
JSONObject json1 = JSONObject.fromObject(map);
可以根据你的情况改一下,记住如果手动加一个信息的话,不但很麻烦,而且还很容易出错,希望这个例子会对你有所启发.
请早日结贴,别忘了给分
alert(typeof oBook):
看看,如果是object就代表oBook是个对象搞正确了,不过你最好用oBook["mingcheng"]的方式
如果是string就代表oBook是个字符串,这样oBook.mingcheng自然有问题
是的jason的一个架包,如果你没有我发给你
我要下班了,有问题明天再讨论
这样就很容易搞定
java 和 json之间的转换
把这个包下载下来加到工程。地址:http://sourceforge.net/projects/stringtree
import org.stringtree.json.JSONWriter;
JSONWriter writer = new JSONWriter();
Map map = new HashMap();
map.put("mingcheng",goods.getT01d04());
map.put("guige",goods.getT01d08());
String jsonStr = writer.write(map);
struts2是 垃圾,建议大家不要用。我干一个小项目用的struts2很后悔。
遇到了很多 莫名的问题。