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进行取值及回显了,还有没有别的好办法暂不知,如果有,请告知下谢谢。