【问题标题】:A few questions reagarding UI components state and phases关于 UI 组件状态和阶段的几个问题
【发布时间】:2013-04-27 22:26:41
【问题描述】:

浏览了这些优秀的帖子:

Why JSF saves the state of UI components on server?

Why does JSF save component tree state?

在JavaEE6教程中途我还有以下问题:

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

谢谢

【问题讨论】:

  • 我理解一次提出许多问题的个人便利性,但将来请每个问题问一个问题 :) 这样更容易充实答案或指出重复的问题,并且本质上也其他人搜索并查找特定问题。
  • 我刚刚问了很多问题,因为我发现它们最终会得到一个更完整的答案,就像我引用的链接一样,这非常有用。将来会坚持单个问题;) - 谢谢

标签: jsf jsf-2


【解决方案1】:

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

是的。您通常为此使用StateHelper

另见:


说UI组件的作用域是view作用域对吗?

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

另见:


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

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

另见:


当我执行 Ajax 调用时,我希望 UI 组件的“执行”部分会被恢复和处理,而“渲染”部分会被恢复和更新。

这对于恢复部分是不正确的。恢复“整体”视图状态。请注意,自 JSF 2.0 以来,视图状态并不一定代表整个组件树。您已经在问题中提到的两个链接中找到了对此的解释/答案。


如何定义构建时组件(相对于渲染时),我为什么要这样做? (好像build time组件和rendertime混合起来很麻烦,为什么两者都有)

这称为“标签处理程序”。 IE。只需从TagHandler 扩展而不是UIComponent 并根据其合同实施。如果唯一的目标是构建视图(JSF 组件树),则标记处理程序很有用。它们不会出现在 JSF 组件树中。至于何时创建自定义组件或自定义标签处理程序,请查看OmniFaces showcase 的“组件”和“标签处理程序”部分,它可能会为这些事物的实际用例提供一些新的见解。

另见:

【讨论】:

    猜你喜欢
    • 2015-05-10
    • 2015-06-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-23
    • 1970-01-01
    相关资源
    最近更新 更多