<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Java學(xué)習(xí)

    java,spring,structs,hibernate,jsf,ireport,jfreechart,jasperreport,tomcat,jboss -----本博客已經(jīng)搬家了,新的地址是 http://www.javaly.cn 如果有對(duì)文章有任何疑問或者有任何不懂的地方,歡迎到www.javaly.cn (Java樂園)指出,我會(huì)盡力幫助解決。一起進(jìn)步

     

    A4J 用戶指南

    序言:



    Ajax4JSF是一個(gè)很容易使用的框架.

    有什么問題可以在
    JSF中文論壇討論.

    Chapter 1. 介紹

    這里是一些介紹a4j的內(nèi)容,暫時(shí)先不翻譯了,等有時(shí)間再補(bǔ)充上.

    Ajax4jsf 是一個(gè)添加Ajax功能到JSF項(xiàng)目中的開源框架,使用該框架不用寫JS代碼.

    Ajax4jsf 充分利用了JSF框架的優(yōu)點(diǎn),如: 生命周期, 驗(yàn)證, 轉(zhuǎn)換的靈活性和受管理的靜態(tài)和動(dòng)態(tài)資源. 使用Ajax4jsf, 具有Ajax支持的富組件和高度可自定義的外觀感覺可以很容易的與JSF結(jié)合起來.

    Ajax4JSF 被設(shè)計(jì)用來:

    在使用Ajax時(shí)充分顯示JSF的優(yōu)點(diǎn).Ajax4jsf 完全被結(jié)合到 JSF 生命周期中. 當(dāng)其他框架僅僅給你訪問Managed Bean的便利時(shí),Ajax4JSF帶給你 Action 和 Value Change 監(jiān)聽器,激活服務(wù)端驗(yàn)證,在Ajax請(qǐng)求-響應(yīng)周期中的轉(zhuǎn)化 這些功能.

    添加 AJAX 功能到已經(jīng)存在的 JSF 項(xiàng)目. 該框架被實(shí)現(xiàn)為使用一個(gè)組件庫來添加ajax功能到你的頁 面中,而不要寫js代碼或者使用新的Ajax裝飾器替換你已經(jīng)做好的JSF組件. Ajax4jsf 具有頁面范圍(page-wide)的Ajax支持,而不是傳統(tǒng)的組件范圍(component-wide)的ajax支持.  這意味著你可以在頁面中定義一個(gè)激活A(yù)jax請(qǐng)求的事件,和當(dāng)根據(jù)客戶端事件觸發(fā)Ajax請(qǐng)求來改變服務(wù)器端數(shù)據(jù)后 如何使用JSF組件樹來同步顯示JSF頁面.

    使用內(nèi)建的Ajax支持寫自定義富組件. 將來, 我們將有一個(gè)完全的組件開發(fā)包(CDK)來支持AJax4JSF. CDK 將包含代碼生成工具和一個(gè)使用類似JSP語法的模版工具.這些功能將去除一些創(chuàng)建組件的一個(gè)例行工作.使用這個(gè)喝滿油的組件工廠機(jī)器來創(chuàng)建一個(gè)帶有 Ajax功能的富組件將比使用傳統(tǒng)的編碼過程創(chuàng)建一個(gè)簡單的組件還要簡單.

    項(xiàng)目的Java類與資源包. 除了核心的 AJAX 功能外, Ajax4jsf 也有管理資源的高級(jí)支持,例如:圖片,JS代碼和CSS樣式表單,資源框架使 簡單的打包這些資源到你自定義組件的Jar文件中成為可能.

    動(dòng)態(tài)(on-the-fly)將非常容易. 作為另外一種附加的功能, 資源框架有一個(gè)動(dòng)態(tài)產(chǎn)生圖片的工具. 使用這個(gè)特性,你可以使用類似于使用Java Graphic2D庫的方法來創(chuàng)建圖片.

    使用基于皮膚的技術(shù)來創(chuàng)建一個(gè)現(xiàn)代富用戶界面的外觀感覺(look-and-feel). Ajax4jsf 提供一個(gè)換膚特性 . 該特性允許通過命名的皮膚參數(shù)來簡單的定義和管理不同顏色模式與其他UI特性. 你可以從JSP代碼和Java代碼(例如:基于UI的文本來產(chǎn)生動(dòng)態(tài)的圖片)來訪問這些皮膚參數(shù) . 注意:, 雖然換膚功能不是完全的替代傳統(tǒng)的CSS,但是它還是值得稱贊的.

    測(cè)試components, actions, listeners, 和 pages 就像你在創(chuàng)建他們一樣容易. 一個(gè)制動(dòng)測(cè)試工具正在開發(fā)中 .它將在你開發(fā)組件使為你的組件產(chǎn)生測(cè)試案例. 該測(cè)試框架不僅僅測(cè)試組件,也測(cè)試服務(wù)端和客戶端的功能包括JS代碼 .作為附加的有用工具,你不需要單獨(dú)的部署測(cè)試程序到Servlet容器中 就可以做到這些了.

     Ajax4JSF 組件已經(jīng)可以使用了, 因此開發(fā)者可以立即使用這種省時(shí)的具有高級(jí)特性的工具來創(chuàng)建提供了更快更可靠的用戶體驗(yàn)的Web程序了.

    Chapter 2. 開始使用Ajax4jsf

    環(huán)境要求

    要使用Ajax4JSF 框架你僅僅需要JDK1.4或者更高,任何JSF實(shí)現(xiàn),和你最喜歡的Servlet容器.在下一章我們將給你提供詳細(xì)的環(huán)境信息.

    Ajax4jsf 被設(shè)計(jì)為一個(gè)容易使用的框架.僅僅有一點(diǎn)簡單的設(shè)置步驟就可以在你的JSF程序中使用Ajax功能了.

    下載 Ajax4jsf

    最新的Ajax4jsf 發(fā)布版在這里 https://ajax4jsf.dev.java.net/nonav/ajax/ajax-jsf/download.html 下載.

    安裝

    • 解壓 ajax4jsf.zip 文件.

    • 復(fù)制 ajax4jsf.jar and oscache-2.2.jar 到程序的 WEB-INF/lib 文件夾下.

    • 把下面的內(nèi)容添加到你的程序的 WEB-INF/web.xml 文件中:

                <filter>
      <display-name>Ajax4jsf Filter</display-name>
      <filter-name>ajax4jsf</filter-name>
      <filter-class>org.ajax4jsf.Filter</filter-class>
      </filter>
      <filter-mapping>
      <filter-name>ajax4jsf</filter-name>
      <servlet-name>Faces Servlet</servlet-name>
      <dispatcher>REQUEST</dispatcher>
      <dispatcher>FORWARD</dispatcher>
      <dispatcher>INCLUDE</dispatcher>
      </filter-mapping>

      注意. 你可以復(fù)制和粘貼上面的內(nèi)容在 README.txt 文件中.

    • 添加下面的內(nèi)容:

        <%@ taglib uri="https://ajax4jsf.dev.java.net/ajax" prefix="a4j"%>

      到你每個(gè)使用Ajax功能的JSP頁面中.

    簡單的 AJAX Echo 項(xiàng)目

    讓我們來看一個(gè)簡單的JSF項(xiàng)目. 我們僅僅需要一個(gè)JSP頁面,里面包含一個(gè)Form和一些JSF標(biāo)簽: <h:inputText> 和 <h:outputText>.

    我們這個(gè)簡單的程序應(yīng)該可以讓我們輸入一些文字到<h:inputText>中, 然后發(fā)送數(shù)據(jù)到Server,并在 <h:outputText>中顯示Server的響應(yīng)(給我們一個(gè)Echo信息).

    JSP 頁面

    下面是一個(gè)我們需要的頁面代碼 (echo.jsp) :

        <%@ taglib uri="https://ajax4jsf.dev.java.net/ajax" prefix="a4j"%>
    <%@ taglib uri="http://java.sun.com/jsf/html" prefix="h"%>
    <%@ taglib uri="http://java.sun.com/jsf/core" prefix="f"%>
    <html>
    <head>
    <title>repeater </title>
    </head>
    <body>
    <f:view>
    <h:form>
    <h:inputText size="50" value="#{bean.text}" >
    <a4j:support event="onkeyup" reRender="rep"/>
    </h:inputText>
    <h:outputText value="#{bean.text}" id="rep"/>
    </h:form>
    </f:view>
    </body>
    </html>

    就如你看到的,唯一一行于常給JSF頁面代碼不同的就是下面的一行

        <a4j:support event="onkeyup" reRender="rep"/>

    在這里我們?cè)诟笜?biāo)簽(<h:inputText>)中添加了一個(gè)AJAX 支持. 該支持綁定了JavaScript事件“onkeyup” .因此, 每一次該事件發(fā)布給父標(biāo)簽時(shí),我們的程序?qū)l(fā)送一個(gè)AJAX請(qǐng)求到Server.這意味著我們的受管理的bean將包含該“text” 域中我們輸入的最新數(shù)據(jù).

    <a4j:support> 標(biāo)簽的“reRender” 屬性(attribute)定義我們的頁面的哪一部分被更新. 在這里,該頁面唯一被更新的部位是 <h:outputText> 標(biāo)簽,因?yàn)樗腎D值和“reRender” 的屬性值向匹配. 在一個(gè)頁面中更新多個(gè)元素(elements)也是很簡單的:僅僅把他們的IDs放在 “reRender” 屬性中就可以了.

    數(shù)據(jù) Bean

    當(dāng)然了,為了運(yùn)行這個(gè)程序我們還需要一個(gè)受管理的bean

            package demo;
    public class Bean {
    private String text;

    public Bean() {
    }

    public String getText() {
    return text;
    }

    public void setText(String text) {
    this.text = text;
    }
    }

    faces-config.xml

    下一步, 我們需要在faces-config.xml 中注冊(cè)上面的bean:

        <?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>
    <managed-bean>
    <managed-bean-name>bean</managed-bean-name>
    <managed-bean-class>demo.Bean</managed-bean-class>
    <managed-bean-scope>request</managed-bean-scope>
    <managed-property>
    <property-name>text</property-name>
    <value/>
    </managed-property>
    </managed-bean>
    </faces-config>

    注意:這里沒有任何東西直接和Ajax4jsf 有關(guān)聯(lián).

    Web.xml

    最后,不要忘了添加jar文件和更改 web.xml 文件:

        <?xml version="1.0"?>
    <web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

    <display-name>a4jEchoText</display-name>
    <context-param>
    <param-name>javax.faces.STATE_SAVING_METHOD</param-name>
    <param-value>server</param-value>
    </context-param>
    <filter>
    <display-name>Ajax4jsf Filter</display-name>
    <filter-name>ajax4jsf</filter-name>
    <filter-class>org.ajax4jsf.Filter</filter-class>
    </filter>
    <filter-mapping>
    <filter-name>ajax4jsf</filter-name>
    <servlet-name>Faces Servlet</servlet-name>
    <dispatcher>REQUEST</dispatcher>
    <dispatcher>FORWARD</dispatcher>
    <dispatcher>INCLUDE</dispatcher>
    </filter-mapping>
    <listener>
    <listener-class>
    com.sun.faces.config.ConfigureListener
    </listener-class>
    </listener>

    <!-- Faces Servlet -->
    <servlet>
    <servlet-name>Faces Servlet</servlet-name>
    <servlet-class>
    javax.faces.webapp.FacesServlet
    </servlet-class>
    <load-on-startup>1</load-on-startup>
    </servlet>

    <!-- Faces Servlet Mapping -->
    <servlet-mapping>
    <servlet-name>Faces Servlet</servlet-name>
    <url-pattern>*.jsf</url-pattern>
    </servlet-mapping>
    <login-config>
    <auth-method>BASIC</auth-method>
    </login-config>
    </web-app>

    就這樣了, 現(xiàn)在你的程序應(yīng)該可以工作了.

    部署

    最終,你可以在Servlet容器中部署你的程序了. 在你喜歡的容器中部署,然后在你的瀏覽器中輸入: http://localhost:8080/a4jEchoText/echo.jsf

    Chapter 3.Ajax4jsf 框架中的基本概念

    介紹

    該框架被實(shí)現(xiàn)為使用一個(gè)組件庫來添加ajax功能到你的頁面中,而不要寫js代碼或者使用新的Ajax裝飾器替換你已經(jīng)做好的JSF組件. Ajax4jsf 具有頁面范圍(page-wide)的Ajax支持,而不是傳統(tǒng)的組件范圍(component-wide)的ajax支持.  這意味著你可以在頁面中定義一個(gè)激活A(yù)jax請(qǐng)求的事件,和當(dāng)根據(jù)客戶端事件觸發(fā)Ajax請(qǐng)求來改變服務(wù)器端數(shù)據(jù)后 如何使用JSF組件樹來同步顯示JSF頁面. (This means you can define the event on the page that invokes an AJAX request and the areas of the page that should be synchronized with the JSF Component Tree after the AJAX request changes the data on the server according to the events fired on the client).

    下面的圖片展示了它是如何工作的:

    Ajax4jsf 允許你定義(意味著通過JSF tags)你希望通過AJAX請(qǐng)求更新的JSF頁面的不同部分并且提供的一些發(fā)送AJAX請(qǐng)求到服務(wù)器端的選項(xiàng),除了你的JSF頁面于常規(guī)的JSF有點(diǎn)不 同外,沒有其他的不同了,這是一個(gè)你不需要寫JS代碼和XMLHttpRequest對(duì)象的天堂.

    結(jié)構(gòu)概覽

    下面的圖片展示了Ajax4jsf 框架的一些重要的元素

    Ajax 過濾器(Filter).  為了得到應(yīng)用 Ajax4jsf 的好處 你必須在在 web.xml 文件中注冊(cè)一個(gè)Ajax Filter.該過濾器有一些職責(zé). Ajax Filter 可以識(shí)別多種ajax請(qǐng)求種類. 圖片3的序列圖展示了在處理常規(guī)頁面和AJAX請(qǐng)求頁面的不同之處.在開始的情況下,所有的JSF樹將被編碼(encoded). 在第二種情況下依據(jù)AJAX 區(qū)域(region) (你可以通過使用<a4j:region> tag來定義AJAX region  )的大小(size). 就如你看到的,第二種情況下 過濾器將解析AJAX響應(yīng)的內(nèi)容,在它被發(fā)送到客戶端以前, 查看下面的圖片來理解這兩種方式:

    在這兩種情況下, 你的程序所需要的靜態(tài)或者動(dòng)態(tài)資源的信息將被注冊(cè)到ResourseBuilder 類中.當(dāng)請(qǐng)求一個(gè)資源時(shí)(圖片4),AJAX filter 檢查資源緩存(Resource Cache)看看這個(gè)資源是否存在,如果存在該資源將被送到客戶端.否則過濾器將在ResourceBuilder中搜索注冊(cè)的資源. 如果該資源被注冊(cè)了,AJAX filter將發(fā)送一個(gè)請(qǐng)求到 ResourceBuilder來創(chuàng)建[create (deliver)]該資源.下面的圖片顯示了請(qǐng)求資源的處理過程.

    Ajax動(dòng)作組件(Action Components).  有3個(gè)Ajax動(dòng)作組件: AjaxCommandButton, AjaxCommandLink 和 AjaxSupport. 你可以使用他們從客戶端發(fā)送AJAX請(qǐng)求.

    Ajax容器 (Containers).  AjaxContainer 是一個(gè)接口,該接口描述了在Ajax請(qǐng)求中應(yīng)該被解碼(decoded)的JSF頁面中的一個(gè)區(qū)域.AjaxViewRoot 和 AjaxRegion 實(shí)現(xiàn)了該接口.

    JavaScript引擎 (Engine).  Ajax4jsf JavaScript 引擎 在客戶端運(yùn)行. 它知道如何根據(jù)來自于Ajax響應(yīng)的信息來更新你JSF頁面上的不同的區(qū)域. 程序開發(fā)者不需要直接使用這里的JavaScript代碼.它自動(dòng)的下載到客戶端.

    如何做...

    發(fā)送一個(gè) AJAX 請(qǐng)求

    從JSF頁面發(fā)送ajax請(qǐng)求有不同的方法. 你可以使用 <a4j:commandButton>, <a4j:commandLink> 或者 <a4j:support> tags.

    所有的這些標(biāo)簽隱藏了在創(chuàng)建一個(gè)XMHttpRequest 對(duì)象和發(fā)送ajax請(qǐng)求所需要的JavaScript 活動(dòng).并且, 他們?cè)试S你選擇頁面中那個(gè)JSF組件被重新渲染(re-rendered) 來表現(xiàn)Ajax響應(yīng)的結(jié)果 (你可以列出他們的 IDs 在“reRender” 屬性中).

    <a4j:commandButton> 和 <a4j:commandLink> tags 用來在 “onclick” JavaScript 事件中發(fā)送Ajax請(qǐng)求.

    在你選擇JS事件(“onkeyup”, “onmouseover”, etc)時(shí), <a4j:support> tag 允許你在普通的JSF組件中添加Ajax 功能和發(fā)送ajax請(qǐng)求.

    提供Ajax請(qǐng)求功能的大部分重要的屬性如下:

    • reRender 屬性 - 就如我們前面提到過的,在一個(gè)Ajax響應(yīng)到來時(shí)重新渲染(reRendered)組件.

    • RequestDelay 屬性 – 用來調(diào)節(jié)請(qǐng)求的頻率.

          <h:inputText size="50" value="#{bean.text}">
      <a4j:support event="onkeyup" RequestDelay=”3”/>
      </h:inputText>

      因此每一個(gè)來自于鍵盤事件的請(qǐng)求將會(huì)延遲3 ms ,來減少請(qǐng)求的次數(shù).

    • EventsQueue – 儲(chǔ)存下一個(gè)請(qǐng)求的隊(duì)列的名字. 隊(duì)列幫助阻止下一個(gè)請(qǐng)求知道當(dāng)前的處理完.

    • LimitToList 用來控制更新的區(qū)域. 設(shè)置為true – 將更新僅在reRender list中的區(qū)域, 如果為false,將更新所有Output Panels區(qū)域.

    • ajaxSingle 如果設(shè)置為false用來指定發(fā)送請(qǐng)求的區(qū)域  – 如果為true則發(fā)送整個(gè)區(qū)域 - only control caused event.(attributes specify regions to be sent with request if false – it’ll be full region in other case - only control caused event.)

    決定發(fā)送什么

    你可能描述了一個(gè)你決定發(fā)送到服務(wù)器的頁面區(qū)域.當(dāng)你發(fā)送ajax請(qǐng)求的時(shí)候,通過這種方式你可以控制JSF View的那個(gè)部分在服務(wù)器端被解碼(decoded).

    描述你JSF頁面上的一個(gè)Ajax區(qū)域的最容易的方法是什么都不做.這是因?yàn)樵?lt;f:view> 和 </f:view> tags 中的內(nèi)容在默認(rèn)值的情況下認(rèn)為是ajax區(qū)域.

    通過使用<a4j:region> tag你可以在一個(gè)JSF頁面中定義多個(gè)Ajax區(qū)域 (they can even be nested).

    如果你希望渲染ajax響應(yīng)以外的區(qū)域,那么renderRegionOnly屬性值應(yīng)該設(shè)置為false.否則ajax更新被限制在活動(dòng)區(qū)域的元素中.

    決定改變什么

    在大部分情況下都可以使用 “reRender”中的ids來定義需要更新的 “AJAX zones”.

    但是如果你的頁面包含<f:verbatim/> tag(你希望在ajax響應(yīng)中更新它的內(nèi)容)你不可以使用這種方式.

    我們?cè)谏厦婷枋龅?lt;f:verbatim/> tag 的問題涉及到JSF組件的transientFlag值. 如果該標(biāo)記的值為true,這個(gè)組件不能參與保存和恢復(fù)組件樹(saving or restoring)的處理過程.

    為了提供一種解決這個(gè)問題的方法, Ajax4jsf 利用<a4j:outputPanel> tag定義了一個(gè)output panel . 如果你把<f:verbatim/> tag放在output panel中, 那么在AJAX 響應(yīng)中 <f:verbatim/> tag和其他panel中的child tags中的內(nèi)容可以被更新 .有兩種方法來控制它:

    • 設(shè)置“ajaxRendered” 屬性值為true.

    • 設(shè)置動(dòng)作組件的“reRender” 屬性值為output panel的 ID.

     

    Chapter 4. Ajax4JSF 組件庫

    a4j:ajaxListener

    和 ActionListener或者ValueChangeListener的工作方式一樣, 只是僅用于AJAX容器. 添加一個(gè)指定的類作為AjaxEvent的監(jiān)聽器. (sent in case of an AJAX request for this container).

    Table 4.1. a4j:ajaxListener attributes

    type 注冊(cè)到AjaxListener 中類的完全限定的Java類名

        <a4j:region selfRendered="true" ajaxListener="#{bean.processAjax}" id="Region">

    </a4j:region>

    當(dāng)來自于Region的AJAX request觸發(fā)時(shí),將調(diào)用bean的'processAjax'方法.

    a4j:region

    該標(biāo)簽定義在AJax請(qǐng)求處理過程中被發(fā)送到服務(wù)器端解碼的部分JSF組件樹.

    Table 4.2. a4j:region 的屬性

    selfRendered 如果為true,在調(diào)用應(yīng)用程序(InvokeApplication )階段自渲染子樹(如果immediate 屬性設(shè)置為true則是 Decode)
    renderRegionOnly 標(biāo)記,用來決定活動(dòng)區(qū)域外的內(nèi)容在Ajax響應(yīng)中是否渲染.如果為"true" , 在AJAX response過程中活動(dòng)區(qū)域外的組件都不渲染. 如果為"false", 將渲染包含在響應(yīng)中的所有組件樹.默認(rèn)值為"true"
    rendered 如果為 false, 該組件將不被重新渲染.
    id 每個(gè)組件都應(yīng)該有個(gè)唯一的id. 如果沒有指定的話,將會(huì)自動(dòng)產(chǎn)生.
    immediate 如果該組件被Ajax請(qǐng)求激活的話,標(biāo)記該組件應(yīng)該立即(在應(yīng)用請(qǐng)求值階段)被感興趣的監(jiān)聽器和動(dòng)作處理,而不是等到調(diào)用應(yīng)用程序階段.(譯者注:該標(biāo)記和JSF中的immediate標(biāo)記所代表的意思差不多,跳過驗(yàn)證階段到呈現(xiàn)響應(yīng)階段)
    binding 組件綁定
    ajaxListener 方法綁定,當(dāng)該組件被ajax請(qǐng)求激活時(shí),將調(diào)用該監(jiān)聽器方法處理該事件.該方法必須為public的并且接受一個(gè) AjaxEvent 參數(shù),返回void.

        <a4j:region>
    <!--Some content-->
    <a4j:region>

    如果在該組件的區(qū)域中有一個(gè)Ajax請(qǐng)求調(diào)用了  – 該區(qū)域?qū)⒏鶕?jù)Ajax的設(shè)置被框架處理.

    a4j:page

    該組件呈現(xiàn)一個(gè)完全的HTML頁面結(jié)構(gòu).它必須是view root (JSP <f:view> tag)的第一個(gè)(并且是僅有的一個(gè))子組件. 沒有Html代碼可以在該組件的外面. 它也支持在Ajax請(qǐng)求中處理子組件,就和<a4j:region>一樣.對(duì)于一個(gè)普通的請(qǐng)求,它將把結(jié)果呈現(xiàn)為在客戶端頁面< head>元素中的<script>元素.如果該組件包含一個(gè)"head" facet, 該facet的內(nèi)容也呈現(xiàn)在<head>中.對(duì)于一個(gè)Ajax請(qǐng)求,在整個(gè)結(jié)構(gòu)中僅僅涉及到的組件被呈現(xiàn).下面是個(gè)在JSP (jspx version)中使用它的例子:

    <jsp:root xmlns:....

        <f:view>

            <a4j:page>

            <f:facet name="head">

            ...

            </f:facet>

    <!-- page content here -->

            </a4j:page>

            </f:view>

    </jsp:root>

    Table 4.3. a4j:page attributes

    selfRendered 如果為true,在調(diào)用應(yīng)用程序(InvokeApplication )階段自渲染子樹(如果immediate 屬性設(shè)置為true則是 Decode)
    lang 用來描述在產(chǎn)生該組件的markup時(shí)用到的語言(產(chǎn)生該組件標(biāo)記所使用的語言)
    title 該組件產(chǎn)生的Markup的title屬性值
    renderRegionOnly renderRegionOnly
    onunload 在頁面unload時(shí)執(zhí)行的JS代碼
    rendered 如果是 false, 該組件不會(huì)被呈現(xiàn).
    contentType 設(shè)置響應(yīng)的自定義的mime內(nèi)容類型
    dir 文本方向
    id   每個(gè)組件都應(yīng)該有個(gè)唯一的id. 如果沒有指定的話,將會(huì)自動(dòng)產(chǎn)生.
    styleClass 和HTML class 屬性對(duì)應(yīng).
    immediate 如果該組件被Ajax請(qǐng)求激活的話,標(biāo)記該組件應(yīng)該立即(在應(yīng)用請(qǐng)求值階段)被感興趣的監(jiān)聽器和動(dòng)作處理,而不是等到調(diào)用應(yīng)用程序階段.(譯者注:該標(biāo)記和JSF中的immediate標(biāo)記所代表的意思差不多,跳過驗(yàn)證階段到呈現(xiàn)響應(yīng)階段)
    onload 在頁面load時(shí)執(zhí)行的JS代碼
    style 在該組件被呈現(xiàn)時(shí)應(yīng)用的CSS style(s)
    pageTitle 作為頁面 title的字符串
    binding 組件綁定.
    ajaxListener 方法綁定,當(dāng)該組件被ajax請(qǐng)求激活時(shí),將調(diào)用該監(jiān)聽器方法處理該事件.該方法必須為public的并且接受一個(gè) AjaxEvent 參數(shù),返回void.

            <a4j:page>
    <f:facet name=”head”>

    </f:facet>

    <a4j:page>

    上面的示例結(jié)構(gòu)將被呈現(xiàn)為:

            <HTML>
    <HEAD>

    </HEAD>
    <body >

    </body>
    </HTML>

    a4j:support

    在 UIComponent-based組件上添加ajax功能,使他們有JavaScript事件屬性. 在解碼期間:如果一個(gè)請(qǐng)求為Ajax-performed, 從ExternalContext 中的requestParameterMap屬性中得到Map,如果該Map中"clientId" key對(duì)應(yīng)的值非空,在組件上創(chuàng)建一個(gè) javax.faces.event.ActionEvent, 并且傳遞該事件到該組件的queueEvent()中,然后把他的reReander區(qū)域中的組件id添加到reReander屬性中.在編碼過程中.不 編碼一個(gè)組件. 相反的,在父組件上添加一個(gè)與事件屬性的值相同的值綁定(Instead, it adds ValueBinding for a property of the parent component with the name as a value of its "event" property).結(jié)果,當(dāng)呈現(xiàn)時(shí),父組件創(chuàng)建一個(gè)在提交一個(gè)ajax請(qǐng)求時(shí)用到的JS代碼.如果該組件有子UIParameter組件,添加他的 name/value作為附加的請(qǐng)求參數(shù).如果父組件是一個(gè)UIInput的實(shí)例,并且ajaxType屬性是input, 則也提交input 域中的值. 在這種情況下,你可以在UIForm外面提交一個(gè)單一的input域. (As a result, when rendered, the parent component builds JavaScript code for submitting an AJAX request on this event. If the component has child UIParameter components, appends it's name/value as additional request parameters. If a parent component is an instance of UIInput and the ajaxType property is "input", submits the value of the input field, also. In this case, you can submit a single input field outside of UIForm.)

    Table 4.4. a4j:support 屬性

    actionListener 方法綁定,當(dāng)該組件被ajax請(qǐng)求激活時(shí),將調(diào)用該監(jiān)聽器方法處理該事件.該方法必須為public的并且接受一個(gè) AjaxEvent 參數(shù),返回void.
    parentProperties parentProperties
    action 方法綁定到要被激活的程序動(dòng)作方法, 如果該 UIComponent 被用戶激活, 根據(jù)immediate屬性的值,方法在 請(qǐng)求處理生命周期中的Apply Request Values 或者 Invoke Application 階段 被調(diào)用.
    oncomplete  在客戶端請(qǐng)求完成時(shí)調(diào)用的js代碼
    rendered 如果為false,該組件將不會(huì)被顯示.
    status Request status 組件的id(在 UIComopnent.findComponent()中使用)
    reRender 該組件調(diào)用Ajax請(qǐng)求后重新渲染的組件的ID(在 UIComopnent.findComponent()中使用),可以使一個(gè)id,也可以使逗號(hào)分開的很多id,或者是數(shù)據(jù)or集合的EL表達(dá)式
    targetId reRender的別名 : 該組件調(diào)用Ajax請(qǐng)求后重新渲染的組件的ID(在 UIComopnent.findComponent()中使用),可以使一個(gè)id,也可以使逗號(hào)分開的很多id,或者是數(shù)據(jù)or集合的EL表達(dá)式
    id 每個(gè)組件都應(yīng)該有個(gè)唯一的id. 如果沒有指定的話,將會(huì)自動(dòng)產(chǎn)生.
    disableDefault 使目標(biāo)事件的動(dòng)作不可用 ( 在javascript代碼中添加 "return false;" )
    requestDelay 在JS事件上延遲 ( 單位 ms. )發(fā)送Ajax請(qǐng)求.與事件隊(duì)列公共工作可以減少鍵盤或者鼠標(biāo)移動(dòng)觸發(fā)請(qǐng)求的次數(shù)
    eventsQueue 用來避免在同一個(gè)事件上的重復(fù)請(qǐng)求的隊(duì)列的名字.可以用來減少周期事件(如:按鍵,鼠標(biāo)移動(dòng))請(qǐng)求的次數(shù).
    bypassUpdates 如果使true,在處理驗(yàn)證階段后跳過更新模型值階段到呈現(xiàn)階段.可以用來驗(yàn)證組件的輸入值.
    immediate 如果該組件被Ajax請(qǐng)求激活的話,標(biāo)記該組件應(yīng)該立即(在應(yīng)用請(qǐng)求值階段)被感興趣的監(jiān)聽器和動(dòng)作處理,而不是等到調(diào)用應(yīng)用程序階段.(譯者注:該標(biāo)記和JSF中的immediate標(biāo)記所代表的意思差不多,跳過驗(yàn)證階段到呈現(xiàn)響應(yīng)階段)
    limitToList 如果為true,僅僅更新'reRender'屬性中指定的組件,否則(默認(rèn)值)更新所有Ajax Region中的組件
    ajaxSingle 如果為 true , 僅僅提交一個(gè)field/link,而不是整個(gè)form中的內(nèi)容.
    event  父組件的JS事件屬性的名稱 ( onclick , onchange, etc. ) , for which we will build AJAX submission code.
    binding 組件綁定.

     

    所有你需要指定的東西 - 父組件用來觸發(fā)ajax請(qǐng)求的事件和被reRender的區(qū)域, 和處理事件的Java bean方法.

        <a4j:region selfRendered="true">

    <h:selectBooleanCheckbox value="#{pizza.tip}">
    <a4j:support event="change" reRender="#{partsId.list}"
    action="#{Some.show_hide}"
    />
    </h:selectBooleanCheckbox>

    </a4j:region>

    因此,在上面的例子中,checkbox狀態(tài)的改變將提交當(dāng)前的區(qū)域. 'show_hide'動(dòng)作將被調(diào)用,并且 'list'中的id所指定的組件將被更新.

    a4j:commandLink

    呈現(xiàn)一個(gè)Html <a> 元素,當(dāng)點(diǎn)擊時(shí)的動(dòng)作就象一個(gè)form提交一樣.

    在解碼的過程中:

         從ExternalContext的屬性requestParameterMap中得到一個(gè)Map,如果該Map中包含"clientId" key的非空值, 在組件上創(chuàng)建一個(gè) javax.faces.event.ActionEvent 事件,并且傳遞該事件給組件的queueEvent() 方法.如果該請(qǐng)求是Ajax-performed,把reRander屬性中的IDs值添加到嵌套的AjaxContainer的 rendered areas list中 ,在解碼的過程中也添加組件的參數(shù)(PARAM_NAME 和 PARAM_VALUE 是任何嵌套的子UIParameter的names 和 values .) names 和 values必須是被URLEncoded處理過的.如果styleClass屬性被指定了,呈現(xiàn)它的值為html中的class屬性的值. 呈現(xiàn)任何non-UIParameter子組件為<a>的相應(yīng)的子組件. 這些看起來就像一個(gè)Link文本.

    Table 4.5. a4j:commandLink attributes

    actionListener 方法綁定,當(dāng)該組件被ajax請(qǐng)求激活時(shí),將調(diào)用該監(jiān)聽器方法處理該事件.該方法必須為public的并且接受一個(gè) AjaxEvent 參數(shù),返回void.
    title 該組件產(chǎn)生的標(biāo)記元素的提示文字(當(dāng)鼠標(biāo)移動(dòng)到該組件上面出現(xiàn)的提示文字)
    oncomplete 在客戶端請(qǐng)求完成時(shí)調(diào)用的js代碼
    shape default|rect|circle|poly [CI] 該屬性指定一個(gè)區(qū)域的形狀.可能的取值: * default: 指定整個(gè)區(qū)域. * rect:指定一個(gè)矩形區(qū)域. * circle: 定義一個(gè)圓形區(qū)域. * poly: 定義一個(gè)多邊形區(qū)域.
    target  
    rendered 如果為false,該組件將不會(huì)被顯示.
    charset 該屬性指定了通過鏈接指派的資源的字符編碼.
    reRender 該組件調(diào)用Ajax請(qǐng)求后重新渲染的組件的ID(在 UIComopnent.findComponent()中使用),可以使一個(gè)id,也可以使逗號(hào)分開的很多id,或者是數(shù)據(jù)or集合的EL表達(dá)式
    targetId Alias for reRender : 該組件調(diào)用Ajax請(qǐng)求后重新渲染的組件的ID(在 UIComopnent.findComponent()中使用),可以使一個(gè)id,也可以使逗號(hào)分開的很多id,或者是數(shù)據(jù)or集合的EL表達(dá)式
    id 每個(gè)組件都應(yīng)該有個(gè)唯一的id. 如果沒有指定的話,將會(huì)自動(dòng)產(chǎn)生.
    dir 文本方向.
    rev 該屬性用來描述從通過 href 屬性指定的錨點(diǎn)到當(dāng)前文檔的反向鏈接。該屬性值是通過空格分隔的 link 類型(值)的列表。
     
    bypassUpdates 如果使true,在處理驗(yàn)證階段后跳過更新模型值階段到呈現(xiàn)階段.可以用來驗(yàn)證組件的輸入值.
    styleClass 和HTML的class屬性一樣.
    accesskey 觸發(fā)該組件的快捷鍵
    limitToList 如果為true,僅僅更新'reRender'屬性中指定的組件,否則(默認(rèn)值)更新所有Ajax Region中的組件
    onkeypress 鍵盤事件,鍵被按下和松開
    ajaxSingle 如果使true,僅僅提交一個(gè)field/link,而不是所有被控制的
    ondblclick HTML: 雙擊事件
    style HTML: 應(yīng)用在該組件上的CSS.
    onblur 當(dāng)元素失去焦點(diǎn)時(shí)發(fā)生的事件
    onmouseover 當(dāng)滑鼠移動(dòng)到組件上方時(shí)
     
    onkeyup 當(dāng)使用者按下并放開按鍵
    value 該組件的當(dāng)前值
    action 方法綁定到要被激活的程序動(dòng)作方法, 如果該 UIComponent 被用戶激活, 根據(jù)immediate屬性的值,方法在 請(qǐng)求處理生命周期中的Apply Request Values 或者 Invoke Application 階段 被調(diào)用.
    tabindex 設(shè)置不同元素之間獲得焦點(diǎn)的順序
    hreflang 該屬性指定了通過 href 指派的資源的基本語言,并且僅在 href 被指定的情況下使用(也就是說如果 A 中沒有指定 href 屬性,就不應(yīng)該出現(xiàn) hreflang 屬性)。
    type 該屬性指定鏈接資源所采用的內(nèi)容類型。(譯者注:例如網(wǎng)頁通常為 text/html)
    lang 產(chǎn)生該組件標(biāo)記所使用的語言
    onclick 當(dāng)鼠標(biāo)點(diǎn)擊時(shí)發(fā)生的事件
     
    status 請(qǐng)求狀態(tài)組件的ID(在UIComopnent.findComponent()中使用)
    onmouseout 鼠標(biāo)光標(biāo)移開元素時(shí)發(fā)生的事件
    onkeydown 鍵按下時(shí)發(fā)生的事件
    onmousedown 按下鼠標(biāo)按鍵時(shí)發(fā)生的事件
    requestDelay 在JS事件上延遲 ( 單位 ms. )發(fā)送Ajax請(qǐng)求.與事件隊(duì)列公共工作可以減少鍵盤或者鼠標(biāo)移動(dòng)觸發(fā)請(qǐng)求的次數(shù)
    eventsQueue 用來避免在同一個(gè)事件上的重復(fù)請(qǐng)求的隊(duì)列的名字.可以用來減少周期事件(如:按鍵,鼠標(biāo)移動(dòng))請(qǐng)求的次數(shù).
    rel 該屬性描述了從當(dāng)前文檔到通過 href 屬性定義的錨點(diǎn)之間的關(guān)系。該屬性值是通過空格分隔的 link 類型(值)的列表(譯者注:在 Web 標(biāo)準(zhǔn)開發(fā)中,這個(gè)通常用來代替 target 屬性,配合腳本,用來表示目的窗口)。
    immediate 如果該組件被Ajax請(qǐng)求激活的話,標(biāo)記該組件應(yīng)該立即(在應(yīng)用請(qǐng)求值階段)被感興趣的監(jiān)聽器和動(dòng)作處理,而不是等到調(diào)用應(yīng)用程序階段.(譯者注:該標(biāo)記和JSF中的immediate標(biāo)記所代表的意思差不多,跳過驗(yàn)證階段到呈現(xiàn)響應(yīng)階段)
    onfocus 使用在表單元素中,當(dāng)元素獲得焦點(diǎn)時(shí)發(fā)生的事件
    onmouseup 當(dāng)釋放鼠標(biāo)按鍵時(shí)發(fā)生的事件
    binding 組件綁定.
    onmousemove 鼠標(biāo)光標(biāo)在元素上移動(dòng)時(shí)發(fā)生的事件
    coords 定義區(qū)域 -- coords
    a.矩形:必須使用四個(gè)數(shù)字,前兩個(gè)數(shù)字為左上角座標(biāo),后兩個(gè)數(shù)字為右下角座標(biāo)
    例:<area shape=rect coords=100,50,200,75 href="URL">
    b.圓形:必須使用三個(gè)數(shù)字,前兩個(gè)數(shù)字為圓心的座標(biāo),最后一個(gè)數(shù)字為半徑長度
    例:<area shape=circle coords=85,155,30 href="URL">
    c.任意圖形(多邊形):將圖形之每一轉(zhuǎn)折點(diǎn)座標(biāo)依序填入
    例:<area shape=poly coords=232,70,285,70,300,90,250,90,200,78 href="URL">

    通常a4j:commandLink 是一個(gè) 具有AJAX 支持的HTML <input> 元素. 包含所有的a4j:support的主要功能, 還有它自己的onclick事件的Ajax請(qǐng)求和所有與a4j:Support組合的CommandLink特性.

    a4j:commandButton

    呈現(xiàn)一個(gè)HTML "input" 元素.

    在解碼的過程中:

             從ExternalContext的屬性requestParameterMap中得到一個(gè)Map,如果該Map中包含"clientId" key的非空值, 在組件上創(chuàng)建一個(gè) javax.faces.event.ActionEvent 事件,并且傳遞該事件給組件的queueEvent() 方法.如果該請(qǐng)求是Ajax-performed,把reRander屬性中的IDs值添加到嵌套的AjaxContainer的 rendered areas list中 .

    在編碼的過程中:

            為onclick事件創(chuàng)建一個(gè)AJAX.Submit JavaScript調(diào)用.呈現(xiàn)組件的clientId 為name屬性的值.呈現(xiàn)組件的當(dāng)前值為value屬性的值.

    如果styleClass屬性被指定了,呈現(xiàn)它的值為class屬性的值.  呈現(xiàn) HTML "input"元素的子元素.

    Table 4.6. a4j:commandButton attributes

    actionListener 方法綁定,當(dāng)該組件被ajax請(qǐng)求激活時(shí),將調(diào)用該監(jiān)聽器方法處理該事件.該方法必須為public的并且接受一個(gè) AjaxEvent 參數(shù),返回void.
    title 該組件產(chǎn)生的標(biāo)記元素的提示文字(當(dāng)鼠標(biāo)移動(dòng)到該組件上面出現(xiàn)的提示文字)
    oncomplete 在客戶端請(qǐng)求完成時(shí)調(diào)用的js代碼
    rendered 如果為false,該組件將不會(huì)被顯示.
    reRender 該組件調(diào)用Ajax請(qǐng)求后重新渲染的組件的ID(在 UIComopnent.findComponent()中使用),可以使一個(gè)id,也可以使逗號(hào)分開的很多id,或者是數(shù)據(jù)or集合的EL表達(dá)式
    targetId Alias for reRender : 該組件調(diào)用Ajax請(qǐng)求后重新渲染的組件的ID(在 UIComopnent.findComponent()中使用),可以使一個(gè)id,也可以使逗號(hào)分開的很多id,或者是數(shù)據(jù)or集合的EL表達(dá)式
    onchange 使用在表單元素中,當(dāng)某些東西改變時(shí)發(fā)生的事件
    dir 文本方向.
    id 每個(gè)組件都應(yīng)該有個(gè)唯一的id. 如果沒有指定的話,將會(huì)自動(dòng)產(chǎn)生.
    bypassUpdates 如果使true,在處理驗(yàn)證階段后跳過更新模型值階段到呈現(xiàn)階段.可以用來驗(yàn)證組件的輸入值.
    styleClass 和HTML的class屬性一樣.
    accesskey 觸發(fā)該組件的快捷鍵
    limitToList 如果為true,僅僅更新'reRender'屬性中指定的組件,否則(默認(rèn)值)更新所有Ajax Region中的組件
    onkeypress 鍵盤事件,鍵被按下和松開
    ajaxSingle 如果使true,僅僅提交一個(gè)field/link,而不是所有被控制的
    ondblclick HTML: 雙擊事件
    image 在 這個(gè)button中要顯示的圖片的絕對(duì)或者相對(duì)URL 如果指定了該 "input" 元素將為"image"類型. 否則, it will be of the type specified by the "type" property with a label specified by the "value" property.
    style HTML: 應(yīng)用在該組件上的CSS.
    size 定義組件顯示的尺度
    onblur 當(dāng)失去焦點(diǎn)時(shí)發(fā)生的事件
    onmouseover 當(dāng)滑鼠移動(dòng)到組件上方時(shí)
     
    value 該組件的當(dāng)前值
    action 方法綁定到要被激活的程序動(dòng)作方法, 如果該 UIComponent 被用戶激活, 根據(jù)immediate屬性的值,方法在 請(qǐng)求處理生命周期中的Apply Request Values 或者 Invoke Application 階段 被調(diào)用.
    onkeyup 當(dāng)使用者按下并放開按鍵
    tabindex 設(shè)置不同元素之間獲得焦點(diǎn)的順序
    lang 產(chǎn)生該組件標(biāo)記所使用的語言
    type submit|reset|image|button 指定創(chuàng)建組件的類型,默認(rèn)值為Submit.
    disabled 把控件的狀態(tài)設(shè)置為不能使用
    onclick 當(dāng)鼠標(biāo)點(diǎn)擊時(shí)發(fā)生的事件
     
    status 請(qǐng)求狀態(tài)組件的ID(在UIComopnent.findComponent()中使用)
    onmouseout 鼠標(biāo)光標(biāo)移開元素時(shí)發(fā)生的事件
    alt 文本方向.
    onkeydown 鍵按下時(shí)發(fā)生的事件
    onmousedown 按下鼠標(biāo)按鍵時(shí)發(fā)生的事件
    requestDelay 在JS事件上延遲 ( 單位 ms. )發(fā)送Ajax請(qǐng)求.與事件隊(duì)列公共工作可以減少鍵盤或者鼠標(biāo)移動(dòng)觸發(fā)請(qǐng)求的次數(shù)
    eventsQueue 用來避免在同一個(gè)事件上的重復(fù)請(qǐng)求的隊(duì)列的名字.可以用來減少周期事件(如:按鍵,鼠標(biāo)移動(dòng))請(qǐng)求的次數(shù).
    immediate 如果該組件被Ajax請(qǐng)求激活的話,標(biāo)記該組件應(yīng)該立即(在應(yīng)用請(qǐng)求值階段)被感興趣的監(jiān)聽器和動(dòng)作處理,而不是等到調(diào)用應(yīng)用程序階段.(譯者注:該標(biāo)記和JSF中的immediate標(biāo)記所代表的意思差不多,跳過驗(yàn)證階段到呈現(xiàn)響應(yīng)階段)
    onfocus 當(dāng)組件獲得焦點(diǎn)時(shí)發(fā)生的事件
    onmouseup 當(dāng)釋放鼠標(biāo)按鍵時(shí)發(fā)生的事件
    binding 組件綁定.
    onmousemove 鼠標(biāo)光標(biāo)在元素上移動(dòng)時(shí)發(fā)生的事件

    簡單來說a4j:CommandButton 是一個(gè)帶有AJAX Support的 HTML <input> 元素 . 包含所有的a4j:support的主要功能, 還有它自己的onclick事件的Ajax請(qǐng)求和所有與a4j:Support組合的CommandButton特性.

    a4j:outputPanel

    創(chuàng)建頁面中具有 AJAX-enabled的一個(gè)區(qū)域. 作為普通的請(qǐng)求,根據(jù)layout的屬性值("inline" or "block")呈現(xiàn)為 <span> 或者 <div> HTML 元素. ( "id"屬性將是clientId 屬性的值.) 對(duì)于一個(gè)AJAX請(qǐng)求,如果ajaxRendered被設(shè)置為true,該元素的內(nèi)容被包含在ajax響應(yīng)中.

    Table 4.7. a4j:outputPanel attributes

    styleClass 和HTML的class屬性一樣.
    title 該組件產(chǎn)生的標(biāo)記元素的提示文字(當(dāng)鼠標(biāo)移動(dòng)到該組件上面出現(xiàn)的提示文字)
    lang 產(chǎn)生該組件標(biāo)記所使用的語言
    layout HTML layout用于產(chǎn)生 markup. 可能的取值是: "block" 產(chǎn)生一個(gè) HTML <div> 元素, "inline" 產(chǎn)生一個(gè) HTML <span> 元素, 和 "none"不產(chǎn)生 HTML 元素. 對(duì)于none 當(dāng)子元素的rendered屬性被設(shè)置為false時(shí) 這里有個(gè)小例外 ,這是創(chuàng)建一個(gè)具有相同id的空 <span> 元素 作為子元素,用來當(dāng)作一個(gè)用于后序處理的占位符
    keepTransient 指 定所有子組件為non-transient的標(biāo)記.如果為true,所有的子組件將被設(shè)置為non-transient,并且在以保存的組件樹中 (keep in saved components tree). For output in self-renderer region all content ( By default, all content in <f:verbatim> tags and non-jsf elements in facelets, marked as transient - since, self-rendered ajax regions don't plain output for ajax processing ).
    ajaxRendered Defines, whether the content of this component must be (or not) included in AJAX response created by parent AJAX Container, even if it is not forced by reRender list of ajax action. Ignored if component marked to output by Ajax action. default false
    style HTML: 應(yīng)用在該組件上的CSS.
    rendered 如果為false,該組件將不會(huì)被顯示.
    binding 組件綁定.
    dir 文本方向.
    id 每個(gè)組件都應(yīng)該有個(gè)唯一的id. 如果沒有指定的話,將會(huì)自動(dòng)產(chǎn)生.

        <h:form>
    <a4j:region>
    <h:outputText value="Input your name" />
    <a4j:outputPanel>
    <h:message for="userName" style="color:red" />
    </a4j:outputPanel>
    <h:inputText id="un" value="#{nb.userName}" required="true"/>
    <a4j:outputPanel id="test" layout="block">
    <h:outputText value="#{nb.userName}" />
    </a4j:outputPanel>
    <a4j:commandButton value="submit"></a4j:commandLink>
    </a4j:region>
    </h:form>

    在上面的例子中,在每個(gè)a4j:commandButton請(qǐng)求時(shí) OutputPanels 中的 outputText 將被 reRendered. 當(dāng)驗(yàn)證錯(cuò)誤時(shí),消息將出現(xiàn);或者,text將重復(fù)出現(xiàn).

    a4j:actionparam

    聯(lián)合兩個(gè)JSF tags的橋梁, <f:actionListener>; 和 <f:param>. 在呈現(xiàn)階段,像往常一樣被符組件 (<h:commandLink>; 或者 like) 解碼,在處理請(qǐng)求階段,如果父組件執(zhí)行一個(gè)動(dòng)作事件, 更新"assignTo" 屬性的值為它的新值.如果一個(gè)轉(zhuǎn)換屬性被指定了,使用它來編碼和解碼該值 為保存在html 參數(shù)中的字符串.

    Table 4.8. a4j:actionparam attributes

    noEscape 如 果設(shè)置為true,該值將不會(huì)被附上但引號(hào) 并且每一轉(zhuǎn)義字符. This allows the use of the value as JavaScript code for calculating value on the client-side. This doesn't work with non-AJAX components.
    value 初始化的值或者值綁定
    converter 使用一個(gè)轉(zhuǎn)換(converter )的id 或者引用一個(gè)converter.
    assignTo EL表達(dá)式用來更新bean的屬性. 如果父組件執(zhí)行一個(gè) actionEvent,該值將被更新.
    binding 組件綁定.
    name 該參數(shù)的名字
    id 每個(gè)組件都應(yīng)該有個(gè)唯一的id. 如果沒有指定的話,將會(huì)自動(dòng)產(chǎn)生.

    a4j:status

    在客戶端呈現(xiàn)一個(gè)表現(xiàn)ajax請(qǐng)求狀態(tài)的標(biāo)識(shí).

    在編碼過程中:

        創(chuàng)建兩個(gè)帶有id的該組件的子(clientId )span元素,或者添加了":status.start" 和 ":status:stop" 字符串的 ajax區(qū)域的目標(biāo)(使用for屬性來指定). "start" span 具有 "display:none" style (隱藏).在span里面,呈現(xiàn)startText/stopText屬性值或者如果"start" 和 "stop" facets存在的話,呈現(xiàn)facets的內(nèi)容. 在執(zhí)行一個(gè)ajax請(qǐng)求時(shí), 客戶端的js代碼改變 "start" span 的可見屬性并且隱藏"stop". 當(dāng)該指示器所指示的請(qǐng)求都完成時(shí),恢復(fù)"stop" 并且隱藏"start" .start[style,styleClass] 和 stop[style,styleClass] 被呈現(xiàn)為 spans 的 style 和 class 屬性 .

        During Encoding: Creates two "span" elements with id created as clientId of this component or of target AJAX region (pointed to by the "for" property) with appended ":status.start" and ":status:stop" strings. "start" span has "display:none" style (hidden). Inside this span, renders the value of the startText/stopText properties or, if they exist, the content of "start" and "stop" facets. On performing an AJAX request, the client-side script changes the visibility of the "start" span and hides "stop". After all requests for this indicator are completed, restores "stop" and hide "start" start[style,styleClass] and stop[style,styleClass] are rendered for spans as style and class atributes, respectivetly.

    在解碼的過程中:

    ....

         Creates two "span" or "div"(depending on 'layout' attribute) elements with id created as clientId of this component or of target AJAX region (pointed to by the "for" property) with appended ":status.start" and ":status:stop" strings. "start" element has "display:none" style (hidden). Inside this element, renders the value of the startText/stopText properties or, if they exist, the content of "start" and "stop" facets. On performing an AJAX request, the client-side script changes the visibility of the "start" element and hides "stop". After all requests for this indicator are completed, restores "stop" and hide "start" start[style,styleClass] and stop[style,styleClass] are rendered for spans as style and class atributes, respectivetly.

    Table 4.9. a4j:status attributes

    startStyleClass 在開始一個(gè)請(qǐng)求時(shí)應(yīng)用到組件上的CSS類
    stopStyle 在 一個(gè)請(qǐng)求響應(yīng)完成時(shí)應(yīng)用到組件上的CSS
    stopStyleClass 在 一個(gè)請(qǐng)求響應(yīng)完成時(shí)應(yīng)用到組件上的CSS類
    layout 定義面板的布局,可以為block或者inline
    title 該組件產(chǎn)生的標(biāo)記元素的提示文字(當(dāng)鼠標(biāo)移動(dòng)到該組件上面出現(xiàn)的提示文字)
    rendered 如果為false,該組件將不會(huì)被顯示.
    id 每個(gè)組件都應(yīng)該有個(gè)唯一的id. 如果沒有指定的話,將會(huì)自動(dòng)產(chǎn)生.
    dir 文本方向.
    styleClass 和HTML的class屬性一樣.
    startStyle 在開始一個(gè)請(qǐng)求時(shí)應(yīng)用到組件上的CSS類
    onkeypress 鍵盤事件,鍵被按下和松開
    ondblclick HTML: 雙擊事件
    style HTML: 應(yīng)用在該組件上的CSS.
    onmouseover 當(dāng)滑鼠移動(dòng)到組件上方時(shí)
     
    for 指定應(yīng)用于 AjaxContainer組件的ID ( 在javax.faces.UIComopnent.findComponent() 中使用).
    onkeyup 當(dāng)使用者按下并放開按鍵
    lang 產(chǎn)生該組件標(biāo)記所使用的語言
    onclick 當(dāng)鼠標(biāo)點(diǎn)擊時(shí)發(fā)生的事件
     
    onmouseout 鼠標(biāo)光標(biāo)移開元素時(shí)發(fā)生的事件
    startText 在請(qǐng)求開始時(shí)顯示的文本
    onkeydown 鍵按下時(shí)發(fā)生的事件
    onmousedown 按下鼠標(biāo)按鍵時(shí)發(fā)生的事件
    forceId 如果為true,呈現(xiàn)組件id為HTML代碼而不是JSF產(chǎn)生的代碼.(譯者注:參考Myfaces中的ForceId.)
    stopText 當(dāng)請(qǐng)求完成時(shí)顯示的文本
    onmouseup 當(dāng)釋放鼠標(biāo)按鍵時(shí)發(fā)生的事件
    binding 組件綁定.
    onmousemove 鼠標(biāo)光標(biāo)在元素上移動(dòng)時(shí)發(fā)生的事件

    指示請(qǐng)求狀態(tài)的兩種表示方式:

    1. 定義 "startText" 和 "stopText" 屬性

                      <a4j:status startText="Performing Request" 
      stopText="Request Done"
      for="stat1"/>
    2. 定義 "start" 和 "stop" facets

                      <a4j:status for="stat2">
      <f:facet name="start">
      <h:graphicImage value="/images/ajax_process.gif" />
      </f:facet>
      <f:facet name="stop">
      <h:graphicImage value="/images/ajax_stoped.gif" />
      </f:facet>
      </a4j:status>

      在任何一種狀態(tài)下,當(dāng)請(qǐng)求開始時(shí) - ":status.start" span 將被呈現(xiàn) 并且在請(qǐng)求結(jié)束后":status.stop" span 將出現(xiàn).

    將狀態(tài)應(yīng)用到組件上也有兩種方法:

    1. 指定目標(biāo) AJAX Containers 的id為“for” 屬性的值

    2. 在組件上定義 “status” 屬性 指定到狀態(tài).

    如果for省略了 - 狀態(tài)組件將指向它所在的區(qū)域(status component will be pointed to region where it's placed )

    a4j:loadBundle

    加載一個(gè)本地化當(dāng)前view的資源包,并且暴露它(作為一個(gè)Map)為當(dāng)前請(qǐng)求的請(qǐng)求參數(shù). In difference of original f:loadBundle tag, stored in components tree and activate on ajax/non ajax responses

    Table 4.10. a4j:loadBundle attributes

    var 在請(qǐng)求范圍中使用的變量
    basename 資源文件的basename
    rendered 如果為false,該組件將不會(huì)被顯示.
    binding 組件綁定.
    id 每個(gè)組件都應(yīng)該有個(gè)唯一的id. 如果沒有指定的話,將會(huì)自動(dòng)產(chǎn)生.

    a4j:mediaOutput

    用用戶指定的資源( images, sounds, video, active objects, applets ...)來創(chuàng)建任何連接元素類型的類.在CreateContent屬性中指定的方法將把從DataBean中指定的值傳遞給OutputStream.重要: 在value中指定的數(shù)據(jù)bean必須實(shí)現(xiàn)Serializable接口.

    Table 4.11. a4j:mediaOutput attributes

    declare declare but don't instantiate flag
    dir 文本方向.
    id 每個(gè)組件都應(yīng)該有個(gè)唯一的id. 如果沒有指定的話,將會(huì)自動(dòng)產(chǎn)生.
    rev 該屬性用來描述從通過 href 屬性指定的錨點(diǎn)到當(dāng)前文檔的反向鏈接。該屬性值是通過空格分隔的 link 類型(值)的列表。
     
    mimeType 應(yīng)用于響應(yīng)頭的mime類型( 'image/jpeg' etc )
    style HTML: 應(yīng)用在該組件上的CSS.
    onmouseover 當(dāng)滑鼠移動(dòng)到組件上方時(shí)
     
    onkeyup 當(dāng)使用者按下并放開按鍵
    tabindex 設(shè)置不同元素之間獲得焦點(diǎn)的順序
    archive 空格分開的URIs
    converter converter
    lang 產(chǎn)生該組件標(biāo)記所使用的語言
    createContent 方法調(diào)用表達(dá)式用來傳遞資源到 OutputStream. 必須有兩個(gè)參數(shù) java.io.OutputStream 和 java.lang.Object ( deserialized value of data attribute )
    onmouseout 鼠標(biāo)光標(biāo)移開元素時(shí)發(fā)生的事件
    element 連接資源的html元素的名字-可能是 <a> <img> <object> <applet> <script> or <link>
    rel 該屬性描述了從當(dāng)前文檔到通過 href 屬性定義的錨點(diǎn)之間的關(guān)系。該屬性值是通過空格分隔的 link 類型(值)的列表(譯者注:在 Web 標(biāo)準(zhǔn)開發(fā)中,這個(gè)通常用來代替 target 屬性,配合腳本,用來表示目的窗口)。
    onmouseup 當(dāng)釋放鼠標(biāo)按鍵時(shí)發(fā)生的事件
    cacheable cacheable
    binding 組件綁定.
    onmousemove 鼠標(biāo)光標(biāo)在元素上移動(dòng)時(shí)發(fā)生的事件
    expires expires
    coords 定義區(qū)域 -- coords
    a.矩形:必須使用四個(gè)數(shù)字,前兩個(gè)數(shù)字為左上角座標(biāo),后兩個(gè)數(shù)字為右下角座標(biāo)
    例:<area shape=rect coords=100,50,200,75 href="URL">
    b.圓形:必須使用三個(gè)數(shù)字,前兩個(gè)數(shù)字為圓心的座標(biāo),最后一個(gè)數(shù)字為半徑長度
    例:<area shape=circle coords=85,155,30 href="URL">
    c.任意圖形(多邊形):將圖形之每一轉(zhuǎn)折點(diǎn)座標(biāo)依序填入
    例:<area shape=poly coords=232,70,285,70,300,90,250,90,200,78 href="URL">
    title 該組件產(chǎn)生的標(biāo)記元素的提示文字(當(dāng)鼠標(biāo)移動(dòng)到該組件上面出現(xiàn)的提示文字)
    shape default|rect|circle|poly [CI] 該屬性指定一個(gè)區(qū)域的形狀.可能的取值: * default: 指定整個(gè)區(qū)域. * rect:指定一個(gè)矩形區(qū)域. * circle: 定義一個(gè)圓形區(qū)域. * poly: 定義一個(gè)多邊形區(qū)域.
    target  
    session session
    charset 該屬性指定了通過鏈接指派的資源的字符編碼.
    rendered 如果為false,該組件將不會(huì)被顯示.
    codetype 代碼的內(nèi)容類型
    classid 指定一個(gè)實(shí)現(xiàn)
    styleClass 和HTML的class屬性一樣.
    accesskey 觸發(fā)該組件的快捷鍵
    onkeypress 鍵盤事件,鍵被按下和松開
    ondblclick HTML: 雙擊事件
    align bottom|middle|top|left|right 只用元素的對(duì)齊方式.不建議使用.
    vspace 不建議使用
    standby 當(dāng)載入時(shí)顯示的文字
    lastModified lastModified
    border 不建議使用.
    onblur 當(dāng)元素失去焦點(diǎn)時(shí)發(fā)生的事件
    value 在程序時(shí)候計(jì)算的值,并且保存在URI中(也是cache Key的一部分 ), 在產(chǎn)生是傳遞到send method. 可以用來更新緩存的值.重要的: 既然序列化的數(shù)據(jù)保存在URI中,避免使用大的對(duì)象
    hreflang  
    codebase 用于 classid, data, archive的base URI
    type 該屬性指定鏈接資源所采用的內(nèi)容類型。(譯者注:例如網(wǎng)頁通常為 text/html)
    uriAttribute 資源連接屬性的名字.  ( 'href' for <a>, 'src' for <img> or <script>, etc
    onclick 當(dāng)鼠標(biāo)點(diǎn)擊時(shí)發(fā)生的事件
     
    onkeydown 鍵按下時(shí)發(fā)生的事件
    onmousedown 按下鼠標(biāo)按鍵時(shí)發(fā)生的事件
    hspace 不建議使用了,
    onfocus 使用在表單元素中,當(dāng)元素獲得焦點(diǎn)時(shí)發(fā)生的事件

    our Examples page.上有個(gè)創(chuàng)建圖片的示例. 就像我們前面提到的一樣,任何實(shí)現(xiàn)了 Serializable的 Bean 都可以是createContent方法的數(shù)據(jù)提供者.

    Chapter 5. Ajax4jsf中的更換皮膚功能

    Ajax4jsf 提供了一種在UI設(shè)計(jì)中很容易使用的換皮膚功能.使用這個(gè)框架,你可以很容易的在資源文件中使用命名皮膚參數(shù)來控制程序的顯示外觀.這里有個(gè)例子,提供了幾種皮膚:

    http://livedemo.exadel.com/vcpDemo/

    使用Ajax4jsf 框架的skinability 服務(wù),你可以很容易的控制程序的look-and-feel. 在Ajax4jsf的幫助下,使用skinability 服務(wù),你可以在標(biāo)準(zhǔn)的JSF組件和自定義的JSF組件中定義相同的風(fēng)格 .

    為了使用skinability 功能,請(qǐng)按照下面的步驟來:

    1. 創(chuàng)建一個(gè)自定義的render kit并且在faces-config.xml 中注冊(cè)它:

          <render-kit>
      <render-kit-id>NEW_SKIN</render-kit-id>
      <render-kit-class>
      org.ajax4jsf.framework.renderer.ChameleonRenderKitImpl
      </render-kit-class>
      </render-kit>
    2. 然 后,我們需要為已經(jīng)定義好的組件皮膚 創(chuàng)建和注冊(cè)自定義renderers  (Then we need to create and register custom renderers for the component skins based on the look-and-feel predefined variables that have been defined for the render-kit):

          <renderer>
      <component-family>javax.faces.Command</component-family>
      <renderer-type>javax.faces.Link</renderer-type>
      <renderer-class>
      newskin.HtmlCommandLinkRenderer
      </renderer-class>
      </renderer>
    3. 最后,我們需要放置一個(gè)保存皮膚參數(shù)的屬性文件在類路徑根目錄下面.該屬性文件有兩個(gè)要求:

      • 文件名必須是<name of renderer class>.skin.properties ― 在上面的例子中 將是newskin.skin.properties .

      • 文件的第一行應(yīng)該是 render.kit=<render-kit-id> ― 在上面的例子中 將是  render.kit=NEW_SKIN .

    關(guān)于創(chuàng)建自定義 renderers 的更多的信息可以在下面的連接中找到:

    http://java.sun.com/javaee/javaserverfaces/reference/docs/index.html

    Chapter 6. 技術(shù)要求

    下面是你使用 Ajax4jsf的技術(shù)條件.

    • Java

    • JavaServer Faces

    • Java application server or servlet container

    • Browser (on client side)

    支持的 Java 版本

    • JDK 1.4 - 1.5

    支持的 JavaServer Faces 實(shí)現(xiàn)

    (注意: Ajax4JSF 也和 Facelets JSF 組件兼容.)

    • Sun JSF 1.1RI

    • JSF 1.2

    • MyFaces 1.1.1 - 1.1.3

    支持的 Servers

    • Apache Tomcat 4.1 - 5.5

    • IBM Web Sphere 5.1 - 6

    • BEA Web Logic 8.1 - 9

    • Oracle AS / OC4J 10.1.3

    • Resin 3.0

    • Jetty 5.1.X

    • Sun Application Server 8 (J2EE 1.4)

    • Glassfish (J2EE 5)

    • JBoss 3.2 - 4.0

    支持的 Browsers

    • IE 5 - 6

    • FireFox 1.0 - 1.5

    • Opera 8.0 - 9.0

    • Netscape 7.0

    Chapter 7. 附加的設(shè)置

    Ajax4jsf支持JSF中的所有組件和標(biāo)簽.在一個(gè)已經(jīng)存在的JSF項(xiàng)目中添加Ajax4jsf支持,你必須把Ajax4jsf 庫放在項(xiàng)目的lib目錄下,并且在web.xml文件中添加過濾器mapping.如果僅僅添加Ajax4JSF功能 則已經(jīng)存在的項(xiàng)目的行為將不會(huì)改變.

    web項(xiàng)目描述參數(shù)

    這些參數(shù)幫助開發(fā)和提高Ajax4JSF的擴(kuò)展性.

     

    Table 7.1. 初始化參數(shù)

    Name Default Description
    org.ajax4jsf.LOGFILE none 指向程序或者容器的日志文件的URL( 如果可能的話).如果該參數(shù)被設(shè)置了,給定的URL的內(nèi)容將出現(xiàn)在Debug錯(cuò)誤頁面的iframe 中
    org.ajax4jsf.VIEW_HANDLERS none 逗 號(hào)隔開的自定義ViewHandler 實(shí)例的列表.handlers 將按照順序插入在ajax4jsf viewhandlers 的前面.例如,在 facelets中該參數(shù)必須包含 com.sun.facelets.FaceletViewHandler , 代替在faces-config.xml中聲明
    org.ajax4jsf.CONTROL_COMPONENTS none 逗 號(hào)分開的用于特殊控制的組件名字 - 例如資源綁定loader , MyFaces alias bean components 等等.通過反射從靜態(tài)的 COMPONENT_TYPE域中得到組件的類型. For components with such types encode methods always will be called in rendering AJAX responses, even if component not in updated part
    org.ajax4jsf.ENCRYPT_RESOURCE_DATA false For generated resources ( such as encrypt generation data, encoded in resource URL. for example, url for image generated from mediaOutput component will contain name of genetation method - since, for hacker attack is possible to create request for any JSF baked beans or other attributes. To prevent such attacks, set this parameter to 'true' in critical applications ( work with JRE > 1.4
    org.ajax4jsf.ENCRYPT_PASSWORD random 用來加密資源數(shù)據(jù)的密碼. 如果沒有設(shè)置,則使用隨機(jī)密碼
    org.ajax4jsf.SKIN DEFAULT 程序中用到的皮膚名字.可以是皮膚的名字或者EL表達(dá)式( #{...} ) 指向String屬性 ( 皮膚名字) or具有org.ajax4jsf.framework.skin.Skin類型的屬性 -在最后一種情況下,該實(shí)例將會(huì)作為當(dāng)前程序的皮膚.


     

    Table 7.2. org.ajax4jsf.Filter 初始化參數(shù)

    Name Default Description
    log4j-init-file - Path (relative to web application context) to log4j.xml configuration file - cn be used to setup per-application custom logging.
    enable-cache true Enable caching of framework-generated resources (java script, CSS, images etc). For debug purposes - development custom JavaScript or Style - prevent to use old cached in browser.
    forceparser true Force parsing by filter HTML syntax checker on any JSF page. If false, only AJAX responses will be parsed to syntax check and conwersion to well-formed XML. setting to false improve performanse, but can provide visual effects on ajax updates


    Sun JSF RI

    Ajax4jsf 與任何JSF (both JSF 1.1 and JSF 1.2) 實(shí)現(xiàn)都兼容.不需要附加的設(shè)置就可以和大部分JSF 組件庫共同工作. 更多的信息參考:

    java.sun.com

    Apache MyFaces

    Ajax4jsf 與所有的Apache MyFaces versions (1.1.1 - 1.1.3)兼容,并且包含附加的類庫,如: Tomahawk Sandbox 和將來的Trinidad (以前的 ADF Faces). 但是有一些東西需要配置,為了使 MyFaces 和 Ajax4jsf更好的共同工作.

    在web.xml文件中定義的不同F(xiàn)ilters會(huì)有一些沖突. 為了避免這些問題,在web.xml文件中 Ajax4jsf filter 必須放在其他filters的前面 .

    更多信息參考: http://myfaces.apache.org/

    Facelets Support

    在高層次上支持 Facelets 是項(xiàng)目的主要特性之一.為了與Ajax4jsf一同工作, 使用每個(gè) Facelets 版本都是一樣的(除了在新發(fā)布的版本中有一些 Facelets bugs的修復(fù)).

    注意: 一些JSF框架,如 Facelets使用自己的ViewHandler 并且希望它在ViewHandlers連中處于第一個(gè)位置.  Ajax4jsf AjaxViewHandler is no exception to this(也是如此?).為了解決這個(gè)沖突,從 1.0b5開始,我們提供了 context parameter, org.ajax4jsf.VIEW_HANDLERS,用來定義handlers的順序. 例如,下面的聲明:

        <context-param>
    <param-name>org.ajax4jsf.VIEW_HANDLERS</param-name>
    <param-value>com.sun.facelets.FaceletViewHandler</param-value>
    </context-param>

    說明Facelets 將理所當(dāng)然的在第一個(gè)位置, 然而 AjaxViewHandler 將偷偷摸摸的在前面做一些臨時(shí)的小工作(當(dāng)然也是非常重要的).(注意: 你不在 WEB-INF/faces-config.xml中定義 FaceletViewHandler .)

    JBoss Seam Support

    最近, 我們遇到一些與 JBoss Seam兼容的問題. 主要的問題是 在服務(wù)啟動(dòng)時(shí)的"ClassNotFoundException" exception.

    該問題是由JBoss ClassLoader 的配置引起的.關(guān)于該問題的詳細(xì)描述可以在 JBoss Wiki 上找到.

    在工作區(qū)中,你可以使用下面的方法設(shè)置這些框架共同工作(JSF with facelets implementation):

    • 復(fù)制下面的jars到 $JBOSSSERVERHOME/default/lib:

      // 譯者注: 作者忘了寫那些類庫了....

      確定上面提到的類庫沒有被部署到你的程序中

      用于一個(gè)global JBoss Classloader 的問題,這些事情必須被做.

    • 確定 Facelets View Handler 沒有在 faces-config中指定

    • 把 web.xml 該為如下的內(nèi)容:

      web-app version="2.4" 
      xmlns="http://java.sun.com/xml/ns/j2ee"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

      <!-- Seam -->
      <listener>
      <listener-class>org.jboss.seam.servlet.SeamListener</listener-class>
      </listener>

      <!-- Propagate conversations across redirects -->
      <filter>
      <filter-name>Seam Redirect Filter</filter-name>
      <filter-class>org.jboss.seam.servlet.SeamRedirectFilter</filter-class>
      </filter>

      <!-- ajax4jsf -->
      <filter>
      <display-name>Ajax4jsf Filter</display-name>
      <filter-name>ajax4jsf</filter-name>
      <filter-class>org.ajax4jsf.Filter</filter-class>
      </filter>
      <filter-mapping>
      <filter-name>ajax4jsf</filter-name>
      <url-pattern>*.seam</url-pattern>
      </filter-mapping>

      <filter-mapping>
      <filter-name>Seam Redirect Filter</filter-name>
      <url-pattern>*.seam</url-pattern>
      </filter-mapping>

      <filter>
      <filter-name>Seam Exception Filter</filter-name>
      <filter-class>org.jboss.seam.servlet.SeamExceptionFilter</filter-class>
      </filter>

      <filter-mapping>
      <filter-name>Seam Exception Filter</filter-name>
      <url-pattern>*.jsf</url-pattern>
      </filter-mapping>

      <!-- JSF -->
      <context-param>
      <param-name>javax.faces.STATE_SAVING_METHOD</param-name>
      <param-value>client</param-value>
      </context-param>

      <context-param>
      <param-name>org.ajax4jsf.VIEW_HANDLERS</param-name>
      <param-value>com.sun.facelets.FaceletViewHandler</param-value>
      </context-param>

      <context-param>
      <param-name>javax.faces.DEFAULT_SUFFIX</param-name>
      <param-value>.xhtml</param-value>
      </context-param>
      <context-param>
      <param-name>facelets.REFRESH_PERIOD</param-name>
      <param-value>2</param-value>
      </context-param>
      <context-param>
      <param-name>facelets.DEVELOPMENT</param-name>
      <param-value>true</param-value>
      </context-param>
      <context-param>
      <param-name>com.sun.faces.validateXml</param-name>
      <param-value>true</param-value>
      </context-param>
      <context-param>
      <param-name>com.sun.faces.verifyObjects</param-name>
      <param-value>true</param-value>
      </context-param>
      <context-param>
      <param-name>org.ajax4jsf.SKIN</param-name>
      <param-value>DEFAULT</param-value>
      </context-param>

      <servlet>
      <servlet-name>Faces Servlet</servlet-name>
      <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
      <load-on-startup>1</load-on-startup>
      </servlet>

      <!-- Faces Servlet Mapping -->
      <servlet-mapping>
      <servlet-name>Faces Servlet</servlet-name>
      <url-pattern>*.seam</url-pattern>
      </servlet-mapping>

      <!-- MyFaces -->
      <listener>
      <listener-class>org.apache.myfaces.webapp.StartupServletContextListener</listener-class>
      </listener>
      </web-app>
    • 如果你有任何帶有參數(shù)(f:param)的h:commandLink,請(qǐng)使用a4j:commandLink來替換它,否則參數(shù)將丟失.

    Chapter 8. IDE支持

    Exadel Studio 4 是一個(gè)完全支持 Exadel VCP, Ajax4jsf, Facelets, Struts, MyFaces, 和其他Web 技術(shù)的IDE. 除此以外, 它無縫的結(jié)合了可視化和面向代碼的開發(fā)過程. 支持Ajax4JSF 和 VCP的方式之一是提供特別的預(yù)定義的功能,該功能可以在任何JSF項(xiàng)目中添加ajax3jsf支持,并提供 Visual Page Editor, Open On, Content Assist, 和 Components Palette features等功能.

    Chapter 9. Exadel VCP 和 Ajax4jsf

    Exadel VCP 是一個(gè)建立在ajax4jsf上的一個(gè)高級(jí)框架,用于建立用于web程序的富接口.它添加了很多 AJAX 和 UI components并且 包含很多易于更改的 skinnability for UI designs.

    Chapter 10. 在web上存在的資源


    posted on 2008-08-29 16:42 找個(gè)美女做老婆 閱讀(7783) 評(píng)論(0)  編輯  收藏


    只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


    網(wǎng)站導(dǎo)航:
     

    導(dǎo)航

    統(tǒng)計(jì)

    公告

    本blog已經(jīng)搬到新家了, 新家:www.javaly.cn
     http://www.javaly.cn

    常用鏈接

    留言簿(6)

    隨筆檔案

    文章檔案

    搜索

    最新評(píng)論

    閱讀排行榜

    評(píng)論排行榜

    主站蜘蛛池模板: 国产AV无码专区亚洲AV漫画| 久久综合AV免费观看| 在线a人片天堂免费观看高清| 亚洲宅男永久在线| 日韩视频免费在线观看| 亚洲av午夜成人片精品网站| 亚洲AV无码专区在线电影成人| 在线免费观看毛片网站| 久久亚洲精品国产精品婷婷| 成年女人喷潮毛片免费播放| 亚洲国产精品无码久久98| 国产免费资源高清小视频在线观看| 亚洲熟妇AV乱码在线观看| 四虎国产精品免费久久| 含羞草国产亚洲精品岁国产精品 | 色偷偷尼玛图亚洲综合| 免费a级毛片无码a∨性按摩| 一级一黄在线观看视频免费| 亚洲国产综合无码一区| 无码日韩精品一区二区免费暖暖| 久久亚洲精品国产精品| 成人无码区免费A片视频WWW | 一区二区三区免费视频观看| 亚洲精品字幕在线观看| 永久免费视频网站在线观看| 亚洲中文字幕无码av永久| 无码国产亚洲日韩国精品视频一区二区三区| 亚洲精品无码成人片久久不卡| 日批日出水久久亚洲精品tv| 国产福利免费视频 | 久久亚洲精品无码网站| 老司机亚洲精品影视www| 青青草无码免费一二三区| 亚洲欧美国产欧美色欲| 久久亚洲国产精品五月天婷| 18级成人毛片免费观看| 在线亚洲v日韩v| 久久久国产精品亚洲一区| 在线观着免费观看国产黄| 国产猛男猛女超爽免费视频| 亚洲高清有码中文字|