今天又遇到了一个小小的问题,就是struts中用了struts标签后,如何设定option, radio 默认值!这个好像是struts标签的一个bug吧。他的tld里,没定义selected或者checked的属性,不过用javascript可以解决。
 
今天又遇到了一个小小的问题,就是struts中用了struts标签后,如何设定默认值!这个好像是struts标签的一个bug吧。他的tld里,没定义selected或者checked的属性,不过用javascript可以解决。
Radio单选标签:
<html:radio property="tecvideotype" value="长型">长型</html:radio>
<html:radio property="tecvideotype" value="圆型">圆型</html:radio>
如果要设定打开页面的时候,是选中"长型"还是"圆型",该怎么样 呢?<html:radio>的定义标签没有selected这样的属性,所以不能写成<html:radio property="tecvideotype" value="长型" selected>长型</html:radio>这种样子之类。查了前人的解决办法,就是干脆不 用<html:radio>,直接写成HTML标签。
HTML单选标签:
<input name="tecvideotype" type="radio" value="单选" checked>长型
<input name="tecvideotype" type="radio" value="单选">圆型
这样当然可以解决默认选项的问题,但是因为现在的项目是用FormBean和validate绑定验证的,如果用HTML标签就不能统一验证了。只能选择其他的路解决了。
我现在的需要是这样子的, step1 --> step2 --> step3 --> step4 --> step5, 相当于一页一页的填写,最后提交。每一页又要求可以返回上一页重新填写,step1 <--> step2 <--> step3 <--> step4 <--> step5,路径是双向的。分析了一下,为了不影响Action层的代码,在每一页用javascript处理默认状态最为合适。
下面是javascript的代码:
 function initTecVideoType(value){
      var videotype = document.getElementsByName("tecvideotype");
      var len = videotype.length;
      var i=0;
      for(;i<len;i++){
       if(value == videotype[i].value){
        videotype[i].checked=true;
        break;
       }
      } 
     }
在页面初始的时候用<body onload="initTecVideoType(value)">加载上面的js。然后传一个value和tecvideotype.value比较,来设置默认值。

下拉菜单也是同理:
<html:select property="mamtsharedept" styleClass="input5">
       <html:option value="朝阳区派出所">朝阳区派出所</html:option>
       <html:option value="东城区派出所">东城区派出所</html:option>
       <html:option value="西城区派出所">西城区派出所</html:option>
</html:select>
javascript的代码:
function initMamtShareDept(dept){
 var sharedept = document.getElementsByName("mamtsharedept");
 sharedept[0].value=dept;
}