JSF开发实战(一)

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情
JSF开发实战(一)

bromon原创 请尊重版权

    JSF将是J2EE5.0中所包含的web开发框架,这应该是第一个成为jcp标准,并且随j2eesdk一起发布的web框架,可以看出sun对它的期望很高。JSF最大的竞争对手是tapestry,是apache的产品,但是apache又弄出了个myfaces,是对jsf标准的一个实现。也许你也和我一样,在jsf和tapestry之间犹豫很久,将来从apache的态度上应该可以看出二者的走向。在tss上有一篇比较jsf 1.0与tapestry 3.0的文章,内容很扎实到位:http://www.theserverside.com/articles/article.tss?l=JSFTapestry
JSF的竞争对手不是struts/webwork之流,它们基本上已经是不同阶段上的东西了,放在一起比较意义不大。

    JSF的开发流程和asp.net中所倡导的code behind方式很相似,核心是事件驱动,组件和标签的封装程度非常高,很多典型应用已经不需要开发者去处理http。页面操作会被自动映射到对应的java bean中,后台逻辑只需要同java bean发生交互。整个过程是通过“依赖注入(DI)”来实现的,看来这是目前解偶合的最佳途径啊,spring的影响真是深远。不过正式因为jsf采用了这样的方式,导致开发工作和以前的jsp/struts等都有非常大的不同,需要一定的时间去学习。学习之前建议先对依赖注入有比较清楚的认识,可以参考我的learn Spring in spring系列的第一篇。

    本系列将以两个例子来讲解jsf的基本开发,第一个例子当然是hello world。目前可用的jsf ide不多,ibm要到06年才能放出支持jsf的wtp版本。所以我们的例子基本以手写为主,这样也能让我们有更清楚的认识,同时推荐目前最好的jsf开发工具:myeclipse 4.0 GA。后面的例子将会有jsf和hibernate的内容,它都能给予很好的支持。由于myeclipse并不免费,所以我们除了讲解在ide中如何操作外,还会叙述手动操作的具体内容,以免过于依赖开发工具。用什么服务器都可以,这里采用了jboss 4.0.2。如果你的服务器是高版本的tomcat(5.5+),那么必须要删除它自带的一些包才能很好的支持jsf,具体细节请查看它的文档。

    请自行下载jsf ri和JSTL 1.1。

废话少说,开始了。

    在myeclipse 4.0GA中新建一个web项目,命名为hello,为项目增加对JSTL的支持:


 
在JSTL的版本中选择1.1。
该操作实际上是把jstl.jar和standard.jar加到工程中。

采用类似的操作为项目添加对jsf的支持:myeclipse—add jsf capabilities
如图:
 


其中的jsf implementation是选择使用哪中JSF实现,我们采用的是sun的jsf ri
JSF config path是配置文件的位置,保持不变
URL pattern是jsf servlet的映射方式,有两种选择,具体细节后面说明。
以上操作上是为项目加入了jsf需要的jar和tld文件,并且创建了一个faces-config.xml的配置文件。涉及到的jar有:commons-beanutils.jar    commons-collections.jar        commons-digester.jar    commons-logging.jar    jsf-api.jar        jsf-impl.jar
涉及到了jsf中所有的tld文件。

当前的faces-config.xml文件的内容是:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE faces-config PUBLIC "-//Sun Microsystems, Inc.//DTD JavaServer Faces Config 1.1//EN" "http://java.sun.com/dtd/web-facesconfig_1_1.dtd">

<faces-config>

</faces-config>

环境已经建立好了,现在我们要建立一个程序,它的功能是让用户在表单中输入名字,提交后系统会返回一个问候。使用jsf的以后好处是,开发人员会很自然的把mvc各层分开,不会像使用strtus那样别扭,这一点在后面的开发中感觉得到。

首先开发model层,它是个很简单的bean:
package org.bromon.jsf.model.hello;

public class SayHello {
    public String say(String name)
    {
        return "你好,"+name;
    }
}

在model层中你可以随意的实现业务的数据逻辑,不需要与web层有任何的关系。

下面开发控制层,它负责存取web层的数据,并且调用model层的逻辑:
/**
 * jsf的控制层方法
 * @author bromon
 */
package org.bromon.jsf.control.hello;

import org.bromon.jsf.model.hello.*;

public class HelloDelegater {
   
    //------属性---------
    private String name;//表单中的文本框数据会传到这里
    private String result;//web页会从这里取得运行结果
    private SayHello sayHello;//model层的对象,并不事例化,由系统注入
   
