`
yaasshole
  • 浏览: 664581 次
文章分类
社区版块
存档分类
最新评论

用NetBeans6.x开发VJF程序

 
阅读更多
用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:root version="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角色。


分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics