什么是过程和更新在PrimeFaces p:commandXxx组件和执行和渲染在f:ajax标签?

哪个在验证时工作? update属性做什么,而不是从后端更新值到组件?进程属性绑定值到模型?这两个属性中的@this,@parent,@all和@form究竟是什么?

下面的例子是工作正常,但我有点困惑的基本概念。

<p:commandButton process="@parent"
                 update="@form"
                 action="#{bean.submit}" 
                 value="Submit" />
< p:commandXxx process> < p:ajax process> < f:ajax execute>

进程属性是服务器端,只能影响实现EditableValueHolder(输入字段)或ActionSource(命令字段)的UIComponent。 process属性告诉JSF,使用空格分隔的客户机ID列表,在(部分)表单提交时,哪些组件必须在整个JSF生命周期中处理。

JSF然后将应用请求值(基于组件自己的客户端ID查找HTTP请求参数,然后在EditableValueHolder组件的情况下将其设置为提交值,或者在ActionSource组件的情况下排队新的ActionEvent),执行转换,验证和更新模型值(仅限EditableValueHolder组件),最后调用排队的ActionEvent(仅限ActionSource组件)。 JSF将跳过对未被进程属性覆盖的所有其他组件的处理。此外,在应用请求值阶段期间其呈现属性评估为假的组件也将被跳过作为防止被篡改请求的安全措施的一部分。

请注意,在ActionSource组件(例如< p:commandButton>)的情况下,您还必须将组件本身包含在process属性中,特别是如果您打算调用与组件相关联的操作。因此,当调用某个命令组件时打算仅处理某些输入组件的下面的示例不是工作:

<p:inputText id="foo" value="#{bean.foo}" />
<p:commandButton process="foo" action="#{bean.action}" />

它只会处理#{bean.foo}而不是#{bean.action}。您还需要包含命令组件本身:

<p:inputText id="foo" value="#{bean.foo}" />
<p:commandButton process="@this foo" action="#{bean.action}" />

或者,正如你明显发现的,使用@parent如果它们恰好是具有共同父级的唯一组件:

<p:panel><!-- Type doesn't matter,as long as it's a common parent. -->
    <p:inputText id="foo" value="#{bean.foo}" />
    <p:commandButton process="@parent" action="#{bean.action}" />
</p:panel>

或者,如果它们恰好是父UIForm组件的唯一组件,那么也可以使用@form:

<h:form>
    <p:inputText id="foo" value="#{bean.foo}" />
    <p:commandButton process="@form" action="#{bean.action}" />
</h:form>

如果表单包含更多您希望在处理中跳过的输入组件,则这通常是不希望的,比如当您想要更新另一个输入组件或基于当前输入组件一个ajax侦听器方法。你不想让其他输入组件上的验证错误阻止执行ajax侦听器方法。

然后有@all。这在进程属性中没有特殊效果,但只在update属性中。 process =“@ all”的行为与process =“@ form”完全相同。 HTML不支持一次提交多个表单。

还有一个@none,这可能是有用的,如果你绝对不需要处理任何东西,但只想通过更新更新一些特定的部分,特别是那些内容不依赖于提交的值或动作侦听器。

相当于PrimeFaces特定进程的标准JSF是从< f:ajax execute>执行的。它的行为完全相同,除了它不支持逗号分隔的字符串,而PrimeFaces(尽管我个人建议只是坚持使用空格分隔的约定),也不支持@parent关键字。此外,可能有用的是知道< p:commandXxx process>默认为@form while< p:ajax process>和< f:ajax execute>默认为@this。最后,知道该过程支持所谓的“PrimeFaces选择器”也是有用的,另见How do PrimeFaces Selectors as in update=”@(.myClass)” work?

< p:commandXxx update> < p:ajax update> < f:ajax render>

update属性是客户端,可以影响所有UIComponent的HTML表示。 update属性告诉JavaScript(负责处理ajax请求/响应的),使用客户端ID的空格分隔列表,需要更新HTML DOM树中的哪些部分作为对表单提交的响应。

然后JSF将为其准备正确的ajax响应,仅包含要更新的请求部分。 JSF将跳过ajax响应中未被update属性覆盖的所有其他组件,从而保持响应有效载荷较小。此外,在呈现响应阶段期间其呈现属性评估为false的组件将被跳过。请注意,即使它将返回true,JavaScript不能在HTML DOM树中更新它,如果它最初为false。你需要换行或更新它的父代。参见Ajax update/render does not work on a component which has rendered attribute。

通常,您只想更新(部分)表单提交时真正需要在客户端“刷新”的组件。下面的示例通过@form更新整个父表单:

<h:form>
    <p:inputText id="foo" value="#{bean.foo}" required="true" />
    <p:message id="foo_m" for="foo" />
    <p:inputText id="bar" value="#{bean.bar}" required="true" />
    <p:message id="bar_m" for="bar" />
    <p:commandButton action="#{bean.action}" update="@form" />
</h:form>

