用NetBeans6.x开发VJF程序

来源:互联网 发布:淘宝店铺首页宽屏代码 编辑:程序博客网 时间:2024/05/22 17:44
用NetBenas6.X开发Visual Web JSF程序


    在JSF Summary文章中,我们用一个Login页面的例子介绍了如何用NetBeans6.1和JSF1.2开发Web程序。这个例子中,我们将使用(并推荐)用Visual Web JSF来进行同样的开发。本文将比较两种技术的区别和相同之处。我个人认为VJF是在JSF规范上开发出来的更方便的框架,提供了更多的高级tag,设计了页面Bean,提供了可视化的开发环境,大大提升了开发效率。不过既然是以JSF为基础,因此JSF的基础知识还是非常重要,建议先阅读JSF Summary,再阅读本文。

理解现向导为我们做了什么

 



   创建工程很简单,选择Web应用程序,在向导中选择Visual Web Java Server Faces,然后设置工程名称为VJFDemo。现在看看向导为我们做了什么?
   向导创建了一个Page1.jsp文件,里面的源代码如下:
<?xml version="1.0" encoding="UTF-8"?>
<!--
    Document   : Page1
    Created on : 2008-6-3, 10:05:51
    Author     : freebird
-->

<jsp:rootversion="2.1" xmlns:f="http://java.sun.com/jsf/core"xmlns:h="http://java.sun.com/jsf/html"xmlns:jsp="http://java.sun.com/JSP/Page"xmlns:webuijsf="http://www.sun.com/webui/webuijsf">
    <jsp:directive.page contentType="text/html;charset=UTF-8" pageEncoding="UTF-8"/>
    <f:view>
        <webuijsf:page id="page1">
            <webuijsf:html id="html1">
                <webuijsf:head id="head1">
                    <webuijsf:link id="link1" url="/resources/stylesheet.css"/>
                </webuijsf:head>
                <webuijsf:body id="body1" style="-rave-layout: grid">
                    <webuijsf:form id="form1">
                    </webuijsf:form>
                </webuijsf:body>
            </webuijsf:html>
        </webuijsf:page>
    </f:view>
</jsp:root>

    这里我们看到很多不熟悉的标记,这些标记有个来头,叫做Project Woodstock 4.3 Tag Library。具体用法可以参考下面的网址:
http://webdev2.sun.com/woodstock-tlddocs/index.html
    Page1.jsp中,红色的那行代码,是引入各种tag的xml语法。 xmlns:webuijsf="http://www.sun.com/webui/webuijsf"就是vjf的tag的xml语法引入标记。<webuijsf:page>标记是必须的,并且后面必须使用<webuijsf:html>和<webuijsf:head>标记。
   
   VJF的一个特征是每个jsp页面,都有一个JavaBean对应,我们称为页面Bean。如果JSP页面包含了UI控件,那么对应的页面Bean就包含和控件对应的组件对象。页面Bean也可以添加生命周期方法和事件处理方法。下面的代码上,我都增加了自己的注释。
 
package vjfdemo;

import com.sun.rave.web.ui.appbase.AbstractPageBean;
import javax.faces.FacesException;

public class Page1 extends AbstractPageBean {

    //向导会产生并实现该方法,主要是UI组件的初始化,不要修改该方法。
    private void _init() throws Exception {
    }

    public Page1() {
    }

    //当网页被访问的时候,init方法将被调用
    @Override
    public void init() {
        super.init();
        // 在这里添加初始化的代码,该代码将在UI组件被初始化之前调用
        
       
        // 这里代码不可以修改
        try {
            _init();
        } catch (Exception e) {
            log("Page1 Initialization Failure", e);
            throw e instanceof FacesException ? (FacesException) e: new FacesException(e);
        }
       
        //在这里添加自己的代码,该代码将在UI组件初始化结束后调用
    }

    //这个方法在恢复视图阶段完成之后,任何事件处理之前被调用。这个方法只有在有form提交的情况下才会被调用。你可以改写这个方法,为你的后面事件处理做准备。
    @Override
    public void preprocess() {
    }

    //该方法会在绘制网页前被调用,如果导航到别的页面,这个方法不会被调用。改写这个方法,可以为后面的绘制网页做准备。
    @Override
    public void prerender() {
    }

    //绘制网页结束后,该方法会被调用。改写这个方法通常是为了释放资源。
    @Override
    public void destroy() {
    }
   

    protected SessionBean1 getSessionBean1() {
        return (SessionBean1) getBean("SessionBean1");
    }


    protected RequestBean1 getRequestBean1() {
        return (RequestBean1) getBean("RequestBean1");
    }

    protected ApplicationBean1 getApplicationBean1() {
        return (ApplicationBean1) getBean("ApplicationBean1");
    }

}
    getSessionBean1/getRequestBean1/getApplicationBean1后面会仔细介绍如何使用。
   
    向导也会为我们配置Page1/SessionBean1/RequestBean1/ApplicationBean1。下面是faces-config.xml文件的内容:
<?xml version='1.0' encoding='UTF-8'?>

<!-- =========== FULL CONFIGURATION FILE ================================== -->

<faces-config version="1.2"
    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-facesconfig_1_2.xsd">
    <managed-bean>
        <managed-bean-name>SessionBean1</managed-bean-name>
        <managed-bean-class>vjfdemo.SessionBean1</managed-bean-class>
        <managed-bean-scope>session</managed-bean-scope>
    </managed-bean>
    <managed-bean>
        <managed-bean-name>Page1</managed-bean-name>
        <managed-bean-class>vjfdemo.Page1</managed-bean-class>
        <managed-bean-scope>request</managed-bean-scope>
    </managed-bean>
    <managed-bean>
        <managed-bean-name>ApplicationBean1</managed-bean-name>
        <managed-bean-class>vjfdemo.ApplicationBean1</managed-bean-class>
        <managed-bean-scope>application</managed-bean-scope>
    </managed-bean>
    <managed-bean>
        <managed-bean-name>RequestBean1</managed-bean-name>
        <managed-bean-class>vjfdemo.RequestBean1</managed-bean-class>
        <managed-bean-scope>request</managed-bean-scope>
    </managed-bean>
</faces-config>
    看到这里你就明白了,其实这些Bean都是托管Bean。

编写登录页面

    先介绍一下一些有用的资源,这篇文章可以帮助我们学会如何用NetBeans6.1开发VJF程序:http://www.netbeans.org/kb/60/web/intro_zh_CN.html。开发过程这篇文章就不再详细描述了,太疲倦了。
    请参考我的VJFDemo工程。注意,原来User类不再是托管Bean,而变成了业务逻辑类,扮演Model角色。