    //-----set/get--------
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public SayHello getSayHello() {
        return sayHello;
    }
    public void setSayHello(SayHello sayHello) {
        this.sayHello = sayHello;
    }
    public String getResult() {
        return result;
    }
    public void setResult(String result) {
        this.result = result;
    }
   
    //-----逻辑方法---------
    public String say()
    {
        this.setResult(sayHello.say(this.getName()));
        return "ok";
    }
}

需要注意的是,属性的名字、set/get方法的名字必须严格按照java bean规范编写,因为它们要被注入依赖时使用。sayHello对象并没有被实例化,它会在运行时由系统注入。

这两个bean当然要在系统中申明,否则无法实现DI。在faces-config.xml文件中添加内容:
<managed-bean>
        <managed-bean-name>SayHello</managed-bean-name>
        <managed-bean-class>
            org.bromon.jsf.model.hello.SayHello
        </managed-bean-class>
        <managed-bean-scope>request</managed-bean-scope>
    </managed-bean>
    <managed-bean>
        <managed-bean-name>HelloDelegater</managed-bean-name>
        <managed-bean-class>
            org.bromon.jsf.control.hello.HelloDelegater
        </managed-bean-class>
        <managed-bean-scope>request</managed-bean-scope>
        <managed-property>
            <property-name>sayHello</property-name>
            <value>#{SayHello}</value>
        </managed-property>
    </managed-bean>

    在后一个bean中,它的sayHello属性被指定要在运行时注入一个org.bromon.jsf.model.hello.SayHello的实例。

下面要编写表示层的页面,只有一个index.jsp:
需要引入两个标签库:

<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
下面是构造jsf标签:

<body>
    <f:view>
        <h:form>
            <h:panelGrid columns="3">
                <h:outputLabel for="name" value="姓名:"/>
                <h:inputText id="name" value="#{HelloDelegater.name}" required="true"/>
                <h:message for="name"/>
               
                <h:outputLabel value="#{HelloDelegater.result}"/>
            </h:panelGrid>
            <h:panelGroup>
                <h:commandButton action="#{HelloDelegater.say}" value="提交"/>
            </h:panelGroup>
        </h:form>
    </f:view>
  </body>

页面中包含了一个文本框和一个label,他们分别被绑定到了HelloDelegater类的两个属性上,具体的绑定工作有系统通过翻转控制的方式调用对应的set/get方式实现。提交按钮被绑定到了HelloDelegater.say方法,该方法会把计算结果赋给result属性,它会在页面中显示出来。
程序执行结果如下:


 

    下一篇文章中,将介绍一个更加复杂的用户管理程序,可以更清楚的看到jsf的特征,还会涉及到jsf的model对象一些组件的使用。
JSF Web开发框架入门与实践 本文还有配套的精品资源,点击获取 简介:JavaServer Faces(JSF)是个基于Java平台的Web开发框架,用于简化Web应用开发,特别是用户交互和表单处理。文章介绍JSF核心概念、组件、FacesContext、转换和验证、导航等,并以《JSF入门》简体中文版作为学习资源,指导读者了解基础架构、生命周期、组件使用及实际应用案例。 1. JavaSe... 阅读详情

相关推荐

JSF完全参考手册:源代码深入解析

本文还有配套的精品资源,点击获取 简介:JavaScript Server Faces(JSF)是Java平台上的MVC框架,用于构建Web应用程序。该参考手册提供了丰富的源代码示例,深入涵盖了JSF组件、事件处理、数据绑定和页面导航等关键概念,以及如何在实际项目中应用。它还可能包含构建配置文件和分章节组织的代码,帮助开发者理解HTTP请求处理、组件与数据模型的绑定,以及A...

weixin_30633869的博客 1506

JSF开发介绍JSF开发介绍

JSF开发介绍JSF开发介绍JSF开发介绍JSF开发介绍JSF开发介绍JSF开发介绍JSF开发介绍JSF开发介绍JSF开发介绍

JSF实战指南:深入理解JSF框架与应用

JavaServer Faces (JSF)个用于构建 Java Web 应用程序的服务器端组件框架。它将复杂的底层架构细节抽象化,允许开发者通过组件化的视图构建用户界面。JSF 的主要作用在于简化 Web 应用开发,提高开发效率,并使得应用程序可以轻松地处理用户交互。JSF 架构包含三个主要部分:用户界面组件模型、服务器端应用程序框架和可扩展的渲染器框架。

weixin_32661831的博客 1537

