您的位置:首页 > Web前端 > JQuery

Jquery+Json+struts交互demo,以及为什么要配置includeProperties,root

2014-04-27 23:07 351 查看
上周四面试问到了json,坦白说,我只是见过这种用法,甚至我知道json也仅仅 j s o n这四个字母,[b]隐隐朦朦记得好像是一种类似多个数组拼装的数据格式。[/b]

看了几个json的demo。

首先 1 struts.xml的配置

<package name="system" namespace="/system" extends="json-default">

<result name="findJctUnit" type="json">

<param name="includeProperties">\[\d+\]\.ddlCode,\[\d+\]\.ddlName</param>

</result>

<result name="checkUser" type="json">

<!-- 将对象中的某个属性message的值放置到栈顶 -->

<param name="root">message</param>

<!-- 标识对象中只有message的属性被json话,此时页面调用的时候,data.message -->

<param name="includeProperties">message</param>

</result>

2 Action层 注意(ElecSystemDDL对象含有ddlCode,ddlName等多個属性,为了节约资源,前台只需要ddlCode,ddlName,所以就设置includeProperties的parm)

public String findJctUnit(){

String jctID=elecUser.getJctID();

List<ElecSystemDDL> list=iElecSystemDDLService.findSystemDDLListByKeyword(jctID);

ValueStackUtils.setValueStatck(list);

return "findJctUnit";

}

public String checkUser(){

String LogonName=elecUser.getLogonName();

String message=iElecUserService.findUserByLogonName(LogonName);

return "checkUser";

}

3 前台JQuery function 业务场景(一个option下拉选择A城市,,另一个option下拉出来A城市对应的子细节)

function findJctUnit(o){

//货物所属单位的文本内容

var jct = $(o).find("option:selected").text();

$.post("elecUserAction_findJctUnit.do",{"jctID":jct},function(data,textStatus){

//先删除单位名称的下拉菜单,但是请选择要留下

// alert(data);

$("#jctUnitID option").remove();

if(data!=null && data.length>0){

for(var i=0;i<data.length;i++){

var ddlCode = data[i].ddlCode;

var ddlName = data[i].ddlName;

//添加到单位名称的下拉菜单中

var $option = $("<option></option>");

$option.attr("value",ddlCode);

$option.text(ddlName);

$("#jctUnitID").append($option);

}

}

});

}

/**校验登录名是否出现重复*/

function checkUser(o){

//alert(o.value);//dom的写法

//alert($(o).val());//jquery的写法

var logonName = $(o).val();

//以登录名作为查询条件,查询该登录名是否在数据库表中存在记录

//?????????为什么不直接用userName

$.post("elecUserAction_checkUser.do",{"logonName":logonName},function(data){

if(data==1){

$("#check").html("<font color='red'>登录名不能为空</font>");

$(o)[0].focus();

$("#BT_Submit").attr("disabled","none");

}

else if(data==2){

$("#check").html("<font color='red'>登录名已经存在</font>");

$(o)[0].focus();

$("#BT_Submit").attr("disabled","none");

}

else{

$("#check").html("<font color='green'>登录名可以使用</font>");

$("#BT_Submit").attr("disabled","");

}

});

}

百度找了下也没找到struts.xml配置includeProperties的緣由。下面是JSONResult的源码,可以看到了List<Pattern> includeProperties;这大概就类似一种正泽表达式过滤。并且在JSONUtil.serialize的方法有 includeProperties等参数。

public class JSONResult implements Result {

private static final long serialVersionUID = 8624350183189931165L;

private static final Logger LOG = LoggerFactory.getLogger(JSONResult.class);

private String defaultEncoding = "ISO-8859-1";

private List<Pattern> includeProperties;

private List<Pattern> excludeProperties

protected String createJSONString(HttpServletRequest request, Object rootObject) throws JSONException {

String json = JSONUtil.serialize(rootObject, excludeProperties, includeProperties, ignoreHierarchy, enumAsBean, excludeNullProperties);

json = addCallbackIfApplicable(request, json);

return json;

}

-----

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: