第三章 Warming up: getting around JSF
一、使用JSF要用到的東西:
Sun 的 RI ,Apache的MyFaces,后者提供了更多的特性。決定用后者。
下載了MyFaces的Examples回來,運(yùn)行了一遍,看到有很多有趣的控件,包括:下拉菜單,樹型控件,所見即所得編輯器等等,更令人激動(dòng)的是,它們?cè)贗E和Firefox里面運(yùn)行的效果是一樣的。
IDE習(xí)慣了使用Eclipse,但很少有插件能夠很好地支持所見即所得的JSF。MyEclipse可以提供JSF支持,而且最近的一個(gè)Milestone版本提供了所見即所得的編輯功能,但是有一個(gè)很大的問題,中文字符在源代碼里會(huì)顯示為UNICODE代碼,查看起來比較麻煩,論壇上已經(jīng)有人提出了這個(gè)問題,希望4.0最終版出來后能解決這個(gè)問題。
在尋找專門針對(duì)Myfaces的IDE時(shí),結(jié)果有點(diǎn)令人失望。MyEclipse只支持最基本的JSF Components,找到一個(gè)日本的開源站點(diǎn),sourceforge.jp,里面有一個(gè)專門針對(duì)Myfaces的IDE,F(xiàn)acesIDE,但剛剛才開始開發(fā),現(xiàn)在是0.1.7版,不知道什么時(shí)候才成熟呢。
二、配置文件
1、web.xml配置文件需要設(shè)置的東西
2、JSF配置文件
日常應(yīng)用程序開發(fā),UI擴(kuò)展開發(fā),高級(jí)開發(fā)。
Faces Console可以圖形化配置。
根標(biāo)簽:<faces-config>
其他標(biāo)簽均為可選:
日常應(yīng)用程序配置及高級(jí)擴(kuò)展注冊(cè):<application> <managed-bean> <referenced-bean> <navigation-rule>
用戶界面擴(kuò)展注冊(cè):<component> <render-kit> <validator> <converter>
高級(jí)特性配置:<lifecycle> <factory>
默認(rèn)會(huì)尋找 WEB-INF/faces-config.xml。也可以通過javax.faces.CONFIG_FILES上下文參數(shù)(在web.xml里面)來指定配置文件。JSF還會(huì)在JAR文件(或者其他資源路徑)里面尋找META-INF/faces-config.xml文件。
3、JSP的include
<jsp:include> <c:import>是動(dòng)態(tài)包含,也就是在運(yùn)行時(shí)把被包含文件的運(yùn)行結(jié)果包含進(jìn)來。使用動(dòng)態(tài)包含時(shí),需要做兩樣?xùn)|西:
(1)被包含的文件必須在JSF標(biāo)簽<f:subview>里面,這個(gè)標(biāo)簽可以在被包含的文件,也可以放在<jsp:include>語句的前后。
(2)被包含文件中的所有template text和非JSF標(biāo)簽都應(yīng)該括在JSF標(biāo)簽<f:verbatim>里面。
靜態(tài)包含是在翻譯階段把被包含文件加到包含文件里面,再編譯成可運(yùn)行的class,所以被包含文件的更新可能沒有影響到包含文件。JSF使用靜態(tài)包含沒有任何限制。
4、JSF與其他JSP標(biāo)簽
無論什么時(shí)候,把一個(gè)JSF標(biāo)簽嵌套在非JSF標(biāo)簽里面時(shí),必須為JSF標(biāo)簽設(shè)置component identifier。
不可以在<c:forEach>等對(duì)標(biāo)簽內(nèi)容進(jìn)行反復(fù)處理的標(biāo)簽內(nèi)加入JSF標(biāo)簽,要通過HtmlDataTable組件或者其他組件來遍歷數(shù)據(jù)集或集合。
可以通過組件的rendered屬性來控制組件的顯示與否,即使控件不能顯示出來,也能記住它的值;如果用<c:if>來控制的話,不顯示的時(shí)候值也丟失了。
三、Managed Beans
1、在配置文件里可以指定Managed Beans的名稱、類、初始化屬性等,但真正創(chuàng)建它是在第一次使用它的時(shí)候。
2、生命周期長(zhǎng)的對(duì)象不能引用生命周期短的對(duì)象
3、不能循環(huán)引用對(duì)象
四、Navigation Rules
1、有兩種方法設(shè)定Navigation Case: <from-action>和<from-outcome>
2、可以用*來代表符合要求的<from-view-id>,如果有多個(gè)符合要求,則選擇最長(zhǎng)的那個(gè)
聯(lián)系客服