jsf

我建了一个jsf的群,群号是20115298
加进来,探讨一下吧

解决方案 »

  1.   

    我在HtmlTableRendererBase中从encodeBegin看起,看到RendererUtils.renderChild(facesContext, component);这一句
    在RendererUtils中,我找到renderChild,它调用了child.encodeBegin(facesContext);
    在UIComponentBase中,我又找到encodeBegin方法,它居然又跑到 renderer.encodeBegin(context, this);,这简直是一个循环,这中间是怎么回事?????
      

  2.   

    JSF encode HTML 可以在3个地方做:Tag,如果 tag.getComponentType() 有值 会用这个值到 faces-config.xml 等配置文件中找对应的 Component , 然后用它的 component.encodeBegin, 再或者  tag.getRenderType() 有值,也到 faces-config.xml 等配置文件中找对应的 renderKit 
    用它来 encodeBegin , 用 component 的好处是可以动态计算,因为生命周期开始后就可以用 Component, 但是 Tag 是在 renderResponse 阶段,有些功能不能实现。
    用 renderKit 继承了 component 的优点,同时可以挂接,比如 不同的浏览器或是 WAP 等不同客户端 提供不同的 RenderKit.
    比如我的 <h:div> 
    TagClass 中 :
    public class DivTag extends ... {
    public String  getComponentType(){
      return "javax.faces.div";
    }
    }faces-config.xml: 
    <component-type>javax.faces.div</xxx>
    <component-class>xxx</...>Component Java :Div :
     public void encodeBegin(FacesContext ctx){
    if(isRendered){ 
       ResponseWriter out = ctx.getResponseWriter();
      
       out.startElement("div",this);   out.writeAttribute(xxxx,xxx,xxx );
    }
     }public void encodeEnd(FacesContext ctx){
      if(isRendered){
       ResponseWriter out = ctx.getResponseWriter();
     out.endElement("div");
     }
    }
      

  3.   

    我想获得到HtmlTableRendererBase中得到的数据,那要怎么得到呢