JSF实例开发教程(经典入门到精通)

JSF开发文档 由浅至深学习JSF开发 从入门到精通系统学习JSF 开发实例

web开发框架——JSF开发实战

JSF开发实战的第(jsf开发实战)演示了如何建立个最简单的JSF应用,从那个例子中我们可以观察到JSF的页面组件是如何与后台的 javabean绑定的,也看到了JSF标签的最基本使用。在本文中我们会演示个更加复杂的应用,它包含了更丰富的JSF标签。    要开发的例子是个用户管理程序,管理员输入帐号与密码登陆,然后它可以看到所有用户的列表,并且可以修改或者删除其中的些数据。利用my

2083

JSF开发

前言:     JavaServer Faces (JSF)种用于构建 Web 应用程序的新标准 Java 框架。它提供了种以组件为中心来开发 Java Web 用户界面的方法,从而简化了开发。JavaServer Faces 还引起了广大 Java/Web 开发人员的兴趣。“企业开发人员”和 Web 设计人员将发现 JSF 开发可以简单到只需将用户界面 (UI) 组件拖放到页面上,而“系统开发人员”将发现丰富而强健的 JSF API 为他们提供了无与伦比的功能和编程灵活性。JSF 还通过将良好构建

gaohuixiang315 828

JavaEE之JSF技术研究与应用实例

前言 JavaServer Faces(JSF)种用于构建Java Web应用程序的标准框架(是Java Community Process规定的JSR-127标准)。它提供了种以组件为中心的用户界面(UI)构建方法[1],从而简化了Java服务器端应用程序的开发。由于由Java Community Process (JCP)推动,属于Java EE5中的技术规范,而受到了厂商的广泛支持。

漫步 3340

jsf实战(中文版)

jsf实战中文版完整版,不再是只有第章节的jsf in action,本书为jsf实战的完整版中文版,格式为pdg格式,是学习jsf本非常不错的书籍

利用MyEclipse JSF开发实战()

JSF开发实战()    JSF将是J2EE5.0中所包含的web开发框架,这应该是第个成为jcp标准,并且随j2eesdk起发布的web框架,可以看出sun对它的期望很高。JSF最大的竞争对手是tapestry,是apache的产品,但是apache又弄出了个myfaces,是对jsf标准的个实现。也许你也和我样,在jsftapestry之间犹豫很久,将来从apache的态度上应该可

Allin's blog 2091

Java Web开发框架专家谈

Java Web 开发框架专家谈                        活动形式及地点 :     51CTO 聊天室地址: http://vchat.51cto.com/   活动时间: 2008 年 12 月25 日 下午 14 : 00--15 : 00   活动背景: Java Web 编程始于 Serv...

华章IT官方博客 187

JSF 组件开发

组件模型的关键考验就是:能否从第三方供应商购买组件,并把它们插入应用程序?与可购买可视 Swing 组件样,也可以购买 Java ServerFaces (JSF) 组件!需要个好玩的日历?可以在开源实现和商业组件之间选择。可以选择购买个,而不是自行开发复杂的基于 Web 的 GUI 组件。JSF 拥有个与 AWT 的 GUI 组件模型类似的组件模型。可以用 JSF 创建可重用组件。但不幸

键者天行 6919

web开发框架——JSF开发实战()

 JSF开发实战的第(jsf开发实战)演示了如何建立个最简单的JSF应用,从那个例子中我们可以观察到JSF的页面组件是如何与后台的javabean绑定的,也看到了JSF标签的最基本使用。在本文中我们会演示个更加复杂的应用,它包含了更丰富的JSF标签。    要开发的例子是个用户管理程序,管理员输入帐号与密码登陆,然后它可以看到所有用户的列表,并且可以修改或者删除其中的些数据。利用my

thinker28754的专栏 738

JSF开发实战

      JSF将是J2EE5.0中所包含的web开发框架,这应该是第个成为jcp标准,并且随j2eesdk起发布的web框架,可以看出sun对它的期望很高。JSF最大的竞争对手是tapestry,是apache的产品,但是apache又弄出了个myfaces,是对jsf标准的个实现。也许你也和我样,在jsftapestry之间犹豫很久,将来从apache的态度上应该可以看出二者的走向

技术就是个纸老虎---为之,则难者亦易矣;不为,则易者亦难矣。 3895
上一篇: JBoss 4.0.2集群指南(二)----建立JMS集群服务
下一篇: 重要通知:本blog全面停止更新
bromon
博客等级 码龄25年 61粉丝 81原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值