(注意process属性被省略,因为默认为@form已经)

虽然这可能工作正常,但在该特定示例中输入和命令组件的更新是不必要的。除非你改变模型值foo和bar里面action方法(这反过来在UX透视中是不直观的),没有更新它们的点。消息组件是唯一真正需要更新的组件:

<h:form>
    <p:inputText id="foo" value="#{bean.foo}" required="true" />
    <p:message id="foo_m" for="foo" />
    <p:inputText id="bar" value="#{bean.bar}" required="true" />
    <p:message id="bar_m" for="bar" />
    <p:commandButton action="#{bean.action}" update="foo_m bar_m" />
</h:form>

然而,当你有很多它们时,这是乏味。这是PrimeFaces选择器存在的原因之一。这些消息组件在生成的HTML输出中有一个通用的ui-message样式类,所以下面也应该这样做:

<h:form>
    <p:inputText id="foo" value="#{bean.foo}" required="true" />
    <p:message id="foo_m" for="foo" />
    <p:inputText id="bar" value="#{bean.bar}" required="true" />
    <p:message id="bar_m" for="bar" />
    <p:commandButton action="#{bean.action}" update="@(.ui-message)" />
</h:form>

(注意,你应该保留ID在消息组件,否则@(…)将无法工作!再次,详细请参见How do PrimeFaces Selectors as in update=”@(.myClass)” work?)

@parent仅更新父组件,从而覆盖当前组件和所有同级组件及其子组件。这是更有用的,如果你已经分离窗体中的单词组与每个自己的责任。 @this更新,显然,只有当前组件。通常,只有在需要更改action方法中组件自身的HTML属性时,才需要这样做。例如。

<p:commandButton action="#{bean.action}" update="@this" 
    oncomplete="doSomething('#{bean.value}')" />

想象一下,oncomplete需要使用在操作中更改的值,然后如果组件没有更新,这个构造将不会工作,因为oncomplete是生成的HTML输出的一部分(因此所有EL表达式在渲染响应期间评估)。

@all更新整个文档,应小心使用。通常,您想要使用一个真正的GET请求,而不是通过一个普通的链接(< a>或< h:link>)或一个重定向后POST由… faces-redirect = true或ExternalContext# redirect()。在效果中,process =“@ form”update =“@ all”具有与非ajax(非部分)提交完全相同的效果。在我的整个JSF生涯中,我遇到的唯一明智的用例@all是显示一个错误页面,以便在ajax请求期间发生异常。参见What is the correct way to deal with JSF 2.0 exceptions for AJAXified components?

相当于PrimeFaces特定更新的标准JSF从< f:ajax render>呈现。它的行为完全相同,除了它不支持一个逗号分隔的字符串,而PrimeFaces(虽然我个人建议只是坚持使用空格分隔的约定),也不支持@parent关键字。更新和渲染默认为@none(这是“无”)。

也可以看看:

> How to find out client ID of component for ajax update/render? Cannot find component with expression “foo” referenced from “bar”
> Execution order of events when pressing PrimeFaces p:commandButton
> How to decrease request payload of p:ajax during e.g. p:dataTable pagination
> How to show details of current row from p:dataTable in a p:dialog
> How to use <h:form> in JSF page? Single form? Multiple forms? Nested forms?

了解PrimeFaces process/update和JSF f:ajax execute/render属性的更多相关文章

  1. HTML5新增form控件和表单属性实例代码详解

    这篇文章主要介绍了HTML5新增form控件和表单属性实例代码详解,需要的朋友可以参考下

  2. HTML5表单验证特性(知识点小结)

    这篇文章主要介绍了HTML5表单验证特性的一些知识点,本文通过实例代码截图的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

  3. amazeui页面分析之登录页面的示例代码

    这篇文章主要介绍了amazeui页面分析之登录页面的示例代码,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

  4. ios – 当pod的新版本可用时,“pod update”是否会覆盖我的代码更改?

    我的更改会被覆盖吗?你能描述为什么是或为什么不?关于如何做到这一点.

  5. ios – 什么是Sprite Kit中的SKSpinLockSync以及如何解决它

    我收到一个带有以下堆栈跟踪的错误报告,我不知道问题是什么.我已经看到这样的建议,这可能是由于在纹理图集中有一个发射器的图像,或者是在添加的同一个运行循环中移除了一个发射器,但我认为这些都不会发生.这是一个零星的问题,我无法再创造它.我只在bug报告中看到它.我很乐意帮忙.编辑:我现在意识到我在几种不同的情况下得到SKSpinLockSync问题,并不总是与发射器有关.我认为,我经常使用发射器看到它

  6. ios – Swift Eureka Form中的循环

    我正在构建一个Eureka表单,并希望在表单中放置一个循环来构建基于数组的步进器列表.我试图使用的代码是:但是,当我这样做时,我在StepperRow行上出现了一个错误:所以看起来Swift不再认为它在形式之内并且正在关注

  7. 应用程序关闭时的iOS任务

    我正在构建一个应用程序,通过ajax将文件上传到服务器.问题是用户很可能有时不会有互联网连接,并且客户希望在用户重新连接时安排ajax调用.这可能是用户在离线时安排文件上传并关闭应用程序.应用程序关闭时可以进行ajax调用吗?

  8. Carthage使用解决部分Swift运行时的问题

    1、首先,简单的利用Carthagehttps://github.com/Carthage/Carthage要求进行简单测试使用,建立一个demo测试2、可能由于xcode版本原因在:类似我执行时出现的错误:Argo.framework是用旧的编译器编译的(估计下载的那个包是用Xcode7编译因此在工程文件目录下需要执行将所有需要的包下载下来(原本执行update操作会直接将运行好的framewo

  9. pod install 与 pod update的区别

    podinstall是安装Podfile中指定版本的第三方库。podupdate是安装最新的版本,如果之前已经安装了,但是有新版本,会更新版本。

  10. swift 上传图片和参数 upload image with params

    Alamofire.upload(urlRequest.0,urlRequest.1).progress{(bytesWritten,totalBytesWritten,totalBytesExpectedToWrite)inprintln("\(totalBytesWritten)/\(totalBytesExpectedToWrite)")}}

