关于UI组件状态和阶段的几个问题

Ioa*_*nis 0 jsf jsf-2

经历了这些优秀的帖子:

为什么JSF会在服务器上保存UI组件的状态?

为什么JSF保存组件树状态?

在JavaEE6教程的中途,我仍然有以下问题:

  1. 当我开发一个自定义UI组件,其值(styleClass,value等)是静态定义的(在xhtml中)或通过bean设置时,我是否还需要在扩展组件中显式保存/恢复状态?
  2. 说UI组件的范围是视图作用域是否正确?
  3. 视图如何识别行为?(如果我离开视图,视图将在下一次重建.但是如果我打开另一个选项卡,它将被恢复 - 至少是bean!)
  4. 当我执行Ajax调用时,我希望UI组件的"执行"部分将被恢复和处理,并且"渲染"部分将被恢复和更新.在遇到UI的一些问题之后:重复,不清楚组件树的恢复范围以及是否可以部分编辑.作为一个例子(我不确定它是这样工作的):我定义了一个UI:重复迭代某些值并创建一些Ajax命令链接.每当我调用该命令时,无论我定义的Ajax范围(执行/渲染)如何,它都将恢复整个ui:repeat.所以它将重新渲染整个ui:重复.此外,我不明白它是如何永远不能恢复ui:repeat因为它是一个命名容器,它将编辑我新添加的组件的id.
  5. 如何定义构建时组件(vs渲染时)以及为什么要这样做?(与渲染时混合似乎构建时间组件很麻烦,为什么两者都有)

谢谢

Bal*_*usC 6

当我开发一个自定义UI组件,其值(styleClass,value等)是静态定义的(在xhtml中)或通过bean设置时,我是否还需要在扩展组件中显式保存/恢复状态?

是.你通常用StateHelper它.

也可以看看:


说UI组件的范围是视图作用域是否正确?

绝对不.UI组件实例是请求范围的.只有通过存储的任何内容StateHelper实质上是视图范围(并在"恢复视图"阶段恢复到新创建的组件实例).

也可以看看:


视图如何识别行为?(如果我离开视图,视图将在下一次重建.但是如果我打开另一个选项卡,它将被恢复 - 至少是bean!)

它可能是从浏览器缓存请求的.尝试在其中提交表格.你得到一个机会很大ViewExpiredException.您需要告诉浏览器不要缓存动态页面.在bean的构造函数上设置断点也会确认它从未被调用过.

也可以看看:


当我执行Ajax调用时,我希望UI组件的"执行"部分将被恢复和处理,并且"渲染"部分将被恢复和更新.

恢复部分不是这样.恢复"整个"视图状态.请注意,视图状态确实如此,因为JSF 2.0不一定代表整个组件树.您已经在问题中提到的两个链接中找到了解释/答案.


如何定义构建时组件(vs渲染时)以及为什么要这样做?(与渲染时混合似乎构建时间组件很麻烦,为什么两者都有)

这称为"标签处理程序".即只是延伸TagHandler而不是UIComponent根据合同实施.如果唯一目标是构建视图(JSF组件树),则标记处理程序很有用.它们不会出现在JSF组件树中.至于何时创建自定义组件或自定义标签处理程序,请检查OmniFaces展示的"components"和"taghandlers"部分,它可能会为这些事物的真实用例提供一些新的见解.

也可以看看:


归档时间:

查看次数:

1268 次

最近记录:

12 年,4 月 前