什么时候在JSF中使用h:form,a4j:region和a4j:form是必不可少的?

时间:2014-02-26 06:12:06

标签: jsf richfaces ajax4jsf

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

非常感谢! MAIK

2 个答案:

答案 0 :(得分:2)

h:form呈现HTML表单元素。它可能超过页面上的1 h:form。页面上的表格

  1. 不能嵌套也不能重叠
  2. 只有包含触发请求的控件组件(例如“提交”按钮)的表单中的数据才会回发到服务器
  3. 如果提交的表单上的任何控件值未通过验证,则无法更新任何支持bean属性,并且不会触发操作方法和/或侦听器。如果页面上存在h:messages标记,则会显示“验证失败”消息。
  4. a4j:form是RichFaces 3的一部分,在RichFaces 4中不受支持(应使用h:form)。这是与ajax相关的html表单版本(see ajaxListenerajaxSingleajaxSubmitreRenderlimitToList属性。)

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

      

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

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

答案 1 :(得分:1)

我同意Vasil Lukach关于<h:form<a4j:form<a4j:region需要更大的解释,因为很多人不明白它的作用以及它是如何工作的以及为什么它应该被使用。

在richfaces 3中,有<a4j:region代码和ajaxSingle属性。如果您使用ajaxSingle包围一个组件,则第一个<a4j:region属性是相同的。

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

所有这些属性和标签都是为一件事创建的。限制将在ajax请求上在服务器端处理的组件。通过在此处说限制组件处理,我的意思是,对于不在3 Process Validation内或未在执行属性中列出的组件,将跳过两个阶段,即4 Update Model<a4j:region值。

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

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