【发布时间】:2014-02-26 06:12:05
【问题描述】:
抱歉,我不明白这些 JSF 元素之间的确切区别。例如,我什么时候可以使用 h:form 和 a4j:form,什么时候在 JSF 中不可避免地使用一般的表单?
非常感谢! 麦克
【问题讨论】:
抱歉,我不明白这些 JSF 元素之间的确切区别。例如,我什么时候可以使用 h:form 和 a4j:form,什么时候在 JSF 中不可避免地使用一般的表单?
非常感谢! 麦克
【问题讨论】:
h:form 呈现 HTML 表单元素。页面上可以多于 1 个h:form。页面上的表格
a4j:form 是 RichFaces 3 的一部分,在 RichFaces 4 中不受支持(应使用h:form)。它是 ajax 相关版本的 html 表单(seeajaxListener、ajaxSingle、ajaxSubmit、reRender、limitToList 属性)。
在 RichFaces 3 和 RichFaces 4 中,为了重新渲染页面的一部分,使用了a4j:region 标签。
组件指定要在服务器上处理的 JSF 组件树的一部分。该区域导致所有 a4j 和丰富的 Ajax 控件执行:解码、验证和更新模型。即使没有显式声明,该区域也会导致这些组件执行。因此,使用声明性方法可以更轻松地标记处理区域。
简单的答案:当您不需要重新渲染组件时使用h:form,或者当您需要使用ajax 重新渲染组件时使用a4j:region 包装组件。
【讨论】:
a4j:region相关信息
我同意 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 Validation 和 4 Update Model 值将被跳过,用于不在 <a4j:region 内或未列在执行属性中的组件。
从我所说的您可以看出,当您拥有一个包含 ajax 控件的大型丰富表单时,这些功能很有用。默认情况下,如果您在字段上有验证器,并且想要使用一些 ajax 控件在没有验证器的情况下更新表单的一部分,您将看到验证错误。 JSF 不允许您进行此类更新。但是,如果您用<a4j:region 包围表单的这一部分或在执行属性中列出这部分的所有输入(仅适用于 JSF 2),您将能够成功提交表单的一部分,而无需验证您不需要的字段这一步。
我还想谈谈 ajax 组件上的immediate 属性。重要的是要知道它与 region 和 ajaxsingle 一起做什么。它强制 JSF 生命周期跳过所有阶段并直接转到 5 Invoke application。这是什么意思?这意味着不会对任何组件执行任何验证,并且不会将表单值分配给您的 bean。只会调用侦听器或操作方法。这对于取消或返回按钮的实现非常有用。或者当您需要删除具有验证的大型丰富表单的一部分时(删除部分)。
【讨论】: