日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

开发自定义JSF组件(4) 保存状态与恢复状态

發布時間:2024/9/20 javascript 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 开发自定义JSF组件(4) 保存状态与恢复状态 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

2019獨角獸企業重金招聘Python工程師標準>>>

完整的教材:

  • 開發自定義JSF組件(1) HelloWorld
  • 開發自定義JSF組件(2) 使用Render渲染器
  • 開發自定義JSF組件(3) 使用綁定變量
  • 開發自定義JSF組件(4) 保存狀態與恢復狀態
  • 開發自定義JSF組件(5) 在JSP中用JSF組件
  • ?上一節教材中,我們的項目已經完成了一個HelloWorld示例。在講保存狀態與恢復狀態之前,我先做一個錯誤的示例,以便讓大家了解什么保存狀態與恢復狀態。

    開發環境:

    • Windows 7
    • IntelliJ IDEA 12.1.2
    • jboss-6.1.0.Final
    • JSF 1.2

    修改項目中的helloWorld.xhtml,這個例子沒有實際的意義,只是期待點擊“刷新”按鈕的時候,重新刷新一下panelGroup區域。

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xmlns:f="http://java.sun.com/jsf/core" xmlns:ida="http://www.regaltec.com/ida40" xmlns:h="http://java.sun.com/jsf/html" xmlns:a4j="http://richfaces.org/a4j"> <f:view><head><title>Hello World</title></head><body><a4j:form><a4j:commandButton value="刷新" reRender="out" /></a4j:form><h:panelGroup id="out"><ida:helloWorld name="世界" /></h:panelGroup></body> </f:view> </html>

    如果你啟動jboss并打開這個示例,你會發現點擊按鈕后“你好世界”不顯示了,跟期望只是刷新一下有出入。其實這個bug就跟保存狀態、恢復狀態有關系了。

    使用JSF的同僚都知道,JSF有6個生命周期,在恢復視圖階段,倘若先前曾經調用過saveState()方法來存儲狀態信息,則在此階段調用組件的restoreState()方法。明白了這個道理,我們重構代碼就容易了,整個項目中,只需要重構UIHelloWorld這個類就可以了,具體就是重載UIHelloWorld組件的saveState和restoreState方法,完整的代碼如下:

    public class UIHelloWorld extends UIOutput {private String name;public String getName() {if (StringUtils.isNotBlank(this.name)) {return name;}ValueExpression _ve = getValueExpression("name");if (_ve != null) {return (String)_ve.getValue(getFacesContext().getELContext());} else {return null;}}public void setName(String name) {this.name = name;}@Overridepublic String getFamily() {return "com.regaltec.faces.HelloWorld";}@Overridepublic Object saveState(FacesContext context) {Object values[] = new Object[2];values[0] = super.saveState(context);values[1] = name;return values;}@Overridepublic void restoreState(FacesContext context, Object state) {Object values[] = (Object[]) state;super.restoreState(context, values[0]);name = (String) values[1];} }

    注意:1、需要保存的狀態次序與恢復狀態的次序要保持一致;2、一般情況都不能丟掉父類的狀態。

    現在再啟動jboss運行示例,helloWold.jsf頁面點擊按鈕能正常工作了。

    轉載于:https://my.oschina.net/zhuzhiou/blog/132147

    總結

    以上是生活随笔為你收集整理的开发自定义JSF组件(4) 保存状态与恢复状态的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。