JSF之UICOMPONENTBASE c中base64之加密解密

通常一个UIComponent包含了两个部分:Behavior和Renderer.两者最好能够分别实现,UIComponent类用来实现Behavior,比如处理事件,通过EL绑定属性等等。专门实现一个Renderer类来负责Encoding和Decoding。Encoding指的是生成可以在客户端显示的标记语言,比如html等,Decoding用来将客户端传来的请求(通常以某种标记语言风格)转换成Java变量。

在进入下一个更加完善一点的UIComponent编程之前,先来看一些基本概念。在前面的例子中,HtmlHelloWorld继承了UIComponentBase类,需要实现getFamily方法。该方法返回的字符串用来表示UIComponent的种类,比如UIInput属于javax.faces.Input,而UICommand属于javax.faces.Command.在faces-config.xml中,我们会将UIComponent和Renderer配对,比如Primefaces中的配置:

javax.faces.Output

javax.faces.Head

org.primefaces.renderkit.HeadRenderer

有了这种配对关系,我们就可以方便的指定哪一种UIComponent使用哪一个Renderer。作为自定义UIComponent,我们可以任意用一个字符串来标志它的UIComponent类的family,如果没有Renderer(也就意味着不需要在faces-config.xml中配置render-kit),可以简单的返回null,第一部分例子就是这样做的。

现在来开发一个helloworld2tag,和前面的功能一样,但是多了一个Renderer负责渲染。首先是UIComponentHtmlHelloWorld2.java的代码:

package com.freebird.component;

import javax.faces.component.UIComponentBase;

import javax.faces.context.ResponseWriter;

import java.io.IOException;

import javax.faces.context.FacesContext;

import java.util.Date;

public class HtmlHelloWorld2 extends UIComponentBase {

@Override

public String getFamily() {

return"helloworld2";

}

}

注意getFamily返回"helloworld2"字符串,后面要用到。然后实现Renderer类HtmlHelloWorld2Renderer.java:

package com.freebird.renderer;

import javax.faces.render.Renderer;

import javax.faces.context.ResponseWriter;

import java.io.IOException;

import javax.faces.component.UIComponent;

import javax.faces.context.FacesContext;

import java.util.Date;

public class HtmlHelloWorld2Renderer extends Renderer {

@Override

public void encodeBegin(FacesContext context,UIComponent component) throws IOException {

}

JSF之UICOMPONENTBASE c中base64之加密解密

@Override

public void encodeChildren(FacesContext context,UIComponent component) throws IOException {

}

@Override

public void encodeEnd(FacesContext context,UIComponent component) throws IOException {

//StringclientId = component.getClientId(context);

//char sep =UINamingContainer.getSeparatorChar(context);

ResponseWriter writer = context.getResponseWriter();

writer.startElement("div", component);

writer.writeAttribute("style", "color : red", null );

writer.writeText("HelloWorld! today is: " + new java.util.Date(),null);

writer.endElement("div");

}

}

现在添加配置信息到helloworld.taglib.xml文件:

helloworld2

HtmlHelloWorld2

HtmlHelloWorld2Renderer

最后添加配置信息到faces-config.xml文件:

HtmlHelloWorld2

com.freebird.component.HtmlHelloWorld2

helloworld2

HtmlHelloWorld2Renderer

com.freebird.renderer.HtmlHelloWorld2Renderer

  

爱华网本文地址 » http://www.aihuau.com/a/25101011/53916.html

更多阅读

C++中stdafx.h是什么意思 c语言stdafx.h

C++ 中stdafx.h中文意思,并且在C++中起到的作用是什么?stdafx就是Standard Application Fram Extend。没有函数库,只是定义了一些环境参数,使得编译出来的程序能在32位的操作系统环境下运行。Windows和MFC的include文件都非常大,即使有

C ++ 中对象或其对象指针的赋值 c语言指针赋值

C++中对象或其对象指针的赋值C++中成员函数的动态绑定:C++中要实现函数的动态绑定,必须在其基类中将函数声明为virtual且在子类中对函数加以实现。然后用一个基类指针指向某一个子类对象,这样才会在函数调用时实现动态绑定。在C++中,只

声明:《JSF之UICOMPONENTBASE c中base64之加密解密》为网友你在哪里分享!如侵犯到您的合法权益请联系我们删除