关于struts2动态数据验证回显问题



     struts2对于server端的验证,可以采用两种, 1:重写validate方法, 2:用validate框架进行,先说一下validate方法, 以下图为例.

 

图中婚姻状况及性别要求动态生成,即从数据库中取得数据,当然这个有点多此一举,就拿它当个例子吧.首先来说如果验证失败的话要求除密码以外其它的保持用户上次的内空不变.

 

如果采用validate的编码方式,要在validateSave的方法中取到sex的数据集,marriage的数据集,当然也可以写到prepareSave的方法中,这样在每次调用save方法之前就会提前取出数据,但是不是每次验证都不成功,而prepareSave方法无论成功与否都会执行,所以还是在失败的时候去取返回数据的集合比较可取一些,即在validateSave方法中先验证合法性如果不合法则取页面需要的集合返回。(代码略)

 

   看一下前台的标签怎么写

<s:select id="marrage" name="user.marrage" list="%{marrageList}" listKey="id" listValue="value" value="%{user.marrage}"/>

 这里要值得注意的是要加上value这个属性完全是为了回显做的,struts2的自动赋值不大敢用,有时就是加不上去,如果只是用html的标签那就更得加上为佳.

 

如果要用validate框架,那么动态的数据取值问题要放到prepareSave中做了,但也可以用Ajax的方式去取值,页面最好用html的标签,回显的时候把用户上次选的放值在ajax中选中就完了,当然我指的是那两个动态的数据.

                                var xmlhttp;
		function push(params, callback){
		 
		    if(!params ) var params = {};
			if( params.method == undefined ) params.method = "GET";
			if( params.url == undefined ) params.url = "";
			
		    if(window.ActiveXObject){ 
		        xmlhttp = new ActiveXObject("Msxml2.XMLHTTP.3.0");   
		    }else if(window.XMLHttpRequest){  
		        xmlhttp = new XMLHttpRequest();   
		    } 
		    try{   
		        xmlhttp.onreadystatechange = callback;  
		        xmlhttp.open(params.method, params.url, false);   
		        xmlhttp.send(); 
		           
		    }catch(exception){ 
		    
		        alert("您要访问的资源不存在!");   
		    }
		}

 

 

                 function pushValue(type,instance,selected){
	  var theUrl ="ajax/onResource.action?type="+type;
	  push({url:theUrl,method:"GET"},function(){
		      if(xmlhttp.readyState == 4)
	                     { 
			         var res= eval(xmlhttp.responseText);
				     var typed = document.getElementById(instance);
				     for(var i=0;i<res.length;i++)
				     {
				       var typename =res[i].typeName;
				       var typevalue=res[i].typeValue;
				       var optionItem;
	                                                      if(selected!=""&&selected==typevalue)
	                                                      {
				        optionItem =new Option(typename,typevalue,'',true);
				        
				       }else
				       {
				        optionItem =new Option(typename,typevalue);
				       }
				       typed.options.add(optionItem);
				     }
			         }
		             });
	 }

 

 

window.onload = function(){
		  pushValue("marriage","marriage","${user.marriage}");}

 

 这样就可以用Ajax进行取值及回显了,还有没有别的好办法暂不知,如果有,请告知下谢谢。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值