利用json2和Struts2来实现下拉框的无刷新联动

由于在项目开发中经常需要用到下拉框,有的时候下拉框的内容还需要根据情况来加载,虽然在Struts中可以根据form来加载ajax模板和dwr来实现,但这样一来就显得不那么灵活了,所以试着用prototype+json2来实现。

 

1、需要用到的相关实体类

public class TsysRegion implements java.io.Serializable

{

    private long regionId;
    private String regionName;
    private String regionCode;
    private long parentRegionId;

}

 

public class Dict
{
    private String code;
    private String name;
}

 

 

2、Struts2 Action类的代码如下:

public class EcPreRegisterAction

{

      // 申请业务类变量

       private IRegionManagerService regionManagerService;

 

      // 定义省份编码

       private String provinceCode;

       private String strCitys;

 

       public EcPreRegisterAction()
      {

        // 从Spring配置文件中获取Bean.
        regionManagerService = getBean("regionManagerService");
      }

 

public String getCitysByProvinceCode() throws Exception
    {

       // 根据省份编码来获取地市
        List<TsysRegion> list =       regionManagerService.getChildrenRegions(provinceCode,Consts.YesOrNo.YES);


        List<Dict> city = new ArrayList<Dict>();
        Map citysMap = new HashMap();
        for(TsysRegion value:list)
        {
            //citysMap.put(value.getRegionCode(), value.getRegionName());
            city.add(new Dict(value.getRegionCode(), value.getRegionName()));
        }
       
        JSONArray jsonObject = JSONArray.fromObject(city);
        strCitys = jsonObject.toString();
        return SUCCESS;

    }

}

 

3、Struts.xml配置文件

<package name="ecm-preRegister-ajax" extends="json-default" namespace="/ec/ecmanager">

<action name="getCitysByProvinceCode" class="com.ec.ecmanager.action.EcPreRegisterAction" method="getCitysByProvinceCode">
          <result type="json">
            <param name="includeProperties">strCitys</param>
            </result>
         </action>

</package>

4、jsp页面的脚本

function provinceChange(obj)
   {
     var url='getCitysByProvinceCode.action?provinceCode=' + obj.options[obj.selectedIndex].value;
     var params = Form.serialize('form1');
     var myajax = new Ajax.Request(url,
            {
        method:'post',
        parameters:params,
        onComplete:function(request)
        {
          var select =document.getElementById("form1_ecinfo_cityCode");
          select.innerHTML = "";
          var action = JSON.parse(request.responseText);
          var citys = eval(action.strCitys);
          for(var i=0;i<citys.length;i++)
          {
           var _o = new Option();
           _o.text = citys[i].name;
           _o.value = citys[i].code;
           select.options.add(_o);
          }
        },
        asynchronous:true
        }
    );
   }

 

5、jsp页面的下拉框

  <s:select name ="ecinfo.provinceCode" οnchange="provinceChange(this);" list="provinces" listKey="regionCode" listValue="regionName" value="default_provinces_code"></s:select>&nbsp;
                      <s:select name="ecinfo.cityCode" list="citys" listKey="regionCode" listValue="regionName" value="default_city_code"></s:select>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值