<h:selectOneRadio id="sel" value="#{HelloBean.selected}">
<f:selectItem id="red" itemLabel=" red " itemValue="red"/>
<f:selectItem id="green" itemLabel=" green " itemValue="green"/>
</h:selectOneRadio>
<f:selectItem id="red" itemLabel=" red " itemValue="red"/>
<f:selectItem id="green" itemLabel=" green " itemValue="green"/>
</h:selectOneRadio>
2、配置本地化
faces-config.xml文件中添加
<application>
<locale-config>
<default-locale>zh_CN</default-locale>
</locale-config>
</application>
<application>
<locale-config>
<default-locale>zh_CN</default-locale>
</locale-config>
</application>
3、配置全局錯(cuò)誤頁面
建立錯(cuò)誤頁面error.jsp
isErrorPage="true"
……
<%=exception.getLocalizedMessage()%>
配置web.xml(可以自由配置異常類型/另外也可以根據(jù)error-code配置)
<error-page>
<exception-type>java.lang.Exception</exception-type>
<location>/error.jsp</location>
</error-page>
isErrorPage="true"
……
<%=exception.getLocalizedMessage()%>
配置web.xml(可以自由配置異常類型/另外也可以根據(jù)error-code配置)
<error-page>
<exception-type>java.lang.Exception</exception-type>
<location>/error.jsp</location>
</error-page>
4、配置統(tǒng)一的頁面
配置所有"error"都指向同一個(gè)頁面error.jsp(faces-config.xml)
<navigation-rule>
<from-view-id>*</from-view-id>
<navigation-case>
<from-outcome>error</from-outcome>
<to-view-id>/error.jsp</to-view-id>
</navigation-case>
</navigation-rule>
<navigation-rule>
<from-view-id>*</from-view-id>
<navigation-case>
<from-outcome>error</from-outcome>
<to-view-id>/error.jsp</to-view-id>
</navigation-case>
</navigation-rule>
5、request.setAttribute("name")
在JSF中轉(zhuǎn)換成:
FacesContext facesContext = FacesContext.getCurrentInstance();
facesContext.getExternalContext().getRequestMap().put("name","value");
FacesContext facesContext = FacesContext.getCurrentInstance();
facesContext.getExternalContext().getRequestMap().put("name","value");
6、配置保存視圖的狀態(tài)(javax.faces.STATE_SAVING_METHOD)
Web.xml:
<context-param>
<param-name>javax.faces.STATE_SAVING_METHOD</param-name>
<param-value>client</param-value>
</context-param>
或者保存在服務(wù)器上:
<context-param>
<param-name>javax.faces.STATE_SAVING_METHOD</param-name>
<param-value>server</param-value>
</context-param>
一般在開發(fā)應(yīng)用的時(shí)候保存在客戶端,如果保存在服務(wù)器端就無法知道視圖是否過期,會(huì)造成修改了JSP后,頁面之間不一致。
<context-param>
<param-name>javax.faces.STATE_SAVING_METHOD</param-name>
<param-value>client</param-value>
</context-param>
或者保存在服務(wù)器上:
<context-param>
<param-name>javax.faces.STATE_SAVING_METHOD</param-name>
<param-value>server</param-value>
</context-param>
一般在開發(fā)應(yīng)用的時(shí)候保存在客戶端,如果保存在服務(wù)器端就無法知道視圖是否過期,會(huì)造成修改了JSP后,頁面之間不一致。
7、使用JSTL
<%@ taglib uri="
8、修改系統(tǒng)自帶的錯(cuò)誤提示信息
在myfaces-all.jar的 javax.faces.包下面properties文件
9、MyFaces與JSF(SUN)的包會(huì)有沖突
有時(shí)無法跳轉(zhuǎn),后來發(fā)現(xiàn)原因在于我把Sun的JSF兩個(gè)包都包括進(jìn)來了,發(fā)生了沖突,其實(shí)MyFaces中就已經(jīng)有了jsf-impl.jar包。
10、在JSF中應(yīng)用JS
在JSF中應(yīng)用javascript在提交前做一些客戶端的驗(yàn)證或修改DOM動(dòng)作時(shí),有兩種常用方法
1、在form中添加onsubmit屬性
<h:form onsubmit="return JS()">
……
</h:form>
2、在commandButton中添加onclick屬性
<h:commandButton onclick="return JS()"/>
注意:JS在驗(yàn)證失敗(即不希望提交時(shí))必須return false,否則都會(huì)提交。
1、在form中添加onsubmit屬性
<h:form onsubmit="return JS()">
……
</h:form>
2、在commandButton中添加onclick屬性
<h:commandButton onclick="return JS()"/>
注意:JS在驗(yàn)證失敗(即不希望提交時(shí))必須return false,否則都會(huì)提交。
11、保護(hù)/下面的jsp文件不被直接訪問
在web.xml中加入:
<security-constraint>
<display-name>
Prevent access to raw JSP pages that are for JSF pages.
</display-name>
<web-resource-collection>
<web-resource-name>Raw-JSF-JSP-Pages</web-resource-name>
<!-- Add url-pattern for EACH raw JSP page -->
<url-pattern>/welcome.jsp</url-pattern>
<url-pattern>/login.jsp</url-pattern>
</web-resource-collection>
<auth-constraint>
<description>No roles, so no direct access</description>
</auth-constraint>
</security-constraint>
<security-constraint>
<display-name>
Prevent access to raw JSP pages that are for JSF pages.
</display-name>
<web-resource-collection>
<web-resource-name>Raw-JSF-JSP-Pages</web-resource-name>
<!-- Add url-pattern for EACH raw JSP page -->
<url-pattern>/welcome.jsp</url-pattern>
<url-pattern>/login.jsp</url-pattern>
</web-resource-collection>
<auth-constraint>
<description>No roles, so no direct access</description>
</auth-constraint>
</security-constraint>
個(gè)人認(rèn)為,JSF目前技術(shù)不夠成熟,采用JSF框架有很大的技術(shù)風(fēng)險(xiǎn),當(dāng)遇到問題時(shí)很難找到答案,而且兼容性不好,經(jīng)常會(huì)有莫名奇妙的問題冒出來。而且同時(shí)SUN的JSTL和JSF之間的EL都不能很好的融合,期待JSF2.0,期待MyFaces1.2。但是JSF是一個(gè)標(biāo)準(zhǔn),將來一定會(huì)變得很成熟。JSF類似.NET,所以JSF會(huì)吸收.NET的很多優(yōu)點(diǎn),JSF前景甚好。前不久看到在NETBEAN下開發(fā)JSF,發(fā)現(xiàn)JSF的組件很豐富。
JSF入門:http://www.javaworld.com.tw/confluence/pages/viewpage.action?pageId=2630
RichFaces Demo:http://livedemo.exadel.com/richfaces-demo/richfaces/tabPanel.jsf
IBM JSF:http://www.ibm.com/developerworks/cn/java/j-jsf3/