日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) >

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

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

2019獨(dú)角獸企業(yè)重金招聘Python工程師標(biāo)準(zhǔn)>>>

完整的教材:

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

    開發(fā)環(huán)境:

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

    修改項(xiàng)目中的helloWorld.xhtml,這個(gè)例子沒有實(shí)際的意義,只是期待點(diǎn)擊“刷新”按鈕的時(shí)候,重新刷新一下panelGroup區(qū)域。

    <!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>

    如果你啟動(dòng)jboss并打開這個(gè)示例,你會(huì)發(fā)現(xiàn)點(diǎn)擊按鈕后“你好世界”不顯示了,跟期望只是刷新一下有出入。其實(shí)這個(gè)bug就跟保存狀態(tài)、恢復(fù)狀態(tài)有關(guān)系了。

    使用JSF的同僚都知道,JSF有6個(gè)生命周期,在恢復(fù)視圖階段,倘若先前曾經(jīng)調(diào)用過saveState()方法來存儲(chǔ)狀態(tài)信息,則在此階段調(diào)用組件的restoreState()方法。明白了這個(gè)道理,我們重構(gòu)代碼就容易了,整個(gè)項(xiàng)目中,只需要重構(gòu)UIHelloWorld這個(gè)類就可以了,具體就是重載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、需要保存的狀態(tài)次序與恢復(fù)狀態(tài)的次序要保持一致;2、一般情況都不能丟掉父類的狀態(tài)。

    現(xiàn)在再啟動(dòng)jboss運(yùn)行示例,helloWold.jsf頁(yè)面點(diǎn)擊按鈕能正常工作了。

    轉(zhuǎn)載于:https://my.oschina.net/zhuzhiou/blog/132147

    總結(jié)

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

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。