﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-找回记忆-随笔分类-jboss技术</title><link>http://www.blogjava.net/yhzrobert/category/47273.html</link><description>美好的已经伴随你一生~~</description><language>zh-cn</language><lastBuildDate>Mon, 06 Dec 2010 21:41:40 GMT</lastBuildDate><pubDate>Mon, 06 Dec 2010 21:41:40 GMT</pubDate><ttl>60</ttl><item><title>有关服务器启动后servlet自动加载</title><link>http://www.blogjava.net/yhzrobert/archive/2009/02/02/252944.html</link><dc:creator>找回记忆</dc:creator><author>找回记忆</author><pubDate>Mon, 02 Feb 2009 05:34:00 GMT</pubDate><guid>http://www.blogjava.net/yhzrobert/archive/2009/02/02/252944.html</guid><wfw:comment>http://www.blogjava.net/yhzrobert/comments/252944.html</wfw:comment><comments>http://www.blogjava.net/yhzrobert/archive/2009/02/02/252944.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yhzrobert/comments/commentRss/252944.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yhzrobert/services/trackbacks/252944.html</trackback:ping><description><![CDATA[第一步，先在web.xml内插入<br />
<div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">listener</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">listener-class</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">&lt;/</span><span style="color: rgb(128, 0, 0);">listener-class</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br />
&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">&lt;/</span><span style="color: rgb(128, 0, 0);">listener</span><span style="color: rgb(0, 0, 255);">&gt;</span></div>
在&lt;listener-class&gt;内添加你需要加载的servlet类（完整路径）<br />
<br />
第二步、此servlet需要继承ServletContextListener，下面是有关此接口的说明<br />
<div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: rgb(0, 0, 0);">当Servlet容器启动或终止Web应用时，会触发ServletContextEvent事件，该事件由&nbsp;ServletContextListener&nbsp;来处理。在&nbsp;ServletContextListener&nbsp;接口中定义了处理ServletContextEvent事件的两个方法。<br />
<br />
contextInitialized(ServletContextEvent&nbsp;sce)：当Servlet容器启动Web应用时调用该方法。在调用完该方法之后，容器再对Filter初始化，并且对那些在Web应用启动时就需要被初始化的Servlet进行初始化。<br />
<br />
contextDestroyed(ServletContextEvent&nbsp;sce)：当Servlet容器终止Web应用时调用该方法。在调用该方法之前，容器会先销毁所有的Servlet和Filter过滤器。<br />
</span></div>
<br />
<br />
<img src ="http://www.blogjava.net/yhzrobert/aggbug/252944.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yhzrobert/" target="_blank">找回记忆</a> 2009-02-02 13:34 <a href="http://www.blogjava.net/yhzrobert/archive/2009/02/02/252944.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JSF生命周期及AJAX局部刷新</title><link>http://www.blogjava.net/yhzrobert/archive/2008/11/25/242632.html</link><dc:creator>找回记忆</dc:creator><author>找回记忆</author><pubDate>Tue, 25 Nov 2008 12:45:00 GMT</pubDate><guid>http://www.blogjava.net/yhzrobert/archive/2008/11/25/242632.html</guid><wfw:comment>http://www.blogjava.net/yhzrobert/comments/242632.html</wfw:comment><comments>http://www.blogjava.net/yhzrobert/archive/2008/11/25/242632.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yhzrobert/comments/commentRss/242632.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yhzrobert/services/trackbacks/242632.html</trackback:ping><description><![CDATA[(转载http://www.emlog.net/fei/tb.php?sc=91da2&amp;id=41)<br />
看了core JSF里详细描述的JSF的生命周期,基本上可以划分为六个周期.
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1:Restore View(恢复视图)</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
所谓的视图也就是一些基本的GUI组件.也就是常说的HTML控件吧.视图一般来说分为三种实例:新视图,原始视图,后视图三种.所谓的新视图就是你第一
次请求所呈现给你的.而原始视图也就是你已经进入了这个页面.只是刷原有页面.而后视图呢也就是你点后退按钮回到的那个页面.(它只负责从恢复内容,不刷
新内容.)Restore View phase recreates the server-side component tree when
you <span class="docEmphasis">re</span>visit a JSF page. </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2;Apply Request Values(应用请求值)</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在这阶段主要数据接收.SUN在自己出版的core JSF中是这样说的.The Apply Request Values phase copies <span class="docEmphasis">request parameters</span> into component <span class="docEmphasis">submitted values</span>.</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3:Process Validations(执行验证)</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 根据接收到的数据进行转换验证.The Process Validations phase first converts those submitted values and validates the converted value.</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4:Update Model Values(更新模型)</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 开始给控件赋新值.The Update Model Values phase copies (converted and
validated) values to the model, which is typically denoted in JSF pages
with value reference expressions</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 5:Invoke Application(调用程序)</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 这个阶段主要进行actionListener&nbsp;和 action 处理.先调用ActionListener
然后再进行Action 操作.The Invoke Application phase invokes action listeners
and actions, in that order, for command components. </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 6:Render Respose(进行响应)</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 返回一个新的请求视图.the Render Response phase saves state and loads the next view.从下图你能清楚的知道JSF的六个生命周期是如何的运行的.</p>
<p> <a target="_blank" href="http://www.emlog.net/fei/uploadfile/200803/032b2cc936860b03048302d991c3498f20080326125145.jpg">
<div align="center"><img alt="附件[ematt:22] JSF生命周期" src="http://www.emlog.net/fei/uploadfile/200803/thum-032b2cc936860b03048302d991c3498f20080326125145.jpg" border="0" /></div>
</a></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在下面的测试中,你需要对faces-config.xml:&nbsp;进行如下的设置:&nbsp;</p>
<p>&nbsp;&lt;lifecycle&gt;<br />
&nbsp;&nbsp;&lt;phase-listener&gt;net.emlog.fei.PhaseEventListener&lt;/phase-listener&gt;<br />
&nbsp;&lt;/lifecycle&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;在实现生命周期的监听的时候,你需要编写一个生命监听的类.PhaseEventListener他实现了
javax.faces.event.PhaseListener接口.在这个接口中,需要实现这两具方法beforePhase(PhaseEvent
e)和afterPhase(PhaseEvent&nbsp; e).需进行后台的bean则显得简单.</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;大体的,你可以根据以下几个值来更改生命周期的执行.(1).immediate="true"(2)调用<font face="Courier New">FacesContext.renderResponse()(3):<font face="Arial">调用</font><font face="Courier New">FacesContext.responseComplete()这三者是有一定的区别的.</font></font></p>
<p><font face="Courier New">&nbsp;&nbsp;<font face="Arial">&nbsp;&nbsp;&nbsp;&nbsp;</font>正常运行的情况下,它的生命周期是这样进行的:</font><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 开始调用 APPLY_REQUEST_VALUES 2事件.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 然后,APPLY_REQUEST_VALUES 2事件响应了<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 开始调用 PROCESS_VALIDATIONS 3事件.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在getInput方法中得到input值为123<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 值改变事件发生,开始设置input值为1<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在setInput方法中设置input值为1<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在setOutput方法中设置output值为1<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 然后,PROCESS_VALIDATIONS 3事件响应了<br />
</p>
<p><font face="Courier New">&nbsp; 如下面的代码片段:(没有使用局部刷新)</font></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;h:form id="form"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;h:inputText id="input" value="#{vcl.input}" valueChangeListener="#{vcl.changeAction}"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; immediate="true" onchange="submit()"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/h:inputText&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;h:outputText id="abs" value="#{vcl.output}"&gt;&lt;/h:outputText&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/h:form&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public void changeAction(ValueChangeEvent vc){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/**<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * FacesContext fc = FacesContext.getCurrentInstance();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; UIViewRoot root = fc.getViewRoot();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String locale = vc.getNewValue().toString();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;root.setLocale(new Locale(locale));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; */<br />
&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String string = vc.getNewValue().toString();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("值改变事件发生,开始设置input值为" + string);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;setInput(string);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; setOutput(string);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FacesContext fc = FacesContext.getCurrentInstance();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //fc.responseComplete();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //fc.renderResponse();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 上面的方法中,由于将immediate设为true,所以它会将<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 开始调用 APPLY_REQUEST_VALUES 2事件.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在getInput方法中得到input值为123<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 值改变事件发生,开始设置input值为1<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在setInput方法中设置input值为1<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在setOutput方法中设置output值为1<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 然后,APPLY_REQUEST_VALUES 2事件响应了<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 开始调用 PROCESS_VALIDATIONS 3事件.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 然后,PROCESS_VALIDATIONS 3事件响应了.</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
仅仅将immediate设置为true用户不大的.因为最后他还是要走完所有的六个生命周期.我们结合
FacesContext.renderResponse()
和FacesContext.responseComplete()来看看他们有什么区别.</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FacesContext.responseComplete()情况:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 开始调用 APPLY_REQUEST_VALUES 2事件.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在getInput方法中得到input值为123<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 值改变事件发生,开始设置input值为1<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在setInput方法中设置input值为1<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在setOutput方法中设置output值为1<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 然后,APPLY_REQUEST_VALUES 2事件响应了(后面没了,它甚至不会Render Response)所以你会看到一个空白的页面.</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FacesContext.renderResponse() 情况就不同啦:</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 开始调用 APPLY_REQUEST_VALUES 2事件.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在getInput方法中得到input值为123<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 值改变事件发生,开始设置input值为1<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在setInput方法中设置input值为1<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在setOutput方法中设置output值为1<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 然后,APPLY_REQUEST_VALUES 2事件响应了<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 开始调用 RENDER_RESPONSE 6事件.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在getOutput方法中得到output值为1<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
然后,RENDER_RESPONSE 6事件响应了(相对于responseComplete()他进行了Render
Response操作.)OK.希望说到这你能对所谓的六大生命周期有一个简单的认识.如何我们只是进行一次简单的WEB开发的话,那么,关注3,5两个
阶段的实现就可,如果需要自己编写UI,则需要对生命周期有一个清楚的认识.也许,从下面的图你能看得更加的清楚.</p>
<p><a target="_blank" href="http://www.emlog.net/fei/uploadfile/200803/d0096ec6c83575373e3a21d129ff8fef20080326124057.jpg">
<div align="center"><img alt="附件[ematt:21] 更改后JSF生命周期" src="http://www.emlog.net/fei/uploadfile/200803/thum-d0096ec6c83575373e3a21d129ff8fef20080326124057.jpg" border="0" /></div>
</a></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
当然,我们的重点还是在于局部刷新.AJAX是一个时下比较时兴的技术.局部刷新有很多的好处,在此不在细说.在上面的例子里,我们需要实现在输入框里的
值改变后,输入框的值也随着改变.但是我们调用的却是全局刷新.使用submit()事件来实现.接下来我们就来看看如何使用AJAX来实现局部刷新,以
及局部刷的一些细节问题.如下代码段:具体的richfaces请参见<a target="_blank" href="http://labs.jboss.com/jbossrichfaces/"><font color="#000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font>http://labs.jboss.com/jbossrichfaces/</a>此处不细说配置.</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;h:inputText id="input" value="#{vcl.input}" valueChangeListener="#{vcl.changeAction}"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;a4j:support event="onchange" limitToList="true" reRender="input,abs"/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/h:inputText&gt;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;h:outputText id="abs" value="#{vcl.output}"&gt;&lt;/h:outputText&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OK.运行代码后,我们发现结果是这样的:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 开始调用 APPLY_REQUEST_VALUES 2事件.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在getInput方法中得到input值为123<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 值改变事件发生,开始设置input值为1<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在setInput方法中设置input值为1<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在setOutput方法中设置output值为1<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 然后,APPLY_REQUEST_VALUES 2事件响应了<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 开始调用 RENDER_RESPONSE 6事件.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在getOutput方法中得到output值为1<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 然后,RENDER_RESPONSE 6事件响应了</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
在应用值及进行响应阶段我们只是对output进行了响应.虽然在reRender设置了两个响应目标.但实现上如你所现,真正响应的只是output控
件的get方法.同样的,在值改变事件前,也只是对input控件进行了get响应.这两个很重要.这也就是说.如果在两个都为input控件的时候,事
件就有点复杂.因为set事件 他所取的时input = string
参数string是取决于你显示出来给用户的.正因为如何,当两个事件都进行响应的时候,两个输入控件的值是不一样的.在同为input的时候,我们需要
加上&lt;a4j:region&gt;在开发文件中的定义是这样的:The &lt;a4j:region&gt; component
defines an area that is decoded on the server after Ajax
submission.当然.在有两个input控件的情况下,你需要按照以下形式编写.</p>
<p>&nbsp;&nbsp;&nbsp;&lt;a4j:region&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;h:inputText id="input" value="#{vcl.input}" valueChangeListener="#{vcl.changeAction}"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;a4j:support event="onchange" limitToList="true" reRender="input,abs"/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;/h:inputText&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;/a4j:region&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;h:inputText id="abs" value="#{vcl.output}"&gt;&lt;/h:inputText&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
这样我们就能保证在进行局部刷新提交的时候,不会将后一个input的值也提交上去,从而实现同时改变的功能.希望说到这你能明白些什么.生命周期的运行
是这样的:在有事件响应的时候,只会有输入控件的get方法.在返回响应的时候,只会调用输出控件的set方法.嗯,就是这样的.</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
OK.基本上完毕了.还记得开始时说的那个恢复视图里的后视图吗?这个东西他是不刷新的.如果我在后面修改了怎么办呢,返回来的结果并不会在后视图里显示
出来.有两种方法,一种是页面不缓存...另一种则是载入页面的时候进行刷新.我选择了第二种.第一种有点不有好...不过对于一些很重要的权限控制还是
用第一种吧.第二种的处理方法是在页面的load事件里加上javascript的刷新页面代码.经测试,下面这个代码是可行的.<br />
&nbsp;function refresh(){&nbsp;&nbsp;if(self.name != "index.faces"){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.name = "index.faces";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.location.reload();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;else{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.name = "";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;}</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 但是如何在你的第一个页面里也有第二个页面的功能.则第二个页面的功能在第一个页面功能被使用后不再有效.这个是由jsf的生命周期决定的.没有找到什么好方法来解决.下图为JSF与AJAX在一起的处理流程.</p>
<p><a target="_blank" href="http://www.emlog.net/fei/uploadfile/200803/63c85d8fea3a65f4a0888e30607c53a720080326123626.jpg">
<div align="center"><img alt="附件[ematt:20] JSF与AJAX" src="http://www.emlog.net/fei/uploadfile/200803/thum-63c85d8fea3a65f4a0888e30607c53a720080326123626.jpg" border="0" /></div>
</a></p>
<br />
<br />
<img src ="http://www.blogjava.net/yhzrobert/aggbug/242632.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yhzrobert/" target="_blank">找回记忆</a> 2008-11-25 20:45 <a href="http://www.blogjava.net/yhzrobert/archive/2008/11/25/242632.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>