【问题标题】:When it is essential to use a h:form, a a4j:region and a a4j:form in JSF?什么时候必须在 JSF 中使用 h:form、a4j:region 和 a4j:form?
【发布时间】:2014-02-26 06:12:05
【问题描述】:

抱歉,我不明白这些 JSF 元素之间的确切区别。例如,我什么时候可以使用 h:form 和 a4j:form,什么时候在 JSF 中不可避免地使用一般的表单?

非常感谢! 麦克

【问题讨论】:

    标签: jsf richfaces ajax4jsf


    【解决方案1】:

    h:form 呈现 HTML 表单元素。页面上可以多于 1 个h:form。页面上的表格

    1. 不能嵌套也不能重叠
    2. 只有包含触发请求的控制组件(例如提交按钮)的表单中的数据才会被发送回服务器
    3. 如果提交表单上的任何控件值验证失败,则支持 bean 属性的 NONE 将得到更新,并且不会触发操作方法和/或侦听器。如果页面上存在 h:messages 标签,则显示“验证失败”消息。

    a4j:form 是 RichFaces 3 的一部分,在 RichFaces 4 中不受支持(应使用h:form)。它是 ajax 相关版本的 html 表单(seeajaxListenerajaxSingleajaxSubmitreRenderlimitToList 属性)。

    在 RichFaces 3 和 RichFaces 4 中,为了重新渲染页面的一部分,使用了a4j:region 标签。

    组件指定要在服务器上处理的 JSF 组件树的一部分。该区域导致所有 a4j 和丰富的 Ajax 控件执行:解码、验证和更新模型。即使没有显式声明,该区域也会导致这些组件执行。因此,使用声明性方法可以更轻松地标记处理区域。

    简单的答案:当您不需要重新渲染组件时使用h:form,或者当您需要使用ajax 重新渲染组件时使用a4j:region 包装组件。

    【讨论】:

    【解决方案2】:

    我同意 Vasil Lukach 关于<h:form<a4j:form 的看法,但<a4j:region 需要更多的解释,因为很多人不明白它的作用、工作原理以及应该使用什么。

    在richfaces 3 中有<a4j:region 标签和ajaxSingle 属性。如果您用<a4j:region 包围单个组件,则第一个ajaxSingle 属性相同。

    在 JSF 2 中引入了支持 ajax 的执行属性,您可以在其中指定组件的 ID @form, @region, @this. @this 等于 Richfaces 3 ajaxSingle 属性。

    所有这些属性和标签都是为一件事而创建的。限制将在服务器端处理 ajax 请求的组件。这里所说的限制组件处理是指两个阶段,编号 3 Process Validation4 Update Model 值将被跳过,用于不在 <a4j:region 内或未列在执行属性中的组件。

    从我所说的您可以看出,当您拥有一个包含 ajax 控件的大型丰富表单时,这些功能很有用。默认情况下,如果您在字段上有验证器,并且想要使用一些 ajax 控件在没有验证器的情况下更新表单的一部分,您将看到验证错误。 JSF 不允许您进行此类更新。但是,如果您用<a4j:region 包围表单的这一部分或在执行属性中列出这部分的所有输入(仅适用于 JSF 2),您将能够成功提交表单的一部分,而无需验证您不需要的字段这一步。

    我还想谈谈 ajax 组件上的immediate 属性。重要的是要知道它与 region 和 ajaxsingle 一起做什么。它强制 JSF 生命周期跳过所有阶段并直接转到 5 Invoke application。这是什么意思?这意味着不会对任何组件执行任何验证,并且不会将表单值分配给您的 bean。只会调用侦听器或操作方法。这对于取消或返回按钮的实现非常有用。或者当您需要删除具有验证的大型丰富表单的一部分时(删除部分)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-04-30
      • 1970-01-01
      • 2014-02-03
      • 1970-01-01
      • 1970-01-01
      • 2016-10-22
      • 2020-03-06
      相关资源
      最近更新 更多