最近的项目时用的struts2的框架,之前也做过一下struts下的ajax的东西,但是时间久了难免忘记了,导致下次写这个东西的时候就会到处找资料,在前端调试看数据结构的东西.导致项目开发速度过慢.今天终于狠下心来写一篇这个博客出来供有相同需求的朋友和自己以后进行查阅
首先用项目的配置我就不多说了,先简要大概说明一下struts.xml中的配置
<!-- 异步请求包 -->
<package name="merchant-ajax" extends="json-default" namespace="/merchantAjax" >
<!--action这里,在请求的路径上面我使用了通配符,所以他的类也就用通配符了-->
<action name="*/address" class="com.i2f.i2one.operation.module.merchant.{1}.action.MerchantAjaxAction" method="executeEX">
<!--这里的name可以写也可以不写的,如果是单一的action请求在这个action里面,而在后台不通过不同返回值来返回不同的数据的时候可以不写,建议还要写上:
这里的type一定要标注是json数据,这样呢就会扔到前台是json的数据 -->
<result name="success" type="json">
<!-- 指定序列化的对象数据 -->
<param name="root">json</param>
<!--指定序列化时是否包括空数据-->
<param name="excludeNullProperties">true</param>
<!--指定包含name=root中数据的哪些属性-->
<param name ="includeProperties">
list.*
</param>
<!-- 这里指定将要从json中排除那些属性,这些排除的属性将不被序列化,一半不与上边的参数配置同时出现 -->
<param name="excludeProperties">
任意属性
</param>
</result>
</action>
</package>
下面是涉及到的javascript代码
$('[name=entCity]').blur(function(){
var province = $('[name=entCity]').val();
var url = '/tjs-operation/merchantAjax/register/address.do';
//alert(11111);
if($.trim(province)=='')
return false;
$.ajax({
url:url,
type:'post',
async:true,
dataType:'json',
data:{
'province':province
},
success:function(data){
//alert(data);
var d = eval("("+data+")");
var html='';
html+='<select name="regDist">';
html+='<option value="">---请选择---</option>';
//写html代码到街道代码中进行选择
$.each(d,function(index,item){
//alert(item.enumCode);
//追加数据到下拉框<select name="regDist" >
html+='<option value="';
html+=item.enumCode;
html+='">';
html+=item.enumName;
html+='</option>';
});
html+='</select>';
//清除原td中所有元素
$('#ajax_td').empty();
$('#ajax_td').append(html);
}
});
这是我项目中代码,主要是通过异步查询来修改html页面中的元素
有时候你actin中传递的json数据的格式会不同,此时可以使用console.info(data)打印在控制台,然后查看,
可以使用eval(“(“+data+”)”);来构建json对象
下面给出ACtion的代码
package com.i2f.i2one.operation.module.merchant.register.action;
import java.util.List;
import java.util.Map;
import net.sf.json.JSONArray;
import org.apache.commons.lang.StringUtils;
import com.i2f.i2one.operation.common.web.struts2.BaseAction;
import com.i2f.tjs.channel.model.EnumDefinition;
import com.i2f.tjs.channel.service.EnumDefinitionService;
/**
* @author Z.zhe
*
* <pre>
* 异步请求Action
* </pre>
*
*
*/
public class MerchantAjaxAction extends BaseAction {
private static final long serialVersionUID = 1577064567874485420L;
private List<EnumDefinition> regDistList; // 省市区街道代码
private EnumDefinitionService enumDefinitionService; // 字典
private String province; // 商户所在省
private String city; // 商户所在城市(直辖市的区)
private String enumName; // 用户输入街道地址异步查询
private Map<String, String> dataMap; // 异步返回数据map对象
private JSONArray jsonArray; // 返回数据
private String json;
@Override
public String executeEX() throws Exception {
if (StringUtils.isNotBlank(province) && province.length() >= 2) {
// 直辖市
if ("北京".equals(province.substring(0, 2))
|| "重庆".equals(province.substring(0, 2))
|| "天津".equals(province.substring(0, 2))
|| "上海".equals(province.substring(0, 2))) {
EnumDefinition enumDefinition = new EnumDefinition();
enumDefinition.setEnumName(province);
enumDefinition.setEnumType("03");
List<EnumDefinition> addressList = enumDefinitionService
.selectByPrimaryKey(enumDefinition);
if (addressList.size() > 0) {
String enumCode = addressList.get(0).getEnumCode();
// 取城市前两位代码进行模糊查询
String substring = enumCode.substring(0, 2);
enumDefinition.setEnumCode(substring);
enumDefinition.setEnumType("03");
enumDefinition.setEnumName("");
regDistList = enumDefinitionService
.selectLikeByPrimaryKey(enumDefinition);
jsonArray = JSONArray.fromObject(regDistList);
json = jsonArray.toString();
}
} else {// 非直辖市
EnumDefinition enumDefinition = new EnumDefinition();
enumDefinition.setEnumName(province);
enumDefinition.setEnumType("03");
List<EnumDefinition> addressList = enumDefinitionService
.selectByPrimaryKey(enumDefinition);
if (addressList.size() > 0) {
String enumCode = addressList.get(0).getEnumCode();
// 取城市前两位代码进行模糊查询
String substring = enumCode.substring(0, 5);
enumDefinition.setEnumCode(substring);
enumDefinition.setEnumType("03");
enumDefinition.setEnumName("");
regDistList = enumDefinitionService
.selectLikeByPrimaryKey(enumDefinition);
jsonArray = JSONArray.fromObject(regDistList);
json = jsonArray.toString();
}
}
}
return SUCCESS;
}
public List<EnumDefinition> getRegDistList() {
return regDistList;
}
public void setRegDistList(List<EnumDefinition> regDistList) {
this.regDistList = regDistList;
}
public EnumDefinitionService getEnumDefinitionService() {
return enumDefinitionService;
}
public String getJson() {
return json;
}
public void setJson(String json) {
this.json = json;
}
public void setEnumDefinitionService(
EnumDefinitionService enumDefinitionService) {
this.enumDefinitionService = enumDefinitionService;
}
public String getEnumName() {
return enumName;
}
public void setEnumName(String enumName) {
this.enumName = enumName;
}
public Map<String, String> getDataMap() {
return dataMap;
}
public void setDataMap(Map<String, String> dataMap) {
this.dataMap = dataMap;
}
public String getProvince() {
return province;
}
public void setProvince(String province) {
this.province = province;
}
public String getCity() {
return city;
}
public void setCity(String city) {
this.city = city;
}
public static long getSerialversionuid() {
return serialVersionUID;
}
public JSONArray getJsonArray() {
return jsonArray;
}
public void setJsonArray(JSONArray jsonArray) {
this.jsonArray = jsonArray;
}
}
注意,这里面一定要有set的方法,才能传递数据
具体为什么,这里就不要详细的解说了