emu in blogjava

  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  171 随笔 :: 103 文章 :: 1052 评论 :: 2 Trackbacks
struts 的radio标记的增强

写struts的html标记的人不知道是不是对html标记不熟,写出来的标记怎么怪里怪气的,id标记被用来绑定bean了,我还以为不支持html的id属性了,不小心看到org.apache.struts.taglib.html.BaseHandlerTag的prepareStyles()方法里面,居然赫然写着:
        if (styleId != null) {
            styles.append(" id=\"");
            styles.append(getStyleId());
            styles.append("\"");
        }
原来要用styleId属性来定义html的id属性,不看源码你敢这么猜吗,怎么看styleId都象是个样式有关的属性嘛,要定义html的id属性,如果不能用id至少也应该叫HTMLID或者tagId之类的名字嘛。ok,源码都看了,那我们用styleId也成,可是看看radio标记就实在是笨了:
    public int doAfterBody() throws JspException {
        if (this.bodyContent != null) {
            String value = this.bodyContent.getString().trim();
            if (value.length() > 0) {
                this.text = value;
            }
        }
        return (SKIP_BODY);
    }
你说我把文字括到<html:radio>text</html:radio>标记中间为的是什么?当然这个文字要和radio绑定啦。可是上面的代码居然直接把文字往生成的<input type="radio"...>标记后面一丢了事,有这么不负责的嘛?
还好咱java和html都还懂一点。自己写个类:
package com.reuse.common.web.tag;
import javax.servlet.jsp.JspException;
public class RadioTag extends org.apache.struts.taglib.html.RadioTag{
  public int doAfterBody() throws JspException {
    if (this.bodyContent != null) {
        String value = this.bodyContent.getString().trim();
        if (value.length() > 0) {
            this.text = "<label for=\""+getStyleId()+"\" "+
                prepareEventHandlers()+
                prepareStyles().replaceAll(" id=\""+getStyleId()+"\"","")+
                ">"+value+"</label>";
        }
    }
    super.setStyleId(null);
    return (SKIP_BODY);
  }
  static int idCount=0;
  public int doStartTag() throws JspException {
    if (super.getStyleId() == null){
      super.setStyleId("RadioTag_"+ ++idCount);
     }
    return super.doStartTag();
  }
}
然后再在WEB-INF下面找到struts-html.tld,把
<tagclass>org.apache.struts.taglib.html.RadioTag</tagclass>
改为
<tagclass>myPackage.RadioTag</tagclass>

这下整个世界都清凉多了。回家过五一了,下次再对checkbox开刀吧


struts 的checkbox标记的增强

五一过完,checkbox也开了刀了:

package com.reuse.common.web.tag;

import javax.servlet.jsp.JspException;
public class CheckboxTag
    extends org.apache.struts.taglib.html.CheckboxTag
{
  public int doAfterBody() throws JspException {
  if (this.bodyContent != null) {
      String value = this.bodyContent.getString().trim();
      if (value.length() > 0) {
          this.text = "<label for=\""+getStyleId()+"\" "+
              prepareEventHandlers()+
              prepareStyles().replaceAll(" id=\""+getStyleId()+"\"","")+
              ">"+value+"</label>";
      }
  }
  super.setStyleId(null);
  return (SKIP_BODY);
}
static int idCount=0;
public int doStartTag() throws JspException {
  if (super.getStyleId() == null){
    super.setStyleId("CheckBoxTag_"+ ++idCount);
   }
  return super.doStartTag();
}

}

posted on 2005-05-18 14:20 emu 阅读(1509) 评论(2)  编辑  收藏 所属分类: java技术

评论

# re: struts 的radio和checkbox标记的增强 2005-10-21 14:00 wzy
现在我都放弃了struts 的标签 鬼理鬼气的
用velocity   回复  更多评论
  

# re: struts 的radio和checkbox标记的增强 2006-01-11 03:47 寒暮云
痛苦中......  回复  更多评论
  


只有注册用户登录后才能发表评论。


网站导航: