struts2中用上json后,页面取不到想要的值

开发环境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很后悔。

遇到了很多 莫名的问题。