【问题标题】:p:commandButton with immediate=truep:commandButton with immediate=true
【发布时间】:2013-05-14 11:19:19
【问题描述】:

当我在命令按钮中声明immediate="true" 时会采取什么行动?文档说

布尔值,用于确定操作事件的 phaseId,当在“应用请求值”处理 true 操作时,在“调用应用程序”阶段处理 false。

但是,我不明白。有人可以解释一下吗?

【问题讨论】:

标签: jsf-2


【解决方案1】:

JSF 生命周期包含 6 个阶段,分别是:

  1. 恢复视图
  2. 应用请求值
  3. 流程验证
  4. 更新模型值
  5. 调用应用程序
  6. 呈现响应

如果命令按钮有immediate="true",则跳过“处理验证”和“更新模型值”阶段。因此,不会处理转换和验证,也不会更新托管 bean 中的属性。

但是,如果表单中的 UIInput 也具有 immediate="true",则其值将在托管 bean 中进行转换、验证和更新,因为它将发生在“应用请求值”阶段。

您可以使用带有 immediate="true" 的按钮的一个示例是“取消”按钮。

【讨论】:

  • 欢迎您@Ponni Maran。像任何输入一样,如果它具有 immediate="true",则验证(如果有)将发生在“应用请求值阶段”,并且它的值也将在该阶段发送到托管 bean。
  • 很好,达米安,我确实基于单选选择/取消全选。在 p:dialog 数据表中。在对话框关闭按钮中,我在第一次打开对话框时使用 immediate="true" 关闭并重新打开对话框列表复选框后使用 immediate="true" 复选框具有先前选择的值不会通过选择单个选择复选框来更新新值
  • 根据您的话更新 bean 值。但是一旦更新它就无法改变
  • 让我看看我是否明白。您打开对话框,其中显示托管 bean 中的选定选项。然后您更改它们,但单击“关闭”(立即=真)。然后你重新打开并显示更改的值?这并不意味着更改已应用于 bean。要再次显示 bean 值,您应该通过 ajax 更新对话框(可能在关闭按钮中)。这将再次从 bean 中获取值
  • 感谢它运行良好。我确实理解命令按钮和输入字段中的黑白差异
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-14
  • 1970-01-01
  • 1970-01-01
  • 2021-04-11
  • 2013-10-20
相关资源
最近更新 更多