当前位置:  开发笔记 > 编程语言 > 正文

JSF生命周期和自定义组件

如何解决《JSF生命周期和自定义组件》经验,为你挑选了1个好方法。

关于在JSF中开发自定义组件,我有一些事情很难理解.出于这些问题的目的,您可以假设所有自定义控件都使用值绑定/表达式(不是文字绑定),但我也对它们的解释感兴趣.

    我在哪里设置值绑定的值?这应该在解码中发生吗?或者应该解码做其他事情,然后在encodeBegin中设置值?

    从值绑定中读取 - 何时从值绑定读取数据与从提交值读取数据并将其放入值绑定?

    何时调用表单上的动作侦听器与所有这些相关?JSF生命周期页面都提到了在各个步骤中发生的事件,但是当我只调用一个命令按钮的简单监听器时,它并不完全清楚

我已经尝试了一些组合,但最终总是很难找到我认为来自对事件生命周期的基本误解的错误.



1> McDowell..:

JSF规范中有一个非常好的图表,它显示了请求生命周期 - 这对理解这些东西至关重要.

步骤是:

还原视图.UIComponent树已重建.

应用请求值.可编辑组件应实现EditableValueHolder.此阶段遍历组件树并调用processDecodes方法.如果组件不像UIData那样复杂,除了调用自己的解码方法之外,它不会做太多事情.除了找到它的渲染器并调用其解码方法,将自身作为参数传递之外,decode方法没有太大作用.获取任何提交的值并通过setSubmittedValue设置它是渲染器的工作.

流程验证.此阶段调用processValidators,它将调用validate.的验证方法以提交的值,与任何转换器将其转换,与任何验证器验证它和(假定该数据传送的那些测试)调用的setValue.这会将值存储为局部变量.虽然此局部变量不为null,但它将返回,而不是任何getValue调用的值绑定值.

更新模型值.此阶段调用processUpdates.在输入组件中,这将调用updateModel,它将获取ValueExpression并调用它以设置模型上的值.

调用应用程序.将在此处调用按钮事件侦听器等(如果内存服务则将导航).

渲染响应.树通过渲染器渲染并保存状态.

如果这些阶段中的任何一个失败(例如,值无效),则生命周期将跳至"渲染响应".

在大多数这些阶段之后可以触发各种事件,适当地调用侦听器(比如在过程验证之后的值更改侦听器).

这是一个有点简化的事件版本.有关更多详细信息,请参阅规范.

我会问你为什么要编写自己的UIComponent.这是一项非常重要的任务,需要深入了解JSF架构才能使其正确.如果需要自定义控件,最好创建一个具有等效渲染器的扩展UIComponent(如HtmlInputText)的具体控件.

如果污染不是问题,那么就有Apache MyFaces形式的开源JSF实现.

推荐阅读
家具销售_903
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有