很抱歉,但我不明白这些JSF元素之间的确切区别。例如,我什么时候可以使用h:form和a4j:表单,以及何时在JSF中不可避免地使用表格?
非常感谢! MAIK
答案 0 :(得分:2)
h:form
呈现HTML表单元素。它可能超过页面上的1 h:form
。页面上的表格
a4j:form
是RichFaces 3的一部分,在RichFaces 4中不受支持(应使用h:form
)。这是与ajax相关的html表单版本(see ajaxListener
,ajaxSingle
,ajaxSubmit
,reRender
,limitToList
属性。)
在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。只会调用监听器或操作方法。它对取消或返回按钮的实现非常有用。或者当您需要删除部分具有验证的大型富表单时(删除部分)。