文档章节

开发自定义JSF组件(5) 在JSP中用JSF组件

zhuzhiou
 zhuzhiou
发布于 2013/05/27 22:01
字数 851
阅读 1.9K
收藏 4

#程序员薪资揭榜#你做程序员几年了?月薪多少?发量还在么?>>>

完整的教材:

  1. 开发自定义JSF组件(1) HelloWorld

  2. 开发自定义JSF组件(2) 使用Render渲染器

  3. 开发自定义JSF组件(3) 使用绑定变量

  4. 开发自定义JSF组件(4) 保存状态与恢复状态

  5. 开发自定义JSF组件(5) 在JSP中用JSF组件

采用JSF架构的应用,也有很多项目是使用jsp而不是facelets。如果要在JSP里使用JSF组件,还得编写jsp的标签库,不过与JSP标签又不尽相同,下面我再次重构HelloWorld项目,看看JSP页面如何使用<ida:hellWorld />标签。

开发环境:

  • Windows 7

  • IntelliJ IDEA 12.1.2

  • jboss-6.1.0.Final

  • JSF 1.2

HelloWorld的 重构过程:

1、新建HelloWorldTag,JSF1.2继承UIComponentELTag,网上很多教材都是JSF1.1版本的,继承的是UIComponentTag,这个类在JSF1.2已过时。

public class HelloWorldTag extends UIComponentELTag {
    private static final String COMPONENT_TYPE = "com.regaltec.faces.HelloWorld";

    private static final String RENDERER_TYPE = "com.regaltec.faces.render.HelloWorld";

    private ValueExpression name;

    public ValueExpression getName() {
        return name;
    }

    public void setName(ValueExpression name) {
        this.name = name;
    }

    @Override
    protected void setProperties(UIComponent component) {
        super.setProperties(component);
        component.setValueExpression("name", name);
    }

    @Override
    public void release() {
        super.release();
        name = null;
    }

    @Override
    public String getComponentType() {
        return COMPONENT_TYPE;
    }

    @Override
    public String getRendererType() {
        return RENDERER_TYPE;
    }
}

HelloWorldTag的属性与UIHelloWorld类似,事实上HelloWorldTag在这里只是做一个适配。HelloWorldTag必须重载setProperties、getComponentType、getRendererType这3个方法,getComponentType、getRendererType这2个方法用来确定一个视图渲染器,而setProperties方法就是将tag里的属性转换UIComponent组件中了。

注:使用a4j的reRender时,是不会调HelloWorldTag这个类的,这跟jsf生命周期有关。

2、在WEB-INF目录下新建uicomponent.tld,这是JSP标签库描述文件。

<?xml version="1.0" encoding="ISO-8859-1"?>
<taglib xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-jsptaglibrary_2_1.xsd" version="2.1">
    <tlib-version>1.0</tlib-version>
    <short-name>ida</short-name>
    <uri>http://www.regaltec.com/ida40</uri>
    <tag>
        <name>helloWorld</name>
        <tag-class>com.regaltec.faces.taglib.HelloWorldTag</tag-class>
        <body-content>empty</body-content>
        <attribute>
            <name>name</name>
            <required>false</required>
            <deferred-value>
                <type>java.lang.String</type>
            </deferred-value>
        </attribute>
    </tag>
</taglib>

3、就这样我们就完成重构工作了,但重构前我们的web应用都是跑facelets页面的,为了跑jsp页面,还得重新配置web.xml及faces-config.xml这2个文件。

删除web.xml的facelets配置

<context-param>
    <param-name>javax.faces.DEFAULT_SUFFIX</param-name>
    <param-value>.xhtml</param-value>
</context-param>
<context-param>
    <param-name>facelets.LIBRARIES</param-name>
    <param-value>/WEB-INF/uicomponent.taglib.xml</param-value>
</context-param>

删除faces-config.xml的facelets配置

<view-handler>com.sun.facelets.FaceletViewHandler</view-handler>

4、新建jsp页面进行测试,这里简单的将helloWorld.xhtml转换为helloWorld.jsp页面。

<!DOCTYPE html>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="h" uri="http://java.sun.com/jsf/html" %>
<%@ taglib prefix="f" uri="http://java.sun.com/jsf/core" %>
<%@ taglib prefix="a4j" uri="http://richfaces.org/a4j" %>
<%@ taglib prefix="ida" uri="http://www.regaltec.com/ida40" %>
<html>
<f:view>
<head>
    <title>Hello World JSP</title>