随机推荐

  1. xe-ajax-mock 前端虚拟服务

    最新版本见Github,点击查看历史版本基于XEAjax扩展的Mock虚拟服务插件;对于前后端分离的开发模式,ajax+mock使前端不再依赖后端接口开发效率更高。CDN使用script方式安装,XEAjaxMock会定义为全局变量生产环境请使用xe-ajax-mock.min.js,更小的压缩版本,可以带来更快的速度体验。

  2. vue 使用 xe-ajax

    安装完成后自动挂载在vue实例this.$ajaxCDN安装使用script方式安装,VXEAjax会定义为全局变量生产环境请使用vxe-ajax.min.js,更小的压缩版本,可以带来更快的速度体验。cdnjs获取最新版本点击浏览已发布的所有npm包源码unpkg获取最新版本点击浏览已发布的所有npm包源码AMD安装require.js安装示例ES6Module安装通过Vue.use()来全局安装示例./Home.vue

  3. AJAX POST数据中文乱码解决

    前端使用encodeURI进行编码后台java.net.URLDecoder进行解码编解码工具

  4. Koa2框架利用CORS完成跨域ajax请求

    实现跨域ajax请求的方式有很多,其中一个是利用CORS,而这个方法关键是在服务器端进行配置。本文仅对能够完成正常跨域ajax响应的,最基本的配置进行说明。这样OPTIONS请求就能够通过了。至此为止,相当于仅仅完成了预检,还没发送真正的请求呢。

  5. form提交时,ajax上传文件并更新到&lt;input&gt;中的value字段

  6. ajax的cache作用

    filePath="+escape;},error:{alert;}});解决方案:1.加cache:false2.url加随机数正常代码:网上高人解读:cache的作用就是第一次请求完毕之后,如果再次去请求,可以直接从缓存里面读取而不是再到服务器端读取。

  7. 浅谈ajax上传文件属性contentType = false

    默认值为contentType="application/x-www-form-urlencoded".在默认情况下,内容编码类型满足大多数情况。在这里,我们主要谈谈contentType=false.在使用ajax上传文件时:在其中先封装了一个formData对象,然后使用post方法将文件传给服务器。说到这,我们发现在JQueryajax()方法中我们使contentType=false,这不是冲突了吗?这就是因为当我们在form标签中设置了enctype=“multipart/form-data”,

  8. 909422229_ajaxFileUpload上传文件

    ajaxFileUpload.js很多同名的,因为做出来一个很容易。我上github搜AjaxFileUpload出来很多类似js。ajaxFileUpload是一个异步上传文件的jQuery插件传一个不知道什么版本的上来,以后不用到处找了。语法:$.ajaxFileUploadoptions参数说明:1、url上传处理程序地址。2,fileElementId需要上传的文件域的ID,即的ID。3,secureuri是否启用安全提交,默认为false。4,dataType服务器返回的数据类型。6,error

  9. AJAX-Cache:一款好用的Ajax缓存插件

    原文链接AJAX-Cache是什么Ajax是前端开发必不可少的数据获取手段,在频繁的异步请求业务中,我们往往需要利用“缓存”提升界面响应速度,减少网络资源占用。AJAX-Cache是一款jQuery缓存插件,可以为$.ajax()方法扩展缓存功能。

  10. jsf – Ajax update/render在已渲染属性的组件上不起作用

    我试图ajax更新一个有条件渲染的组件。我可以确保#{user}实际上是可用的。这是怎么引起的,我该如何解决呢?必须始终在ajax可以重新呈现之前呈现组件。Ajax正在使用JavaScriptdocument.getElementById()来查找需要更新的组件。但是如果JSF没有将组件放在第一位,那么JavaScript找不到要更新的内容。解决方案是简单地引用总是渲染的父组件。

返回
顶部