欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Richfaces 3.3的a4j小结

程序员文章站 2022-07-15 17:13:43
...

本文内容针对 3.3版本


关于ajax原理:

最近用firefox看了一下RichFaces的ajax报文

发现它的post的header中没有X-Http-With XmlHttpRequest

 

觉得很奇怪,后来看到jboss RichFaces社区有人回答这个问题。说是用开发人员认为XmlHttpRequest在有的浏览器下面有问题,因而采用了在post中增加 AJAXREQUEST _viewRoot 的方式。

 

我猜还有部分原因是因为为了配合jsf的生命周期,ajax4jsf的JavaScript引擎采用模拟的方式发送post,jsf的server并不知道发过来的post是同步的还是异步的,因而请求都按照lifecycle的6个周期进行处理。

只是发现有AJAXREQUEST 后,某些部分做特殊处理(也就是说这个标志位表明是ajax请求)。

请求的结果(也就是需要reRender的部分的xml)返回给ajax4jsf的JavaScript引擎,由JavaScript引擎更新到页面上。

 

关于a4j的使用

这里说明几个容易混乱的概念。

 

ajaxSingle

input控件的子component中包含该属性(通常是<a:support>上)

如果ajaxSingle=false,该input提交ajax请求之后,在post中被提交的所有的字段,都会触发验证。

如果ajaxSingle=true,该input提交ajax请求之后,只有该字段本身的验证会被触发。

 

reRender

表示ajax出发之后,需要重绘那些区域。

这个属性和ajaxSingle毫无关系,举个例子,a区域的reRender写的是b区域,

则即使是a区域有错,ajax请求完成后,错误信息也不会显示出来(因为指定的是b区域刷新)

 

a:region

当页面上没有a:region的时候,默认提交的所有字段都进行处理(即 AJAXREQUEST _viewRoot )。

如果页面上有a:region,则只有a:region中的内容被处理,例如AJAXREQUEST testa4jform:j_id8

其中 testa4jform:j_id8是a:region的component Client Id。

这里所说的提交,不论是用a:support或者a:commandbutton,都是ajax提交。

例如,将某个input控件表为ajaxSingle=false,则应该整个form的input都被处理,如果将其中的一部分框在a:region中并提交,则只有这部分被处理。

 

 

 

相关标签: richfaces

上一篇: fwqvw

下一篇: