现在许多浏览器都开始支持html然而当前的ide编辑环境还不能识别html的标签在工作中有应用html的需求想通过开发基于JSF的Html组件包来满足这样的现实需求实现可复用的html表现组件
开始试写第一个标记<h:doctype/>
组件包结构如下
组件的类文件
Java代码
package l;
import ponentUIComponentBase;
/**
* 开始于
* html的DOCTYPE的文档类型声明一个简单的html标记封装
* 最后修改于
* @author 普特工作室
* @version
*/
public class HtmlDoctype extends UIComponentBase {
/**
* 使用组件的类名作为返回组件的家族标识
* @return
*/
@Override
public String getFamily() {
return HtmlDoctypeclassgetName();
}
}
组件的标记处理类
Java代码
package computl;
import lHtmlDoctype;
import computesolHtmlDoctypeRenderer;
import javaxfaceswebappUIComponentELTag;
/**
* 开始于
* 组件的标志处理器类组件的标记类
* 衔接代码让这个组件能在JSP页面上下文中执行从而钩到其它的相关类
* 最后修改于
* @author 普特工作室
* @version
*/
public class HtmlDoctypeTag extends UIComponentELTag {
/**
*
* 直接使用类的全路径名作为组件的类型名
* 此处是衔接代码通过此衔接代码
* 根据获得的组件名在facesconfigxml中找到对应的组件类
* 然后执行组件的处理逻辑
* @return
*/
@Override
public String getComponentType() {
String compontentType = HtmlDoctypeclassgetName();
return compontentType;
}
/**
* 直接使用类的全路径名作为组件的渲染器类型名
* 此处是衔接代码通过此衔接代码
* 根据获得的渲染器名在facesconfigxml中找到对应的渲染器类
* 然后执行组件的渲染处理
* @return
*/
@Override
public String getRendererType() {
String rendererType = HtmlDoctypeRendererclassgetName();
return rendererType;
}
}
组件渲染器类
Java代码
package computesol;
import javaioIOException;
import ponentUIComponent;
import ntextFacesContext;
import ntextResponseWriter;
import javaxfacesrenderRenderer;
/**
* 开始于
* HTML的文档类型渲染器
* 最后修改于
* @author 普特工作室
* @version
*/
public class HtmlDoctypeRenderer extends Renderer {
/**
* 编码组件渲染成Html代码
* @param context
* @param component
* @throws IOException
*/
@Override
public void encodeBegin(FacesContext context UIComponent component) throws IOException {
//从faces上下文环境中获得响应书写器
ResponseWriter writer = contextgetResponseWriter();
//直接把字符串写出不进行字符转义处理
writerwrite(<!DOCTYPE HTML>);
}
}
标记库文件
Xml代码
<?xml version= encoding=UTF?>
<taglib
version=
xmlns=
xmlns:xsi=instance
xsi:schemaLocation= jsptaglibrary__xsd>
<description>用于JSF的html通用标记的JSF封装</description>
<tlibversion></tlibversion>
<shortname>jsf_html</shortname>
<uri>_html</uri>
<tag>
<description>Html的文档类型声明封装</description>
<name>doctype</name>
<tagclass>
computlHtmlDoctypeTag
</tagclass>
</tag>
</taglib>
组件库文件
Java代码
<?xml version= encoding=UTF?>
<!
Document : facesconfigxml
Created on : 年月日 下午:
Author : 普特工作室
Description: JSF组件库的组件注册
>
<facesconfig
xmlns=
xmlns:xsi=instance
xsi:schemaLocation= facesconfig__xsd
version=>
<component>
<description>Html的文档类型声明DOCTYPE</description>
<componenttype>
lHtmlDoctype
</componenttype>
<componentclass>
lHtmlDoctype
</componentclass>
</component>
<renderkit>
<renderer>
<componentfamily>
lHtmlDoctype
</componentfamily>
<renderertype>
computesolHtmlDoctypeRenderer
</renderertype>
<rendererclass>
computesolHtmlDoctypeRenderer
</rendererclass>
</renderer>
</renderkit>
</facesconfig>
组件在Jsp文件中使用
Html代码
<%@page contentType=text/html pageEncoding=UTF%>
<%@taglib prefix=f uri=%>
<%@taglib prefix=h uri=%>
<%@taglib prefix=h uri=_html %>
<!DOCTYPE HTML PUBLIC //WC//DTD HTML Transitional//EN
>
<%
This file is an entry point for JavaServer Faces application
%>
<f:view>
<h:doctype/>
<html>
<head>
<meta httpequiv=ContentType content=text/html; charset=UTF/>
<title>JSP Page</title>
</head>
<body>
<h><h:outputText value=JavaServer Faces/></h>
</body>
</html>
</f:view>
在tomcat上部署运行成功