如何把值传递给velocity定义的模板?在模板中又怎样获得值?

本文介绍如何使用Velocity模板引擎实现网页上的地区三级联动选择器。该选择器涉及省份、城市及区县级别的数据联动,并通过JavaScript进行初始化及动态加载。文章详细展示了Velocity模板语法及其与JavaScript交互的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在使用Spring+Hibernate+Webwork2+DWR做一个项目,里面要使用一个三级联动的地区控件,就使用Velocity封装了一个模板,

<nobr>
#*
	地区编码规则:省份2位编码
			    市4位
			    区/县6位
*#
##parse("/template/xhtml/controlheader.vm")
##获得页面控件的name
#set ($areaControl=$parameters.name)
##获得需要初始化的值
#set ($areaNumID=$parameters.value) ##问题出在这里?
<select name="${areaControl}_provience" onchange="${areaControl}_initCity()">
	<option value="">请选择省份</option></select>
	<select name="${areaControl}_city" onchange="${areaControl}_initTown()">
	<option value="">请选择城市</option></select>
	<select name="${areaControl}_town" onchange="${areaControl}_initValue()">
	<option value="" >请选择区县</option></select>
	<input type="hidden" name="${areaControl}" 
	##判断是否有初始化值
	#if($parameters.value)
		value="$parameters.value"
	#else 
		value=""
	#end 
	>
</nobr>
<script language="javascript">
		var ${areaControl}_value=document.getElementById("${areaControl}").value;
  		##初始化省份信息
  		function ${areaControl}_initProvince()
  		{
  			AreaDeal.getProvince(${areaControl}_dealProvince);
  		}
  		##省份信息的回调函数
  		function ${areaControl}_dealProvince(data)
  		{
  			dwr.util.addOptions("${areaControl}_provience",data,'id','areaname');
  		}
  		##初始化城市信息
  		function ${areaControl}_initCity()
  		{
  			
  			if(document.getElementById("${areaControl}_provience").value!="")
  			{
  				AreaDeal.getCity(document.getElementById("${areaControl}_provience").value,${areaControl}_dealCity);
  				dwr.util.removeAllOptions("${areaControl}_town");
  				dwr.util.addOptions("${areaControl}_town",[{name:'请选择区县',value:""}],'value','name');
  			}
  			document.getElementById("${areaControl}_city").value="";
  			${areaControl}_initValue();
  		}
  		##城市信息的回调函数
  		function ${areaControl}_dealCity(data)
  		{
  			dwr.util.removeAllOptions("${areaControl}_city");
  			dwr.util.addOptions("${areaControl}_city",[{name:'请选择城市',value:""}],'value','name');
  			dwr.util.addOptions("${areaControl}_city",data,'id','areaname');	
  		}
  		##初始化区县信息
  		function ${areaControl}_initTown()
  		{
  			if(document.getElementById("${areaControl}_city").value!="")
  			{
  				AreaDeal.getTown(document.getElementById("${areaControl}_city").value,${areaControl}_dealTown);
  			}
  			document.getElementById("${areaControl}_town").value="";
  			${areaControl}_initValue();
  		}
  		##区县信息的回调函数
  		function ${areaControl}_dealTown(data)
  		{
  			dwr.util.removeAllOptions("${areaControl}_town");
  			dwr.util.addOptions("${areaControl}_town",[{name:'请选择区县',value:""}],'value','name');
  			dwr.util.addOptions("${areaControl}_town",data,'id','areaname');
  		}
  		##把地区信息保存在隐藏域里
  		function ${areaControl}_initValue()
  		{
  			if(document.getElementById("${areaControl}_town").value!="")
  				document.getElementById("${areaControl}").value=document.getElementById("${areaControl}_town").value;
  			else if(document.getElementById("${areaControl}_city").value!="")
  				document.getElementById("${areaControl}").value=document.getElementById("${areaControl}_city").value;
  			else if(document.getElementById("${areaControl}_provience").value!="")
  				document.getElementById("${areaControl}").value=document.getElementById("${areaControl}_provience").value;
  			else document.getElementById("${areaControl}").value="";
  		}
  		##初始化有初始地区编号的控件
  		function ${areaControl}_hasValue()
		{
			 ${areaControl}_initProvince();
			if(areaNumValue.length>0 && areaNumValue.length<7)
			{
				document.getElementById("${areaControl}_provience").value=${areaControl}_value.substring(0,2);
			}
			if(areaNumValue.length>2 && areaNumValue.length<7)
			{
				 ${areaControl}_initCity();
				document.getElementById("${areaControl}_city").value=${areaControl}_value.substring(0,4);
			}
			if(areaNumValue.length>2 && areaNumValue.length<7)
			{
				 ${areaControl}_initTown();
				document.getElementById("${areaControl}_town").value=${areaControl}_value;
			}
		}
	#if(${areaNumID})
		document.onLoad=${areaControl}_hasValue();
	#else 
		document.onLoad=${areaControl}_initProvince();
	#end 
</script>
##parse("/template/xhtml/controlfooter.vm")
</nobr>

页面上调用模板的代码为:

<ww:textfield name="areaNum" value="110501" template="AreaControl.vm" theme="xhtml"  ></ww:textfield>

 

取值没有问题,但是当需要把获取的地区编号传到控件里时怎么也不能使控件选取到需要的状态,那位知道怎么回事,指定一下,先谢过了!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值