博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
开发自定义JSF组件(4) 保存状态与恢复状态
阅读量:6988 次
发布时间:2019-06-27

本文共 1722 字,大约阅读时间需要 5 分钟。

hot3.png

完整的教材:

 上一节教材中,我们的项目已经完成了一个HelloWorld示例。在讲保存状态与恢复状态之前,我先做一个错误的示例,以便让大家了解什么保存状态与恢复状态。

开发环境:

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

修改项目中的helloWorld.xhtml,这个例子没有实际的意义,只是期待点击“刷新”按钮的时候,重新刷新一下panelGroup区域。

Hello World

如果你启动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;    }    @Override    public String getFamily() {        return "com.regaltec.faces.HelloWorld";    }    @Override    public Object saveState(FacesContext context) {        Object values[] = new Object[2];        values[0] = super.saveState(context);        values[1] = name;        return values;    }    @Override    public 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

你可能感兴趣的文章
eureka多注册中心
查看>>
spring 数据源动态切换 与dubbo服务
查看>>
我的友情链接
查看>>
java嵌套类的一个小程序
查看>>
我的友情链接
查看>>
linux系统批量修改root用户密码
查看>>
我的shell×××作
查看>>
天猫超市低调运营 马云尝试自营B2C模式
查看>>
选择Palo Alto 防火墙十大理由
查看>>
Linux下解压,压缩JAR包的简单方法
查看>>
领先盘点2013年办公家具风格潮流趋势
查看>>
分布式事务:两阶段提交与三阶段提交
查看>>
linux deepin升级内核后,vmware需要gcc编译器
查看>>
针对IE6\7\8\9\10浏览器的CSS hack大全详解
查看>>
网站检测空链、死链工具(Xenu)
查看>>
Java Web学习总结(5)——HttpServletResponse对象详解
查看>>
Myeclipse常用快捷键
查看>>
热备份路由协议(HSRP)与生成树协议(TCP)
查看>>
C++应用程序性能优化(二)——C++对象模型
查看>>
smarty 中一些方法的使用
查看>>