欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
JR - 精品文章 - JSF開(kāi)發(fā)實(shí)戰(一)
JSF開(kāi)發(fā)實(shí)戰(一)
bromon 原創(chuàng )  (參與分:64783,專(zhuān)家分:3561)   發(fā)表:2005-09-30 15:40   更新:2005-09-30 15:47   版本:1.0   閱讀:1788

JSF開(kāi)發(fā)實(shí)戰(一)

bromon原創(chuàng ) 請尊重版權

    JSF將是J2EE5.0中所包含的web開(kāi)發(fā)框架,這應該是第一個(gè)成為jcp標準,并且隨j2eesdk一起發(fā)布的web框架,可以看出sun對它的期望很高。JSF最大的競爭對手是tapestry,是apache的產(chǎn)品,但是apache又弄出了個(gè)myfaces,是對jsf標準的一個(gè)實(shí)現。也許你也和我一樣,在jsf和tapestry之間猶豫很久,將來(lái)從apache的態(tài)度上應該可以看出二者的走向。在tss上有一篇比較jsf 1.0與tapestry 3.0的文章,內容很扎實(shí)到位:http://www.theserverside.com/articles/article.tss?l=JSFTapestry
JSF的競爭對手不是struts/webwork之流,它們基本上已經(jīng)是不同階段上的東西了,放在一起比較意義不大。

    JSF的開(kāi)發(fā)流程和asp.net中所倡導的code behind方式很相似,核心是事件驅動(dòng),組件和標簽的封裝程度非常高,很多典型應用已經(jīng)不需要開(kāi)發(fā)者去處理http。頁(yè)面操作會(huì )被自動(dòng)映射到對應的java bean中,后臺邏輯只需要同java bean發(fā)生交互。整個(gè)過(guò)程是通過(guò)“依賴(lài)注入(DI)”來(lái)實(shí)現的,看來(lái)這是目前解偶合的最佳途徑啊,spring的影響真是深遠。不過(guò)正式因為jsf采用了這樣的方式,導致開(kāi)發(fā)工作和以前的jsp/struts等都有非常大的不同,需要一定的時(shí)間去學(xué)習。學(xué)習之前建議先對依賴(lài)注入有比較清楚的認識,可以參考我的learn Spring in spring系列的第一篇。

    本系列將以?xún)蓚€(gè)例子來(lái)講解jsf的基本開(kāi)發(fā),第一個(gè)例子當然是hello world。目前可用的jsf ide不多,ibm要到06年才能放出支持jsf的wtp版本。所以我們的例子基本以手寫(xiě)為主,這樣也能讓我們有更清楚的認識,同時(shí)推薦目前最好的jsf開(kāi)發(fā)工具:myeclipse 4.0 GA。后面的例子將會(huì )有jsf和hibernate的內容,它都能給予很好的支持。由于myeclipse并不免費,所以我們除了講解在ide中如何操作外,還會(huì )敘述手動(dòng)操作的具體內容,以免過(guò)于依賴(lài)開(kāi)發(fā)工具。用什么服務(wù)器都可以,這里采用了jboss 4.0.2。如果你的服務(wù)器是高版本的tomcat(5.5+),那么必須要刪除它自帶的一些包才能很好的支持jsf,具體細節請查看它的文檔。

    請自行下載jsf ri和JSTL 1.1。

廢話(huà)少說(shuō),開(kāi)始了。

    在myeclipse 4.0GA中新建一個(gè)web項目,命名為hello,為項目增加對JSTL的支持:


 
在JSTL的版本中選擇1.1。
該操作實(shí)際上是把jstl.jar和standard.jar加到工程中。

采用類(lèi)似的操作為項目添加對jsf的支持:myeclipse?add jsf capabilities
如圖:
 


其中的jsf implementation是選擇使用哪中JSF實(shí)現,我們采用的是sun的jsf ri
JSF config path是配置文件的位置,保持不變
URL pattern是jsf servlet的映射方式,有兩種選擇,具體細節后面說(shuō)明。
以上操作上是為項目加入了jsf需要的jar和tld文件,并且創(chuàng )建了一個(gè)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>

環(huán)境已經(jīng)建立好了,現在我們要建立一個(gè)程序,它的功能是讓用戶(hù)在表單中輸入名字,提交后系統會(huì )返回一個(gè)問(wèn)候。使用jsf的以后好處是,開(kāi)發(fā)人員會(huì )很自然的把mvc各層分開(kāi),不會(huì )像使用strtus那樣別扭,這一點(diǎn)在后面的開(kāi)發(fā)中感覺(jué)得到。

首先開(kāi)發(fā)model層,它是個(gè)很簡(jiǎn)單的bean:
package org.bromon.jsf.model.hello;

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

在model層中你可以隨意的實(shí)現業(yè)務(wù)的數據邏輯,不需要與web層有任何的關(guān)系。

下面開(kāi)發(fā)控制層,它負責存取web層的數據,并且調用model層的邏輯:
/**
 * jsf的控制層方法
 * @author bromon
 */
package org.bromon.jsf.control.hello;

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

public class HelloDelegater {
    
    //------屬性---------
    private String name;//表單中的文本框數據會(huì )傳到這里
    private String result;//web頁(yè)會(huì )從這里取得運行結果
    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規范編寫(xiě),因為它們要被注入依賴(lài)時(shí)使用。sayHello對象并沒(méi)有被實(shí)例化,它會(huì )在運行時(shí)由系統注入。

這兩個(gè)bean當然要在系統中申明,否則無(wú)法實(shí)現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>

    在后一個(gè)bean中,它的sayHello屬性被指定要在運行時(shí)注入一個(gè)org.bromon.jsf.model.hello.SayHello的實(shí)例。

下面要編寫(xiě)表示層的頁(yè)面,只有一個(gè)index.jsp:
需要引入兩個(gè)標簽庫:

<%@ 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>

頁(yè)面中包含了一個(gè)文本框和一個(gè)label,他們分別被綁定到了HelloDelegater類(lèi)的兩個(gè)屬性上,具體的綁定工作有系統通過(guò)翻轉控制的方式調用對應的set/get方式實(shí)現。提交按鈕被綁定到了HelloDelegater.say方法,該方法會(huì )把計算結果賦給result屬性,它會(huì )在頁(yè)面中顯示出來(lái)。

因為我們在url pattern中選擇了*.faces,所以我們應該訪(fǎng)問(wèn)如下地址來(lái)查看程序:
http://localhost:8080/hello/index.faces
相應的,如果你選擇了/faces/*,那么就應該是:
http://localhost:8080/hello/faces/index.jsp

程序執行結果如下:


 

    下一篇文章中,將介紹一個(gè)更加復雜的用戶(hù)管理程序,可以更清楚的看到j(luò )sf的特征,還會(huì )涉及到j(luò )sf的model對象一些組件的使用。
本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
快速建立JSF環(huán)境
JSF VS Tapestry 全面比較(三)
二、 第一個(gè)JSF程式
Geronimo 叛逆者: 直面 JSF
區別JSF中不同種類(lèi)的Managed-Bean
托管 Bean 頁(yè)面傳值的使用方法和技巧
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久