`
hejianhuacn
  • 浏览: 70069 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

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

阅读更多

在使用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>

 

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

分享到:
评论
3 楼 hejianhuacn 2008-02-20  
问题终于解决了,是因为DWR远程调用返回的时间差导致,等有空了在Blog里把这个问题整理一下
2 楼 hejianhuacn 2008-02-19  
<p>我修改了前台,使用&lt;ww:param&gt;标签把值传到了模板中,这样在模板里可以取到值</p><pre name='code' class='html'>&lt;ww:textfield name="areaNum"  template="AreaControl.vm" theme="xhtml"  &gt;
&lt;ww:param name="areaValue" value="110501"/&gt;
&lt;/ww:textfield&gt;</pre><p>模板也作了修改,内容为:</p><pre name='code' class='java'>&lt;nobr&gt;
#*
地区编码规则:省份2位编码
    市4位
    区/县6位
*#
##parse("/template/xhtml/controlheader.vm")
##获得页面控件的name
#set ($areaControl=$parameters.name)
##获得需要初始化的值
#set ($areaValue=$parameters.areaValue)
&lt;select name="${areaControl}_provience" onchange="${areaControl}_initCity()"&gt;
&lt;option value=""&gt;请选择省份&lt;/option&gt;&lt;/select&gt;
&lt;select name="${areaControl}_city" onchange="${areaControl}_initTown()"&gt;
&lt;option value=""&gt;请选择城市&lt;/option&gt;&lt;/select&gt;
&lt;select name="${areaControl}_town" onchange="${areaControl}_initValue()"&gt;
&lt;option value="" &gt;请选择区县&lt;/option&gt;&lt;/select&gt;
&lt;input type="hidden" name="${areaControl}"
##判断是否有初始化值
#if(${areaValue})
value="${areaValue}"
#else
value=""
#end
&gt;
&lt;/nobr&gt;
&lt;script language="javascript"&gt;
var ${areaControl}_value="${areaValue}";
  ##初始化省份信息
  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(${areaControl}_value.length&gt;0 &amp;&amp; ${areaControl}_value.length&lt;7)
{
dwr.util.setValue("${areaControl}_provience",${areaControl}_value.substring(0,2));//<span style='background-color: #ff0000;'>现在只有这里不工作,为什么?</span>
AreaDeal.getCity(${areaControl}_value.substring(0,2),${areaControl}_dealCity);
}
if(${areaControl}_value.length&gt;2 &amp;&amp; ${areaControl}_value.length&lt;7)
{
AreaDeal.getTown(${areaControl}_value.substring(0,4),${areaControl}_dealTown);
dwr.util.setValue("${areaControl}_city",${areaControl}_value.substring(0,4));//<span style='background-color: #ff0000;'>这里也不工作</span>
}
if(${areaControl}_value.length&gt;4 &amp;&amp; ${areaControl}_value.length&lt;7)
{
dwr.util.setValue("${areaControl}_town",${areaControl}_value);//<span style='background-color: #ff0000;'>还有这里</span>
}
}
#if(${areaValue})
document.onLoad=${areaControl}_hasValue();
#else
document.onLoad=${areaControl}_initProvince();
#end
&lt;/script&gt;
##parse("/template/xhtml/controlfooter.vm")
&lt;/nobr&gt;</pre><p>根据页面出过来的值,省、市和区县都进行了初始化:<img src='http://hejianhuacn.iteye.com/upload/picture/pic/7986/99eba990-6729-3a6e-9235-cfa56c33c3a1.jpg ' border='0' height='280' alt='效果图' width='581'/></p><p>问题是该选中的项还是没有被选中,这是为什么?</p>
1 楼 neptune 2008-02-19  
你每次提交都要保存好,每个菜单上的当前的值,否则就会丢失。

相关推荐

    Velocity模板入门DEMO

    Velocity模板语言(Velocity Template Language,简称VTL)是Apache软件基金会的Velocity项目中的一部分,它是一种用于生成动态网页内容的模板引擎。Velocity以其简洁、易读的语法,为Java开发者提供了一种高效的...

    velocity实现邮件模板定制

    Velocity提供了一种灵活的方式,允许我们定义变量并在模板中引用它们。例如,我们可以创建一个`user`对象,其中包含收件人的姓名、邮箱地址等信息,然后在模板中用`${user.name}`和`${user.email}`来引用这些值。 ...

    SpringBoot Velocity 代码生成模板

    SpringBoot集成Velocity代码生成模板是现代Java开发中的一个重要工具,它极大地提高了开发效率,尤其是在处理大量数据表映射到业务层代码时。Spring Boot作为一款轻量级的框架,简化了初始化和配置过程,而Velocity...

    Velocity实现模板(详细步奏)

    Velocity 是一款开源的模板引擎,它为 Java 应用程序提供了灵活的模板处理能力,尤其适用于分离应用程序的表示层逻辑和业务逻辑。Velocity 提供了一种简单的模板语言(Velocity Template Language,VTL),使得非...

    Velocity模板使用指南中文版

    ** Velocity模板语言简介** Velocity是Apache软件基金会的一个开源项目,它是一种...通过学习这本《Velocity模板使用指南中文版》,你将全面了解Velocity模板语言的使用,从而在项目开发中更高效地实现动态内容生成。

    velocity模板使用指南中文版

    Velocity 模板使用指南中文版 Velocity 是一种流行的模板引擎,广泛应用于Java 和 .Net 平台。它提供了一个灵活、可扩展的模板语言,能够根据需要生成动态内容。本文档是 Velocity 模板使用指南中文版,旨在帮助...

    Velocity_中文手册

    Velocity是一个基于Java的模板引擎,它的主要用途是将动态内容嵌入到Web页面中。模板引擎是一种将模板(template)和数据结合生成文档的软件。Velocity通过使用简单而功能强大的脚本语言——Velocity模板语言...

    Velocity模板引擎Velocity模板引擎

    Velocity模板引擎Velocity模板引擎Velocity模板引擎Velocity模板引擎Velocity模板引擎Velocity模板引擎Velocity模板引擎Velocity模板引擎Velocity模板引擎Velocity模板引擎

    Velocity模板解析

    - **变量引用**:在Velocity模板中,通常使用`$variable`来引用Java对象的属性,例如`$user.name`表示获取名为"user"的对象的"name"属性。 - **指令**: - `#set`:用于赋值,如`#set($count = 1)`,将$count变量...

    Velocity模板引擎技术在Java Web中的应用.pdf

    "Velocity模板引擎技术在Java Web中的应用" Velocity模板引擎技术是Java Web开发中的一种重要技术,旨在解决Java Web页面视图和业务逻辑的耦合问题。通过使用Velocity模板引擎技术,可以将Java Web页面视图和业务...

    Velocity模板语言介绍

    Velocity是一种基于Java的模板引擎(template engine),它使得非技术背景的人员能够轻松地使用一种简洁的模板语言来引用由Java代码所定义的对象。这种特性使得Velocity成为了连接Java编程与前端设计的理想桥梁。 ###...

    SpringBoot集成Mybatis,velocity模板展示数据

    在SpringBoot中,我们可以通过VelocityTools来配置 Velocity环境,并结合Spring的ModelAndView对象,将数据传递给模板进行渲染。 集成Velocity模板引擎的步骤包括: 1. 添加Velocity和VelocityTools依赖。 2. 配置...

    Velocity--java的模板引擎

    在Velocity中,View就是模板文件(.vm),它包含静态文本和Velocity指令,Model则是Java对象,Controller的工作由Velocity Engine完成,它解析模板,将Java对象的数据嵌入到模板中,生成最终的HTML或其他格式的输出...

    Velocity模板实例

    Velocity模板实例 Velocity模板实例 Velocity模板实例 Velocity模板实例

    Velocity模板应用

    在Velocity模板中,数据通常是通过`Context`对象传递的。在Java代码中,开发者可以创建一个`VelocityContext`实例,然后将Java对象放入上下文,这些对象在模板中可以通过它们的属性进行访问。例如: ```java ...

    velocity文档(Velocity1.4java开发指南中文版,Velocity1.4模板使用指南中文版中文版)

    在模板中,开发者可以插入变量和控制结构,这些变量会由 Velocity 引擎替换为实际的值。VTL 的语法简洁且易于理解,有助于提高开发效率。 ** Velocity 的主要特点** 1. **简洁性**:Velocity 的模板语言设计简单,...

    测试模板Velocity.docx

    在给定的文件信息中, Velocity 模板语言被用于生成一个文档模板,模板中包含了多个变量,如送审签日期、处理人、所在处室、电话、标题、文件类型等,这些变量将被替换为实际的数据以生成最终的文档。 Velocity ...

Global site tag (gtag.js) - Google Analytics