功能简述:当用户下订单的时候,需要用其他的地址,而不是默认地址。用户点击其他的地址,下面订单的地址随着变换。
代码块
jsp中的代码
$(function(){
//checkId是标签的id属性的值
$('[id^=checkId]').click(function(){
$.ajax({
type:"post",
url:"×××Action.action",//对应的ActionName
data:{
//传的值是当前点击单元的value值
"addressId":$(this).val()
},
dataType:"json",
success:function(data){
//将数据转换成json类型
var d = eval("("+data+")");
//将json数据显示到对应的位置
$("#receiveArea").text(""+d.receiveArea+"");
$("#detailArea").text(""+d.detailArea+"");
$("#receiver").text(""+d.receiver+"");
$("#phone").text(""+d.phone+"");
},
error:function(){
alert("系统异常,请稍后重试!");
}
});
});
});
Action代码
public class AjaxShowAddressAction extends ActionSupport{
private static final long serialVersionUID = 1L;
private int addressId; //前台传进来的属性
private String result; //用于返回给前台的属性
public String execute() throws Exception {
try {
Map<String,String> map = new HashMap<String,String>();
//地址表的DAO包
ReceiveAddressDAO addressDao = new ReceiveAddressDAO();
ReceiveAddressDTO addressDto = addressDao.getAddressByAddressId(addressId);
//通过map构造JSON格式
map.put("receiveArea", addressDto.getReceiveArea());
map.put("detailArea", addressDto.getDetailArea());
map.put("receiver", addressDto.getReceiver());
map.put("phone", addressDto.getPhone());
//JSON转换成String进行传输
JSONObject json = JSONObject.fromObject(map);
result = json.toString();//给result赋值,传递给页面
} catch (Exception e) {
e.printStackTrace();
}
return SUCCESS;
}
public int getAddressId() {
return addressId;
}
public void setAddressId(int addressId) {
this.addressId = addressId;
}
public String getResult() {
return result;
}
public void setResult(String result) {
this.result = result;
}
}
struts.xml代码
<!-- Ajax获取地址信息action -->
<action name="ajaxShowAddressAction" class="com.drugstore.action.AjaxShowAddressAction">
<result name="success" type="json">
<!-- 这里还不是很懂,有root与没有root的区别-->
<param name="root">result</param>
</result>
</action>
遇到的困难:map转换成json数据的时候,总是无法转换,甚至完全没有执行JsonObject .fromObject(map)这条语句,之后经过调试,发现原来在myeclipse导入struts的包中,缺少一个ezmorph-1.0.6.jar,其他json需要的包都有,就缺它。
注意点:确保传给前台的result格式完全符合json格式。