</head>
<body>
    <a4j:form>
        <h:panelGrid columns="3">
            <h:outputText value="姓名:" />
            <h:inputText value="#{helloWorldBean.name}" />
            <a4j:commandButton value="确定" reRender="out" />
        </h:panelGrid>
    </a4j:form>
    <h:panelGroup id="out">
        <ida:helloWorld name="#{helloWorldBean.name}" />
    </h:panelGroup>
</body>
</f:view>
</html>

启动jboss打开应用,如下图,在文本输入框里敲入世界点击确定,文本框下方显示 你好,世界!

以上代码在jboss-6.1.0.Final调试通过,感谢百度云网盘提供源码下载

© 著作权归作者所有

zhuzhiou
粉丝 5
博文 9
码字总数 8126
作品 0
广州
技术主管
私信 提问
加载中

评论(0)

开发自定义JSF组件(1) HelloWorld

完整的教材: 开发自定义JSF组件(1) HelloWorld 开发自定义JSF组件(2) 使用Render渲染器 开发自定义JSF组件(3) 使用绑定变量 开发自定义JSF组件(4) 保存状态与恢复状态 开发自定义JSF组件(5)...

zhuzhiou
2013/05/19
1.4K
7
使用技巧:怎样提高J2EE项目的开发速度

在J2EE技术体系中,往往被灌输了太多容器的概念,什么EJB容器、Servlet容器等等,而开发过程也在开发、配置、部署之间迭代与反复;如此一来常会出现令人尴尬的状况:往往花几分钟时间去改一个...

宇见未来
2012/11/25
188
0
JSF2.1 代码示例(包含国际化,类型转换,验证器,监听器等)

JSF2.1 代码示例(包含国际化,类型转换,验证器,监听器等) 自己做的一个登录的例子,涵盖了jsf中的国际化,类型转换,验证器,监听器等 学了jsf1.2的流程 ,现在该学jsf2.1了, 废话少说,上...

满风
2012/07/18
2.1K
2
JSF学习入门实例之hello world版

JSF学习入门实例之hello world版,JSF 以MVC 模式为基 础 ,与 Struts 不同, JSF 的目标 是希望以一个与Swing 相类似的方式来开发网页 ,因此,从 JSF 的 结 构 图 当中,他的核心概念不是页...

李强s
2011/06/05
333
0
用NetBeans6.x开发VJF程序

用NetBenas6.X开发Visual Web JSF程序 在JSF Summary文章中,我们用一个Login页面的例子介绍了如何用NetBeans6.1和JSF1.2开发Web程序。这个例子中,我们将使用(并推荐)用Visual Web JSF来进...

长平狐
2012/08/28
68
0

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周五乱弹 —— 头发和不要头发,你总要选一个

Osc乱弹歌单(2020)请戳(这里) 【今日歌曲】 @薛定谔的兄弟 :分享洛神有语创建的歌单「我喜欢的音乐」: 《雾 缀じた街 ふたつのかげ》- Porkkana 手机党少年们想听歌,请使劲儿戳(这里)...

小小编辑
今天
41
0
一道 算法题 引发的 ‘xx现场’

请 熟悉的语言 去 验证 在输入框中输入的是否是一个正确的网址 初次读题萌新有点 不知所措的样子一查 MDN 吓一跳 ----- 一个不怎么熟悉的方法跳出眼边URL() 构造函数返回一个新创建的 ...

酒窝yun过去了
今天
19
0
如何检查jQuery中是否已选中复选框? - How to check whether a checkbox is checked in jQuery?

问题: I need to check the checked property of a checkbox and perform an action based on the checked property using jQuery. 我需要检查复选框的checked属性,并使用jQuery根据check......

技术盛宴
今天
12
0
mongoose 使用

http://www.mongoosejs.net/ 编写MongoDB验证,转换和业务逻辑是非常麻烦的. 所以Mongoose应运而生了. const mongoose = require('mongoose');mongoose.connect('mongodb://localhost/te......

东东笔记
今天
30
0
微服务

什么是微服务? 使用一套小服务来开发单个应用的方式,每个服务运行在独立的进程里,一般采用轻量级的通讯机制互联,并且他们可以通过自动化的方式部署。 微服务的特征 单一职责 轻量级通信 ...

鸿FW
今天
23
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部