📄 a4j+user+guide.htm
字号:
他们允许你选择页面中那个JSF组件被重新渲染(re-rendered) 来表现Ajax响应的结果 (你可以列出他们的 IDs 在“reRender” 属性中).
</P>
<P><<B
style="COLOR: black; BACKGROUND-COLOR: #ffff66">a4j</B>:commandButton> 和
<<B style="COLOR: black; BACKGROUND-COLOR: #ffff66">a4j</B>:commandLink>
tags 用来在 “onclick” JavaScript 事件中发送Ajax请求. </P>
<P>在你选择JS事件(“onkeyup”, “onmouseover”, etc)时, <<B
style="COLOR: black; BACKGROUND-COLOR: #ffff66">a4j</B>:support> tag
允许你在普通的JSF组件中添加Ajax 功能和发送ajax请求.</P>
<P>提供Ajax请求功能的大部分重要的属性如下:</P>
<DIV class=itemizedlist>
<UL type=disc>
<LI>
<P>reRender 属性 - 就如我们前面提到过的,在一个Ajax响应到来时重新渲染(reRendered)组件. </P>
<LI>
<P>RequestDelay 属性 – 用来调节请求的频率. </P><PRE class=programlisting> <h:inputText size="50" value="#{bean.text}">
<<B style="COLOR: black; BACKGROUND-COLOR: #ffff66">a4j</B>:support event="onkeyup" RequestDelay=”3”/>
</h:inputText>
</PRE>
<P>因此每一个来自于键盘事件的请求将会延迟3 ms ,来减少请求的次数. </P>
<LI>
<P>EventsQueue – 储存下一个请求的队列的名字. 队列帮助阻止下一个请求知道当前的处理完. </P>
<LI>
<P>LimitToList 用来控制更新的区域. 设置为true – 将更新仅在reRender list中的区域,
如果为false,将更新所有Output Panels区域. </P>
<LI>
<P>ajaxSingle 如果设置为false用来指定发送请求的区域 – 如果为true则发送整个区域 - only control
caused event.(attributes specify regions to be sent with request if false –
it’ll be full region in other case - only control caused event.)
</P></LI></UL></DIV></DIV>
<DIV class=section lang=en>
<DIV class=titlepage>
<DIV>
<DIV>
<H3 class=title><A name=d0e250></A>决定发送什么</H3></DIV></DIV></DIV>
<P>你可能描述了一个你决定发送到服务器的页面区域.当你发送ajax请求的时候,通过这种方式你可以控制JSF
View的那个部分在服务器端被解码(decoded).</P>
<P>描述你JSF页面上的一个Ajax区域的最容易的方法是什么都不做.这是因为在<f:view> 和 </f:view> tags
中的内容在默认值的情况下认为是ajax区域.</P>
<P>通过使用<<B style="COLOR: black; BACKGROUND-COLOR: #ffff66">a4j</B>:region>
tag你可以在一个JSF页面中定义多个Ajax区域 (they can even be nested). </P>
<P>如果你希望渲染ajax响应以外的区域,那么renderRegionOnly属性值应该设置为false.否则ajax更新被限制在活动区域的元素中.
</P></DIV>
<DIV class=section lang=en>
<DIV class=titlepage>
<DIV>
<DIV>
<H3 class=title><A name=d0e261></A>决定改变什么</H3></DIV></DIV></DIV>
<P>在大部分情况下都可以使用 “reRender”中的ids来定义需要更新的 “AJAX zones”. </P>
<P>但是如果你的页面包含<f:verbatim/> tag(你希望在ajax响应中更新它的内容)你不可以使用这种方式.</P>
<P>我们在上面描述的<f:verbatim/> tag 的问题涉及到JSF组件的transientFlag值.
如果该标记的值为true,这个组件不能参与保存和恢复组件树(saving or restoring)的处理过程. </P>
<P>为了提供一种解决这个问题的方法, Ajax4jsf 利用<<B
style="COLOR: black; BACKGROUND-COLOR: #ffff66">a4j</B>:outputPanel>
tag定义了一个output panel . 如果你把<f:verbatim/> tag放在output panel中, 那么在AJAX 响应中
<f:verbatim/> tag和其他panel中的child tags中的内容可以被更新 .有两种方法来控制它: </P>
<DIV class=itemizedlist>
<UL type=disc>
<LI>
<P>设置“ajaxRendered” 属性值为true. </P>
<LI>
<P>设置动作组件的“reRender” 属性值为output panel的 ID. </P></LI></UL></DIV>
<P></P></DIV></DIV></DIV>
<DIV class=chapter lang=en>
<DIV class=titlepage>
<DIV>
<DIV>
<H2 class=title><A name=d0e280></A>Chapter 4. Ajax4JSF
组件库</H2></DIV></DIV></DIV>
<DIV class=toc>
<P><B>Table of Contents</B></P>
<DL>
<DT><A href="#d0e283"><B
style="COLOR: black; BACKGROUND-COLOR: #ffff66">a4j</B>:ajaxListener</A>
<DT><A href="#d0e302"><B
style="COLOR: black; BACKGROUND-COLOR: #ffff66">a4j</B>:region</A>
<DT><A href="#d0e351"><B
style="COLOR: black; BACKGROUND-COLOR: #ffff66">a4j</B>:page</A>
<DT><A href="#d0e447"><B
style="COLOR: black; BACKGROUND-COLOR: #ffff66">a4j</B>:support</A>
<DT><A href="#d0e553"><B
style="COLOR: black; BACKGROUND-COLOR: #ffff66">a4j</B>:commandLink</A>
<DT><A href="#d0e778"><B
style="COLOR: black; BACKGROUND-COLOR: #ffff66">a4j</B>:commandButton</A>
<DT><A href="#d0e995"><B
style="COLOR: black; BACKGROUND-COLOR: #ffff66">a4j</B>:outputPanel</A>
<DT><A href="#d0e1064"><B
style="COLOR: black; BACKGROUND-COLOR: #ffff66">a4j</B>:actionparam</A>
<DT><A href="#d0e1109"><B
style="COLOR: black; BACKGROUND-COLOR: #ffff66">a4j</B>:status</A>
<DT><A href="#d0e1280"><B
style="COLOR: black; BACKGROUND-COLOR: #ffff66">a4j</B>:loadBundle</A>
<DT><A href="#d0e1315"><B
style="COLOR: black; BACKGROUND-COLOR: #ffff66">a4j</B>:mediaOutput</A></DT></DL></DIV>
<DIV class=section lang=en>
<DIV class=titlepage>
<DIV>
<DIV>
<H2 class=title style="CLEAR: both"><A name=d0e283></A><B
style="COLOR: black; BACKGROUND-COLOR: #ffff66">a4j</B>:ajaxListener</H2></DIV></DIV></DIV>
<P>和 ActionListener或者ValueChangeListener的工作方式一样, 只是仅用于AJAX容器.
添加一个指定的类作为AjaxEvent的监听器. (sent in case of an AJAX request for this container).
</P>
<DIV class=table><A name=d0e288></A>
<P class=title><B>Table 4.1. <B
style="COLOR: black; BACKGROUND-COLOR: #ffff66">a4j</B>:ajaxListener
attributes</B></P>
<DIV class=table-contents>
<TABLE summary="a4j:ajaxListener attributes" border=1>
<TBODY>
<TR>
<TD>type</TD>
<TD>注册到AjaxListener 中类的完全限定的Java类名</TD></TR></TBODY></TABLE></DIV></DIV><BR
class=table-break><PRE class=programlisting> <<B style="COLOR: black; BACKGROUND-COLOR: #ffff66">a4j</B>:region selfRendered="true" ajaxListener="#{bean.processAjax}" id="Region">
…
</<B style="COLOR: black; BACKGROUND-COLOR: #ffff66">a4j</B>:region>
</PRE>
<P>当来自于Region的AJAX request触发时,将调用bean的'processAjax'方法. </P></DIV>
<DIV class=section lang=en>
<DIV class=titlepage>
<DIV>
<DIV>
<H2 class=title style="CLEAR: both"><A name=d0e302></A><B
style="COLOR: black; BACKGROUND-COLOR: #ffff66">a4j</B>:region</H2></DIV></DIV></DIV>
<P>该标签定义在AJax请求处理过程中被发送到服务器端解码的部分JSF组件树. </P>
<DIV class=table><A name=d0e307></A>
<P class=title><B>Table 4.2. <B
style="COLOR: black; BACKGROUND-COLOR: #ffff66">a4j</B>:region 的属性</B></P>
<DIV class=table-contents>
<TABLE summary="a4j:region attributes" border=1>
<TBODY>
<TR>
<TD>selfRendered</TD>
<TD>如果为true,在调用应用程序(InvokeApplication )阶段自渲染子树(如果immediate 属性设置为true则是
Decode)</TD></TR>
<TR>
<TD>renderRegionOnly</TD>
<TD>标记,用来决定活动区域外的内容在Ajax响应中是否渲染.如果为"true" , 在AJAX response过程中活动区域外的组件都不渲染.
如果为"false", 将渲染包含在响应中的所有组件树.默认值为"true"</TD></TR>
<TR>
<TD>rendered</TD>
<TD>如果为 false, 该组件将不被重新渲染.</TD></TR>
<TR>
<TD>id</TD>
<TD>每个组件都应该有个唯一的id. 如果没有指定的话,将会自动产生.</TD></TR>
<TR>
<TD>immediate</TD>
<TD>如果该组件被Ajax请求激活的话,标记该组件应该立即(在应用请求值阶段)被感兴趣的监听器和动作处理,而不是等到调用应用程序阶段.(译者注:该标记和JSF中的immediate标记所代表的意思差不多,跳过验证阶段到呈现响应阶段)</TD></TR>
<TR>
<TD>binding</TD>
<TD>组件绑定</TD></TR>
<TR>
<TD>ajaxListener</TD>
<TD>方法绑定,当该组件被ajax请求激活时,将调用该监听器方法处理该事件.该方法必须为public的并且接受一个 AjaxEvent
参数,返回void.</TD></TR></TBODY></TABLE></DIV></DIV><BR class=table-break><PRE class=programlisting> <<B style="COLOR: black; BACKGROUND-COLOR: #ffff66">a4j</B>:region>
<!--Some content-->
<<B style="COLOR: black; BACKGROUND-COLOR: #ffff66">a4j</B>:region>
</PRE>
<P>如果在该组件的区域中有一个Ajax请求调用了 – 该区域将根据Ajax的设置被框架处理. </P></DIV>
<DIV class=section lang=en>
<DIV class=titlepage>
<DIV>
<DIV>
<H2 class=title style="CLEAR: both"><A name=d0e351></A><B
style="COLOR: black; BACKGROUND-COLOR: #ffff66">a4j</B>:page</H2></DIV></DIV></DIV>
<P>该组件呈现一个完全的HTML页面结构.它必须是view root (JSP <f:view> tag)的第一个(并且是仅有的一个)子组件.
没有Html代码可以在该组件的外面. 它也支持在Ajax请求中处理子组件,就和<<B
style="COLOR: black; BACKGROUND-COLOR: #ffff66">a4j</B>:region>一样.对于一个普通的请求,它将把结果呈现为在客户端页面<head>元素中的<script>元素.如果该组件包含一个"head"
facet, 该facet的内容也呈现在<head>中.对于一个Ajax请求,在整个结构中仅仅涉及到的组件被呈现.下面是个在JSP (jspx
version)中使用它的例子: </P>
<P><jsp:root xmlns:.... </P>
<P> <f:view> </P>
<P> <<B
style="COLOR: black; BACKGROUND-COLOR: #ffff66">a4j</B>:page></P>
<P> <f:facet name="head"> </P>
<P> ... </P>
<P> </f:facet></P>
<P><!-- page content here --></P>
<P> </<B
style="COLOR: black; BACKGROUND-COLOR: #ffff66">a4j</B>:page></P>
<P> </f:view></P>
<P></jsp:root></P>
<DIV class=table><A name=d0e356></A>
<P class=title><B>Table 4.3. <B
style="COLOR: black; BACKGROUND-COLOR: #ffff66">a4j</B>:page attributes</B></P>
<DIV class=table-contents>
<TABLE summary="a4j:page attributes" border=1>
<TBODY>
<TR>
<TD>selfRendered</TD>
<TD>如果为true,在调用应用程序(InvokeApplication )阶段自渲染子树(如果immediate 属性设置为true则是
Decode)</TD></TR>
<TR>
<TD>lang</TD>
<TD>用来描述在产生该组件的markup时用到的语言(产生该组件标记所使用的语言)</TD></TR>
<TR>
<TD>title</TD>
<TD>该组件产生的Markup的title属性值</TD></TR>
<TR>
<TD>renderRegionOnly</TD>
<TD>renderRegionOnly</TD></TR>
<TR>
<TD>onunload</TD>
<TD>在页面unload时执行的JS代码</TD></TR>
<TR>
<TD>rendered</TD>
<TD>如果是 false, 该组件不会被呈现.</TD></TR>
<TR>
<TD>contentType</TD>
<TD>设置响应的自定义的mime内容类型</TD></TR>
<TR>
<TD>dir</TD>
<TD>文本方向</TD></TR>
<TR>
<TD>id</TD>
<TD> 每个组件都应该有个唯一的id. 如果没有指定的话,将会自动产生.</TD></TR>
<TR>
<TD>styleClass</TD>
<TD>和HTML class 属性对应.</TD></TR>
<TR>
<TD>immediate</TD>
<TD>如果该组件被Ajax请求激活的话,标记该组件应该立即(在应用请求值阶段)被感兴趣的监听器和动作处理,而不是等到调用应用程序阶段.(译者注:该标记和JSF中的immediate标记所代表的意思差不多,跳过验证阶段到呈现响应阶段)</TD></TR>
<TR>
<TD>onload</TD>
<TD>在页面load时执行的JS代码</TD></TR>
<TR>
<TD>style</TD>
<TD>在该组件被呈现时应用的CSS style(s) </TD></TR>
<TR>
<TD>pageTitle</TD>
<TD>作为页面 title的字符串</TD></TR>
<TR>
<TD>binding</TD>
<TD>组件绑定.</TD></TR>
<TR>
<TD>ajaxListener</TD>
<TD>方法绑定,当该组件被ajax请求激活时,将调用该监听器方法处理该事件.该方法必须为public的并且接受一个 AjaxEvent
参数,返回void.</TD></TR></TBODY></TABLE></DIV></DIV><BR class=table-break><PRE class=programlisting> <<B style="COLOR: black; BACKGROUND-COLOR: #ffff66">a4j</B>:page>
<f:facet name=”head”>
…
</f:facet>
…
<<B style="COLOR: black; BACKGROUND-COLOR: #ffff66">a4j</B>:page>
</PRE>
<P>上面的示例结构将被呈现为:</P><PRE class=programlisting> <HTML>
<HEAD>
…
</HEAD>
<body >
…
</body>
</HTML>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -