使用NetBeans Visual Web Package是目前功能最強大的免費JSF可視化開發工具(SUN Creator與Visual Web Package其實就是一種產品)。在VW的幫助下,開發JSF就如同使用NetBeans開發Swing一樣,所見即所得,真正的實現了JSF開發的初衷。再加上豐富的組件(包括支持AJAX的插件GOOGLE MAP等,需另外下載),開發起JSF來十分得心應手。今天我們來輕松的實現JSF里可加入書簽的URL,也就是GET請求。
首先,到
www.netbeans.org上下載Visual Web Package( Technology Preview ),并且安裝好。(不用截圖了吧)

然后再創建一個新的工程。
選擇右邊Web下的Visual Web Application ,起個好名字。
source structure 推薦選擇 Java BluePrint (JAVA藍圖標準),或者使用 Jakarta 。
去掉 Set source level to 1.4 前面的鉤?,要不然就使用JDK1.4開發了。
其他的根據自己需要的設定好,點擊 Finish 整個項目就創建好了。

在 Project 窗口中可以看到 BluePrint 下的本項目結構。應該一看就明白:
??????? Themes 目錄下有IDE自帶的三個主題,可以根據需要要,簡單的切換整個項目Web的主題。對于我這樣不怎么懂得CSS的人來說是個福音;對于那些美工來說,可以專門的編輯這些主題,供開發人員直接使用,很方便。
??????? Page Navigation 是可視化的頁面導航配置(當然也可以直接寫XML配置),可以讓你把頁面里可以有導航作用的組件(或者整個頁面)通過拖拽到其他頁面來自動配置頁面的導航規則,同時給該組件加上return "toXXPage"的方法。
??????? 清晰的將三種 Managed Bean 分類列舉出來,很直觀。
??????? Configuration File 下有熟悉的 faces-config.xml 和 web.xml 。其中 web.xml 可以讓你可視化(如同選擇、填表一樣)配置 Web 的 Filter、Sevlet、Security、XML、General、Pages、Refference信息。以前這些復雜的配置都在這里可以很方便的進行了。
下面我們就開始實現可以加入書簽的URL,也就是GET請求
打開一個Page,?將組件托盤里的HyperLink拖拽到頁面中間,作為導航入口。請記住,實現GET請求的導航必須是鏈接類型,而不能是按鈕等動作類型的。

在屬性框里更改其Text,讓這個鏈接顯示成為你想要的文字。或者在本鏈接上點又鍵,選擇Data Binding,將其綁定到一個屬性上(以后詳細介紹)。
然后,在本鏈接屬性框里的URL后寫上?faces/page2.jsp?name=XXX?
注意:一定要以faces/開頭 。導航機制自動的將你的項目 http://localhost/yourProject/?映射到 faces/ 下,然后faces/ 又將映射到 web/ 下。所以使用NetBean?Visual Web開發的JSF部署后,如果要定位到某個頁面,其名字不是 xxxPage.faces,
而直接是 xxxPage.jsp ! 并且,http://localhost/yourProject/? 將自動映射到本項目下默認的其實頁面(設置方法是右鍵點要設為默認起始的頁面,選設置為起始頁面即可)。在上面的URL也可以輸入綁定表達式和運算表達式,其中page2.jsp代表了就是你要導航到的頁面,"?"后面就是“參數名字=值”的形式,并且多個的參數和值對之間用&鏈接,下面你將看到簡單的根據這些參數名字獲取到值的方法。
新建一個叫page2的頁面(方法很多,不用介紹了吧),從組件托盤中選擇 Static Text 拖入到頁面中,在屬性面版中更改 ID 為 output 以便我們以后方便的使用。點擊頁面編輯器上 Java 按鈕,進入到本頁面的 Request Bean , 這個 Bean 是在生成本頁面時候自動生成的,與頁面同名并且是 Request 范圍的,主要就是負責頁面的表示和邏輯。Visual Web會自動的為頁面上每個組件生成相應的JAVA代碼,也就是說,你可以在這個頁面內動態的控制頁面內每個組件的屬性。
下面我們要在 public void prerender() {?? }方法中寫上代碼。???prerender()?方法是負責在頁面生成前做好一切準備的工作的,如同其名字一樣,預渲染。所以我們要在這個時候把剛才通過GET方法傳到本頁面的參數提取出來。方法很簡單:

?public?void?prerender()?
{
????????String?name?=?(String)?getExternalContext().getRequestParameterMap().get("name");
????????
????????if(?name?!=?null?)
????????this.output.setText(name);

????}通過getRequestParameterMap()就能獲得所有的 參數名-值 的MAP,即可從中輕松的取得想要的參數值了。
最后我們將 Static Text 的值設置為name參數的值,就大致的展示了我們能獲得一個GET請求了!這樣就可以讓用戶將此頁面保存到書簽(收藏夾),并且動態的獲取信息,而不再是僅僅依靠內部導航機制了。
結果我就不在這里展示了,自己動手體驗下吧!
???????