zoukankan      html  css  js  c++  java
  • 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 hospital.tongren.oa.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开刀吧。

    author: emu(黄希彤)
  • 相关阅读:
    樊登读书 增长黑客
    樊登读书 不妥协的谈判
    樊登读书 反脆弱 MD
    樊登读书 思考快与慢
    JS常见的API扩展形式(prototype、jquery、vue插件封装)以及怎样设计出易扩展的表单验证功能?
    [JS设计模式]:策略模式及应用-计算奖金、表单验证的实现(5)
    JS之Math.sin与Math.cos介绍及应用-实现鼠标点击后的烟花效果
    webpack系列-externals配置使用(CDN方式引入JS)
    vue+webpack工程中怎样在vue页面中引入第三方非标准的JS库或者方法
    2-class.com
  • 原文地址:https://www.cnblogs.com/stonehuang/p/6603240.html
Copyright © 2011-2022 走看看