﻿<?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-木木-随笔分类-Struts2学习</title><link>http://www.blogjava.net/ktoo/category/24712.html</link><description /><language>zh-cn</language><lastBuildDate>Sun, 17 Feb 2008 20:00:44 GMT</lastBuildDate><pubDate>Sun, 17 Feb 2008 20:00:44 GMT</pubDate><ttl>60</ttl><item><title>Struts2+Hibernate中关闭Session的filter问题</title><link>http://www.blogjava.net/ktoo/archive/2008/02/17/180226.html</link><dc:creator>KTOO</dc:creator><author>KTOO</author><pubDate>Sat, 16 Feb 2008 17:37:00 GMT</pubDate><guid>http://www.blogjava.net/ktoo/archive/2008/02/17/180226.html</guid><wfw:comment>http://www.blogjava.net/ktoo/comments/180226.html</wfw:comment><comments>http://www.blogjava.net/ktoo/archive/2008/02/17/180226.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/ktoo/comments/commentRss/180226.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ktoo/services/trackbacks/180226.html</trackback:ping><description><![CDATA[<p>用Struts2+Hibernate开发Web程序<br />
发现网站老是一动不动,在DAO中用&nbsp; Statistics stats = HibernateUtil.getSessionFactory().getStatistics();<br />
查看了统计结果,发现打开50个Session只有20个关闭了.<br />
看结构也没有什么问题,我使用两个ThreadLocal 存放Session 和Transaction,再用一个Filter去关闭,各个配置表面上也是没有问题,可是做测试的时候才发现关闭Session的Filter根本就是没有运行,或是有时运行,有时不运行,<br />
仔细想了想,调整了一下sessionclosefilter和Struts2的filter的顺序如下,终于可以关闭了</p>
<p>&nbsp;&lt;filter&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;filter-name&gt;HibernateSessionCloseFiler&lt;/filter-name&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;filter-class&gt;com.hitecin.struts2.filter.HibernateSessionClose&lt;/filter-class&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/filter&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;filter&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;filter-name&gt;struts-cleanup&lt;/filter-name&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;filter-class&gt;org.apache.struts2.dispatcher.ActionContextCleanUp&lt;/filter-class&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/filter&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;filter&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;filter-name&gt;struts2&lt;/filter-name&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;filter-class&gt;org.apache.struts2.dispatcher.FilterDispatcher&lt;/filter-class&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/filter&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;filter-mapping&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;filter-name&gt;HibernateSessionCloseFiler&lt;/filter-name&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;url-pattern&gt;/*&lt;/url-pattern&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/filter-mapping&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp; &lt;filter-mapping&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;filter-name&gt;struts-cleanup&lt;/filter-name&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;url-pattern&gt;/*&lt;/url-pattern&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp; &lt;/filter-mapping&gt;</p>
<p>&nbsp;&nbsp;&nbsp; &lt;filter-mapping&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;filter-name&gt;struts2&lt;/filter-name&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;url-pattern&gt;/*&lt;/url-pattern&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/filter-mapping&gt;<br />
</p>
<img src ="http://www.blogjava.net/ktoo/aggbug/180226.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ktoo/" target="_blank">KTOO</a> 2008-02-17 01:37 <a href="http://www.blogjava.net/ktoo/archive/2008/02/17/180226.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Struts2中出错</title><link>http://www.blogjava.net/ktoo/archive/2008/02/03/179175.html</link><dc:creator>KTOO</dc:creator><author>KTOO</author><pubDate>Sun, 03 Feb 2008 07:18:00 GMT</pubDate><guid>http://www.blogjava.net/ktoo/archive/2008/02/03/179175.html</guid><wfw:comment>http://www.blogjava.net/ktoo/comments/179175.html</wfw:comment><comments>http://www.blogjava.net/ktoo/archive/2008/02/03/179175.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/ktoo/comments/commentRss/179175.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ktoo/services/trackbacks/179175.html</trackback:ping><description><![CDATA[2008-02-02 14:32:22,109 WARN - OgnlUtil.internalSetProperty(369) | Caught OgnlException while setting property 'firmCode' on type 'com.test.ProductViewBean'.<br />
java.lang.IllegalArgumentException<br />
&nbsp;at sun.reflect.GeneratedMethodAccessor196.invoke(Unknown Source)<br />
&nbsp;at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)<br />
&nbsp;at java.lang.reflect.Method.invoke(Method.java:585)<br />
&nbsp;at ognl.OgnlRuntime.invokeMethod(OgnlRuntime.java:517)<br />
&nbsp;at ognl.OgnlRuntime.callAppropriateMethod(OgnlRuntime.java:812)<br />
&nbsp;at ognl.OgnlRuntime.setMethodValue(OgnlRuntime.java:964)<br />
&nbsp;at ognl.ObjectPropertyAccessor.setPossibleProperty(ObjectPropertyAccessor.java:75)<br />
&nbsp;at ognl.ObjectPropertyAccessor.setProperty(ObjectPropertyAccessor.java:131)<br />
&nbsp;at com.opensymphony.xwork2.util.OgnlValueStack$ObjectAccessor.setProperty(OgnlValueStack.java:68)<br />
&nbsp;at ognl.OgnlRuntime.setProperty(OgnlRuntime.java:1656)<br />
&nbsp;at ognl.ASTProperty.setValueBody(ASTProperty.java:101)<br />
&nbsp;at ognl.SimpleNode.evaluateSetValueBody(SimpleNode.java:177)<br />
&nbsp;at ognl.SimpleNode.setValue(SimpleNode.java:246)<br />
&nbsp;at ognl.Ognl.setValue(Ognl.java:476)<br />
&nbsp;at com.opensymphony.xwork2.util.OgnlUtil.setValue(OgnlUtil.java:186)<br />
&nbsp;at com.opensymphony.xwork2.util.OgnlUtil.internalSetProperty(OgnlUtil.java:360)<br />
&nbsp;at com.opensymphony.xwork2.util.OgnlUtil.setProperty(OgnlUtil.java:135)<br />
&nbsp;at com.opensymphony.xwork2.util.OgnlUtil.setProperty(OgnlUtil.java:116)<br />
&nbsp;at org.apache.struts2.components.Bean.addParameter(Bean.java:147)<br />
&nbsp;at org.apache.struts2.components.Param.end(Param.java:114)<br />
&nbsp;at org.apache.struts2.views.jsp.ComponentTagSupport.doEndTag(ComponentTagSupport.java:43)<br />
&nbsp;at _jsp._product._productcatagorysecondlist__jsp._jspService(_productcatagorysecondlist__jsp.java:105)<br />
&nbsp;at com.caucho.jsp.JavaPage.service(JavaPage.java:60)<br />
&nbsp;at com.caucho.jsp.Page.pageservice(Page.java:570)<br />
&nbsp;at com.caucho.server.dispatch.PageFilterChain.doFilter(PageFilterChain.java:179)<br />
&nbsp;at com.caucho.server.webapp.DispatchFilterChain.doFilter(DispatchFilterChain.java:115)<br />
&nbsp;at com.caucho.server.dispatch.ServletInvocation.service(ServletInvocation.java:229)<br />
&nbsp;at com.caucho.server.webapp.RequestDispatcherImpl.forward(RequestDispatcherImpl.java:277)<br />
&nbsp;at com.caucho.server.webapp.RequestDispatcherImpl.forward(RequestDispatcherImpl.java:106)<br />
&nbsp;at org.apache.struts2.dispatcher.ServletDispatcherResult.doExecute(ServletDispatcherResult.java:139)<br />
&nbsp;at org.apache.struts2.dispatcher.StrutsResultSupport.execute(StrutsResultSupport.java:178)<br />
&nbsp;at com.opensymphony.xwork2.DefaultActionInvocation.executeResult(DefaultActionInvocation.java:343)<br />
&nbsp;at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)<br />
&nbsp;at com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor.java:213)<br />
&nbsp;at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:86)<br />
&nbsp;at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:219)<br />
&nbsp;at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:218)<br />
&nbsp;at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)<br />
&nbsp;at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:216)<br />
&nbsp;at com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:150)<br />
&nbsp;at org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.doIntercept(AnnotationValidationInterceptor.java:48)<br />
&nbsp;at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:86)<br />
&nbsp;at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:219)<br />
&nbsp;at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:218)<br />
&nbsp;at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)<br />
&nbsp;at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:216)<br />
&nbsp;at com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.intercept(ConversionErrorInterceptor.java:123)<br />
&nbsp;at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:219)<br />
&nbsp;at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:218)<br />
&nbsp;at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)<br />
&nbsp;at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:216)<br />
&nbsp;at com.opensymphony.xwork2.interceptor.ParametersInterceptor.intercept(ParametersInterceptor.java:161)<br />
&nbsp;at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:219)<br />
&nbsp;at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:218)<br />
&nbsp;at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)<br />
&nbsp;at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:216)<br />
&nbsp;at com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.intercept(StaticParametersInterceptor.java:105)<br />
&nbsp;at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:219)<br />
&nbsp;at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:218)<br />
&nbsp;at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)<br />
&nbsp;at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:216)<br />
&nbsp;at org.apache.struts2.interceptor.CheckboxInterceptor.intercept(CheckboxInterceptor.java:83)<br />
&nbsp;at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:219)<br />
&nbsp;at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:218)<br />
&nbsp;at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)<br />
&nbsp;at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:216)<br />
&nbsp;at org.apache.struts2.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:207)<br />
&nbsp;at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:219)<br />
&nbsp;at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:218)<br />
&nbsp;at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)<br />
&nbsp;at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:216)<br />
&nbsp;at com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor.intercept(ModelDrivenInterceptor.java:74)<br />
&nbsp;at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:219)<br />
&nbsp;at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:218)<br />
&nbsp;at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)<br />
&nbsp;at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:216)<br />
&nbsp;at com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor.intercept(ScopedModelDrivenInterceptor.java:127)<br />
&nbsp;at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:219)<br />
&nbsp;at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:218)<br />
&nbsp;at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)<br />
&nbsp;at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:216)<br />
&nbsp;at org.apache.struts2.interceptor.ProfilingActivationInterceptor.intercept(ProfilingActivationInterceptor.java:107)<br />
&nbsp;at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:219)<br />
&nbsp;at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:218)<br />
&nbsp;at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)<br />
&nbsp;at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:216)<br />
&nbsp;at org.apache.struts2.interceptor.debugging.DebuggingInterceptor.intercept(DebuggingInterceptor.java:206)<br />
&nbsp;at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:219)<br />
&nbsp;at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:218)<br />
&nbsp;at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)<br />
&nbsp;at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:216)<br />
&nbsp;at com.opensymphony.xwork2.interceptor.ChainingInterceptor.intercept(ChainingInterceptor.java:115)<br />
&nbsp;at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:219)<br />
&nbsp;at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:218)<br />
&nbsp;at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)<br />
&nbsp;at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:216)<br />
&nbsp;at com.opensymphony.xwork2.interceptor.I18nInterceptor.intercept(I18nInterceptor.java:143)<br />
&nbsp;at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:219)<br />
&nbsp;at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:218)<br />
&nbsp;at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)<br />
&nbsp;at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:216)<br />
&nbsp;at com.opensymphony.xwork2.interceptor.PrepareInterceptor.intercept(PrepareInterceptor.java:115)<br />
&nbsp;at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:219)<br />
&nbsp;at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:218)<br />
&nbsp;at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)<br />
&nbsp;at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:216)<br />
&nbsp;at org.apache.struts2.interceptor.ServletConfigInterceptor.intercept(ServletConfigInterceptor.java:170)<br />
&nbsp;at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:219)<br />
&nbsp;at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:218)<br />
&nbsp;at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)<br />
&nbsp;at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:216)<br />
&nbsp;at com.opensymphony.xwork2.interceptor.AliasInterceptor.intercept(AliasInterceptor.java:123)<br />
&nbsp;at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:219)<br />
&nbsp;at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:218)<br />
&nbsp;at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)<br />
&nbsp;at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:216)<br />
&nbsp;at com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.intercept(ExceptionMappingInterceptor.java:176)<br />
&nbsp;at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:219)<br />
&nbsp;at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:218)<br />
&nbsp;at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)<br />
&nbsp;at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:216)<br />
&nbsp;at org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:50)<br />
&nbsp;at org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:507)<br />
&nbsp;at org.apache.struts2.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:421)<br />
&nbsp;at com.caucho.server.dispatch.FilterFilterChain.doFilter(FilterFilterChain.java:70)<br />
&nbsp;at org.apache.struts2.dispatcher.ActionContextCleanUp.doFilter(ActionContextCleanUp.java:99)<br />
&nbsp;at com.caucho.server.dispatch.FilterFilterChain.doFilter(FilterFilterChain.java:70)<br />
&nbsp;at com.caucho.server.webapp.WebAppFilterChain.doFilter(WebAppFilterChain.java:173)<br />
&nbsp;at com.caucho.server.dispatch.ServletInvocation.service(ServletInvocation.java:229)<br />
&nbsp;at com.caucho.server.hmux.HmuxRequest.handleRequest(HmuxRequest.java:420)<br />
&nbsp;at com.caucho.server.port.TcpConnection.run(TcpConnection.java:514)<br />
&nbsp;at com.caucho.util.ThreadPool.runTasks(ThreadPool.java:520)<br />
&nbsp;at com.caucho.util.ThreadPool.run(ThreadPool.java:442)<br />
&nbsp;at java.lang.Thread.run(Thread.java:595)<br />
<br />
<br />
<br />
这个错误有时出现，有时没有，又仔细看了一下源码，发现'firmCode'这个属性的类型是int,把它改为Integer...<br />
应该没问题了，这是Struts2中类型转换的问题
<img src ="http://www.blogjava.net/ktoo/aggbug/179175.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ktoo/" target="_blank">KTOO</a> 2008-02-03 15:18 <a href="http://www.blogjava.net/ktoo/archive/2008/02/03/179175.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Struts2在Resin3.0X中运行的配置</title><link>http://www.blogjava.net/ktoo/archive/2007/12/17/168239.html</link><dc:creator>KTOO</dc:creator><author>KTOO</author><pubDate>Mon, 17 Dec 2007 07:30:00 GMT</pubDate><guid>http://www.blogjava.net/ktoo/archive/2007/12/17/168239.html</guid><wfw:comment>http://www.blogjava.net/ktoo/comments/168239.html</wfw:comment><comments>http://www.blogjava.net/ktoo/archive/2007/12/17/168239.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/ktoo/comments/commentRss/168239.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ktoo/services/trackbacks/168239.html</trackback:ping><description><![CDATA[Struts2+&nbsp;Hibernate开发完了后部署到Resion3中，发现只能单独看jsp页面，*.action的页面都不能使用。<br />
从网上搜了一下，解决方法如下：<br />
因Resin的mod_caucho插件一般情况下仅对Servlet,JSP服务，不会对Struts2中的Filter方式提供网址服务，<br />
因此可以使用"Special servlet-mapping"。<br />
在WEB—INF目录下再新建resin-web.xml,作如下配置<br />
<div>&lt;web-app xmlns="<a href="http://caucho.com/ns/resin"><a href="http://caucho.com/ns/resin" target="_blank"><font color="#000000">http://caucho.com/ns/resin</font></a></a>"&gt; <br />
&nbsp;&lt;servlet-mapping url-pattern='/struts/*' servlet-name='plugin_match'/&gt;<br />
&nbsp;&lt;servlet-mapping url-pattern='/other/*' servlet-name='plugin_match'/&gt; <br />
&nbsp;&lt;servlet-mapping url-pattern='*.action' servlet-name='plugin_match'/&gt;<br />
&nbsp;&lt;servlet-mapping url-pattern='*.html' servlet-name='plugin_match'/&gt;<br />
&nbsp;&lt;servlet-mapping url-pattern='*.do' servlet-name='plugin_match'/&gt;<br />
&nbsp;&lt;servlet-mapping url-pattern='/dwr/*' servlet-name='plugin_match'/&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&lt;/web-app&gt;</div>
，问题解决了
<img src ="http://www.blogjava.net/ktoo/aggbug/168239.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ktoo/" target="_blank">KTOO</a> 2007-12-17 15:30 <a href="http://www.blogjava.net/ktoo/archive/2007/12/17/168239.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>FilterDispatcher</title><link>http://www.blogjava.net/ktoo/archive/2007/08/28/140631.html</link><dc:creator>KTOO</dc:creator><author>KTOO</author><pubDate>Tue, 28 Aug 2007 10:56:00 GMT</pubDate><guid>http://www.blogjava.net/ktoo/archive/2007/08/28/140631.html</guid><wfw:comment>http://www.blogjava.net/ktoo/comments/140631.html</wfw:comment><comments>http://www.blogjava.net/ktoo/archive/2007/08/28/140631.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/ktoo/comments/commentRss/140631.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ktoo/services/trackbacks/140631.html</trackback:ping><description><![CDATA[FilterDispatcher可以说是struts2中调度的中心，本质上它就是一个fi<br>它的作用如下!<br>
<ol>
    <li>用来装载配置和设置静态资源的package
    <div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #000000;">&nbsp;&nbsp;</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;init(FilterConfig&nbsp;filterConfig)&nbsp;</span><span style="color: #0000ff;">throws</span><span style="color: #000000;">&nbsp;ServletException&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;init();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;param&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;filterConfig.getInitParameter(</span><span style="color: #000000;">"</span><span style="color: #000000;">packages</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;packages&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">org.apache.struts2.static&nbsp;template&nbsp;org.apache.struts2.interceptor.debugging</span><span style="color: #000000;">"</span><span style="color: #000000;">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(param&nbsp;</span><span style="color: #000000;">!=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">null</span><span style="color: #000000;">)&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;packages&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;param&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;packages;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">this</span><span style="color: #000000;">.pathPrefixes&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;parse(packages);<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;<br>&nbsp;&nbsp;</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;init()&nbsp;{<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(configurationManager&nbsp;</span><span style="color: #000000;">==</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">null</span><span style="color: #000000;">)&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;configurationManager&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;ConfigurationManager(BeanSelectionProvider.DEFAULT_BEAN_NAME);</span><span style="color: #008000;">//</span><span style="color: #008000;">用来初始化ConfigurationManager</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;init_DefaultProperties();&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;"> org.apache.struts2.default.properties配置的provider初始化</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;init_TraditionalXmlConfigurations();&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;"> struts-default.xml,struts-plugin.xml,struts.xml配置的provider初始化</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;init_LegacyStrutsProperties();&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;"> </span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;init_ZeroConfiguration();&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;"> </span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;init_CustomConfigurationProviders();&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;"> </span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;init_MethodConfigurationProvider();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;init_FilterInitParameters()&nbsp;;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;"> </span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;init_AliasStandardObjects()&nbsp;;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;"> </span><span style="color: #008000;"><br></span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Container&nbsp;container&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;init_PreloadConfiguration();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;init_CheckConfigurationReloading(container);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;init_CheckWebLogicWorkaround(container);<br><br>&nbsp;&nbsp;&nbsp;&nbsp;}<br></span></div>
    </li>
    <li><span style="color: #000000;">包装转换请求
    <div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #008080;">&nbsp;1</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;doFilter(ServletRequest&nbsp;req,&nbsp;ServletResponse&nbsp;res,&nbsp;FilterChain&nbsp;chain)&nbsp;</span><span style="color: #0000ff;">throws</span><span style="color: #000000;">&nbsp;IOException,&nbsp;ServletException&nbsp;{<br></span><span style="color: #008080;">&nbsp;2</span>&nbsp;<span style="color: #000000;"><br></span><span style="color: #008080;">&nbsp;3</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br></span><span style="color: #008080;">&nbsp;4</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HttpServletRequest&nbsp;request&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;(HttpServletRequest)&nbsp;req;<br></span><span style="color: #008080;">&nbsp;5</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HttpServletResponse&nbsp;response&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;(HttpServletResponse)&nbsp;res;<br></span><span style="color: #008080;">&nbsp;6</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ServletContext&nbsp;servletContext&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;getServletContext();<br></span><span style="color: #008080;">&nbsp;7</span>&nbsp;<span style="color: #000000;">&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;<br></span><span style="color: #008080;">&nbsp;8</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;request&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;prepareDispatcherAndWrapRequest(request,&nbsp;response);</span><span style="color: #008000;">//作些编码准备和为了上传文件作包装<br></span><span style="color: #008080;">&nbsp;9</span>&nbsp;<span style="color: #008000;"></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ActionMapping&nbsp;mapping</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;actionMapper.getMapping(request,&nbsp;getConfigurationManager()); </span><span style="color: #008000;">//</span><span style="color: #008000;"> 把请求和配置文件挂勾 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;</span><span style="color: #008000;"><br></span><span style="color: #008080;">10</span>&nbsp;<span style="color: #008000;"></span><span style="color: #000000;"><br></span><span style="color: #008080;">11</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br></span><span style="color: #008080;">12</span>&nbsp;<span style="color: #000000;">&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;<br></span><span style="color: #008080;">13</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;serviceAction(request,&nbsp;response,&nbsp;servletContext,&nbsp;mapping);</span><span style="color: #008000;">//创建Action上下文，根据给定的mapping装载ActionProxy,然后指定的Action方法被执行，输出进入response<br></span><span style="color: #008080;">14</span>&nbsp;<span style="color: #008000;"></span><span style="color: #000000;"><br></span><span style="color: #008080;">15</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ActionContextCleanUp.cleanUp(req);</span><span style="color: #008000;">//<br></span><span style="color: #008080;">16</span>&nbsp;<span style="color: #008000;"></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;<br></span><span style="color: #008080;">17</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;}<br></span><span style="color: #008080;">18</span>&nbsp;<span style="color: #000000;"></span></div>
    </span></li>
</ol><img src ="http://www.blogjava.net/ktoo/aggbug/140631.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ktoo/" target="_blank">KTOO</a> 2007-08-28 18:56 <a href="http://www.blogjava.net/ktoo/archive/2007/08/28/140631.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Struts2的执行流程</title><link>http://www.blogjava.net/ktoo/archive/2007/08/20/138229.html</link><dc:creator>KTOO</dc:creator><author>KTOO</author><pubDate>Mon, 20 Aug 2007 13:40:00 GMT</pubDate><guid>http://www.blogjava.net/ktoo/archive/2007/08/20/138229.html</guid><wfw:comment>http://www.blogjava.net/ktoo/comments/138229.html</wfw:comment><comments>http://www.blogjava.net/ktoo/archive/2007/08/20/138229.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/ktoo/comments/commentRss/138229.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ktoo/services/trackbacks/138229.html</trackback:ping><description><![CDATA[<br>
<div style="text-align: left;">Struts2的体系结构如下图所示:<br>
<div style="text-align: center;">&nbsp;  <img style="width: 561px; height: 607px;" alt="" src="http://www.blogjava.net/images/blogjava_net/ktoo/Struts2-Architecture.png"><br>
<div style="text-align: left;">&nbsp;&nbsp; 一个HttpServletRequest请求一个Action经历如下流程!<br>
<ol>
    <li>当使用了SiteMesh Plugin等技术，首先调用ActionContextCleanUp filter和其它需要的filter或你写的filter。</li>
    <li>接下来FilterDispacher被调用，这是核心的filter,这个filter会从ActionMapper中去找有没有与请求相对应的Action,如果没找到就会报错!</li>
    <li>在ActionMapper中找到要执行的Action后，控制权转到ActionProxy,ActionProxy参考struts.xml文件，创建ActionInvocation类,</li>
    <li>ActionInvocation负责Action执行前Interceptor的调用和Action执行的的控制!Action执行完毕返回时，ActionInvocation又把执行结果和struts.xml中配置的结果关联进来!(感觉ActionInvocation像Action的父亲，把Action这个孩子的一切都安排了-_-)</li>
    <li>然后就是配置中对应结果Template的绘制了!</li>
    <li>绘制Template 后，ActionInvocation可以再去调用Interceptor</li>
    <li>最后，在向请求返回结果时，web.xml中配置的filter还可以对它处理一下!<br></li>
</ol>
</div>
</div>
</div>
相关类说明:<br>
<ul>
    <li><span style="font-weight: bold;">ObjectFactory </span>此类负责创建框架核心类，上面体系中所有类都是由它创建的(Action,Results,Interceptors等)!我们可以继承它以控制核心类的实例!</li>
    &nbsp;
    <li><span style="font-weight: bold;">FilterDispatcher</span>: 主要有四个作用 <br></li>
</ul>
<ol>
    <li>执行Action,</li>
    <li>自动清理ActionContext,防止内存泄漏！</li>
    <li>为静态内容服务!如javaScript文件,CSS 文件!像很多AJAX UI标签都需要很多javaScript文件，它们就在org.apache.struts2.static.package下面，而框架会自动寻找org.apache.struts2.static和template文件夹!</li>
    <li>把XWork中的interceptor链从请求生命周期中清除!<br></li>
</ol>
<ul>
    <li><span style="font-weight: bold;">ActionContextCleanUp</span>:&nbsp; 这是个filter，可以用来同FilterDispatcher协作，使得框架更容易与SiteMesh集成!使得FilterDispatcher不清理ActionContext，而是去清理这个filter;</li>
    <li><br></li>
</ul>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br><img src ="http://www.blogjava.net/ktoo/aggbug/138229.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ktoo/" target="_blank">KTOO</a> 2007-08-20 21:40 <a href="http://www.blogjava.net/ktoo/archive/2007/08/20/138229.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>struts2 Ajax学习</title><link>http://www.blogjava.net/ktoo/archive/2007/08/15/136838.html</link><dc:creator>KTOO</dc:creator><author>KTOO</author><pubDate>Wed, 15 Aug 2007 02:38:00 GMT</pubDate><guid>http://www.blogjava.net/ktoo/archive/2007/08/15/136838.html</guid><wfw:comment>http://www.blogjava.net/ktoo/comments/136838.html</wfw:comment><comments>http://www.blogjava.net/ktoo/archive/2007/08/15/136838.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/ktoo/comments/commentRss/136838.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ktoo/services/trackbacks/136838.html</trackback:ping><description><![CDATA[<p>struts发行时已绑定了dojo ajax类库,还提供了一些 ajax tag,从简单的学起,先看ajax tag!</p>
<p><font face="隶书" size="3"><strong><em>一.ajax Tag</em></strong></font></p>
<p>&nbsp;&nbsp; ajax tag</p>
<ol>
    <table unselectable="on" border="1" cellpadding="2" cellspacing="0" width="564">
        <tbody>
            <tr>
                <td valign="top" width="203">Ajax Tag</td>
                <td valign="top" width="359">说明</td>
            </tr>
            <tr>
                <td valign="top" width="205"><s:div></s:div></td>
                <td valign="top" width="359">与普通div不同的是,它可以通过ajax刷新</td>
            </tr>
            <tr>
                <td valign="top" width="206"><s:submit></s:submit></td>
                <td valign="top" width="359">使用ajax更新另外一个元素或提交form</td>
            </tr>
            <tr>
                <td valign="top" width="207"><s:a></s:a></td>
                <td valign="top" width="359">使用ajax更新目标元素</td>
            </tr>
            <tr>
                <td valign="top" width="208"><s:tabbedpanel></s:tabbedpanel></td>
                <td valign="top" width="359">一个可以加入动态和静态<s:div> 的panel</s:div></td>
            </tr>
            <tr>
                <td valign="top" width="208"><s:autocompleter></s:autocompleter></td>
                <td valign="top" width="359">使用ajax在现有数据的的基础上更新另外一个元素</td>
            </tr>
        </tbody>
    </table>
</ol>
ajax tag公有属性
<ol>
    <table unselectable="on" border="1" cellpadding="2" cellspacing="0" width="574">
        <tbody>
            <tr>
                <td valign="top" width="200">属性</td>
                <td valign="top" width="372">赋值说明</td>
            </tr>
            <tr>
                <td valign="top" width="200">href</td>
                <td valign="top" width="372">用来发送请求的url</td>
            </tr>
            <tr>
                <td valign="top" width="200">listenTopics</td>
                <td valign="top" width="372">会引发目标tag重新载入内容或发生动作,指定多个topics 时用逗号隔开</td>
            </tr>
            <tr>
                <td valign="top" width="200">notifyTopics</td>
                <td valign="top" width="372">tag公开的一个标志,指定多个topics时用逗号隔开</td>
            </tr>
            <tr>
                <td valign="top" width="200">showErrorTransportText</td>
                <td valign="top" width="372">设置错误信息是否显示</td>
            </tr>
            <tr>
                <td valign="top" width="200">indicator</td>
                <td valign="top" width="372">在request进行时显示的东东</td>
            </tr>
        </tbody>
    </table>
</ol>
<p>关于Tag的详细说明可以看API，要在struts2中使用ajax tag只要加上&lt;s:head theme="ajax"/&gt;</p>
<p>然后在使用的ajax tag中加上theme="ajax"就可以了!</p>
<p><br></p>
<font face="隶书" size="3"><strong><em>二，事件</em></strong></font><font face="隶书" size="3"><strong><em><br></em></strong></font>
<ul>
    <li>直接使用url或给Action属性
    <div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">s:url&nbsp;id</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">ajaxTest</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;value</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">/AjaxTest1.action</span><span style="color: #000000;">"</span><span style="color: #000000;">/&gt;</span><span style="color: #000000;"><br>&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">s:submit&nbsp;type</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">submit</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;&nbsp;theme</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">ajax</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;value</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">SUBMIT</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;targets</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">t1</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;href</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">%{ajaxTest}</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;align</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">left</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;tooltip</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">Hello</span><span style="color: #000000;">"</span><span style="color: #000000;">/&gt;</span></div>
    <!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #008080;"></span><span style="color: #000000;"></span><span style="color: #000000;"></span></li>
    <li><span style="color: #000000;">使用topics注册事件
    <div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #008080;">&nbsp;1</span>&nbsp;<span style="color: #000000;"><br></span><span style="color: #008080;">&nbsp;2</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">script&nbsp;type</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">text/javascript</span><span style="color: #000000;">"</span><span style="color: #000000;">&gt;</span><span style="color: #008000;">//</span><span style="color: #008000;">topics注册</span><span style="color: #008000;"><br></span><span style="color: #008080;">&nbsp;3</span>&nbsp;<span style="color: #008000;"></span><span style="color: #000000;">&nbsp;&#8230;&#8230;&#8230;&#8230;<br></span><span style="color: #008080;">&nbsp;4</span>&nbsp;<span style="color: #000000;">&#8230;&#8230;&#8230;&#8230;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dojo.event.topic.subscribe(</span><span style="color: #000000;">"</span><span style="color: #000000;">/after</span><span style="color: #000000;">"</span><span style="color: #000000;">,function(data,type,e)<br></span><span style="color: #008080;">&nbsp;5</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br></span><span style="color: #008080;">&nbsp;6</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alert(</span><span style="color: #000000;">"</span><span style="color: #000000;">inside&nbsp;a&nbsp;topic&nbsp;event&nbsp;type=</span><span style="color: #000000;">"</span><span style="color: #000000;">+</span><span style="color: #000000;">type);<br></span><span style="color: #008080;">&nbsp;7</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dojo.byId(</span><span style="color: #000000;">"</span><span style="color: #000000;">t2</span><span style="color: #000000;">"</span><span style="color: #000000;">).innerHTML</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">SUBSCRIBE</span><span style="color: #000000;">"</span><span style="color: #000000;">+</span><span style="color: #000000;">e.toString()</span><span style="color: #000000;">+</span><span style="color: #000000;">data.toString();<br></span><span style="color: #008080;">&nbsp;8</span>&nbsp;<span style="color: #000000;"></span><span style="color: #008000;">//</span><span style="color: #008000;">其中data表示返回的结果数据，<br></span><span style="color: #008080;">&nbsp;9</span>&nbsp;<span style="color: #008000;">&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">type表示返回的类型before,after,load之一<br></span><span style="color: #008080;">10</span>&nbsp;<span style="color: #008000;"></span><span style="color: #008000;">//</span><span style="color: #008000;">e表示XMLHttpRequest对象</span><span style="color: #008000;"><br></span><span style="color: #008080;">11</span>&nbsp;<span style="color: #008000;"></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;);<br></span><span style="color: #008080;">12</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;</span><span style="color: #000000;">&lt;/</span><span style="color: #000000;">script</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br></span><span style="color: #008080;">13</span>&nbsp;<span style="color: #000000;"><br></span><span style="color: #008080;">14</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">s:submit&nbsp;type</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">submit</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;theme</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">ajax</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;value</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">提交</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;targets</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">t1</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;href</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">%{ajaxTest}</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;align</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">left</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;notifyTopics</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">/after</span><span style="color: #000000;">"</span><span style="color: #000000;">/&gt;</span><span style="color: #000000;"><br></span><span style="color: #008080;">15</span>&nbsp;<span style="color: #000000;"></span><span style="color: #008000;">//</span><span style="color: #008000;">targets表示放结果值的地方</span></div>
    </span></li>
    <li><span style="color: #000000;"><span style="color: #008000;"><span style="color: #000000;">&nbsp;使用Handler
    <div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #000000;">&nbsp;<br>&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">script&nbsp;type</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">text/javascript</span><span style="color: #000000;">"</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;function&nbsp;handler(widget,node)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alert(</span><span style="color: #000000;">"</span><span style="color: #000000;">I&nbsp;will&nbsp;handle&nbsp;this</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dojo.byId(</span><span style="color: #000000;">"</span><span style="color: #000000;">t2</span><span style="color: #000000;">"</span><span style="color: #000000;">).innerHTML</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">I&nbsp;Have&nbsp;Done</span><span style="color: #000000;">"</span><span style="color: #000000;">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;</span><span style="color: #000000;">&lt;/</span><span style="color: #000000;">script</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br></span><span style="color: #000000;">&lt;</span><span style="color: #000000;">s:div&nbsp;handler</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">handler</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;id</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">t2</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;theme</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">ajax</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;cssStyle</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">border:1px&nbsp;solid&nbsp;yellow</span><span style="color: #000000;">"</span><span style="color: #000000;">&gt;</span><span style="color: #000000;">Inital&nbsp;Coment</span><span style="color: #000000;">&lt;/</span><span style="color: #000000;">s:div</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br></span><span style="color: #008000;">//</span><span style="color: #008000;">此div会在页面第一次加载的时候调用这个handler</span></div>
    </span><br></span></span></li>
</ul><img src ="http://www.blogjava.net/ktoo/aggbug/136838.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ktoo/" target="_blank">KTOO</a> 2007-08-15 10:38 <a href="http://www.blogjava.net/ktoo/archive/2007/08/15/136838.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>struts2出错</title><link>http://www.blogjava.net/ktoo/archive/2007/08/13/136510.html</link><dc:creator>KTOO</dc:creator><author>KTOO</author><pubDate>Mon, 13 Aug 2007 13:42:00 GMT</pubDate><guid>http://www.blogjava.net/ktoo/archive/2007/08/13/136510.html</guid><wfw:comment>http://www.blogjava.net/ktoo/comments/136510.html</wfw:comment><comments>http://www.blogjava.net/ktoo/archive/2007/08/13/136510.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/ktoo/comments/commentRss/136510.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ktoo/services/trackbacks/136510.html</trackback:ping><description><![CDATA[<font size=4>用Tomat5.5.20struts2+IntelliJ IDEA开发,刚开始一切正常,今天死活要出现下面的出错消息,<br>让我十分恼火,于是上网搜,查Document,用了N种方法还是无效<br>Unable to load bean: type:c<br>.......<br>Caused by: java.lang.NoClassDefFoundError: org/springframework/context/ApplicationContextAware<br>.....<br>后来想起昨天的调试LOG,<br>似乎IDEA启动Tomat的时候还会去加载Tomat中的Web工程,我昨天下午才把struts2的两个war例子Deploy上去,而且这两个例子运行正常一想到这.马上把这两个例子全删了.<br>&nbsp; 没想到IDEA调试不出错了!嘿嘿!<br><br>&nbsp;<br>&nbsp;看来com.opensymphony.xwork2.ObjectFactory只能加载一次<br>不过后面那句Casued by....是什么意思呢?<br><br>忘了一个关键的问题,我部署的时候用的是Tomcat的Manager去部署war包的方法,<br>昨天直接把show-case文件放到webapp下面,发现没有出错</font><br>
<img src ="http://www.blogjava.net/ktoo/aggbug/136510.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ktoo/" target="_blank">KTOO</a> 2007-08-13 21:42 <a href="http://www.blogjava.net/ktoo/archive/2007/08/13/136510.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>OGNL(二)</title><link>http://www.blogjava.net/ktoo/archive/2007/08/12/136229.html</link><dc:creator>KTOO</dc:creator><author>KTOO</author><pubDate>Sun, 12 Aug 2007 12:38:00 GMT</pubDate><guid>http://www.blogjava.net/ktoo/archive/2007/08/12/136229.html</guid><wfw:comment>http://www.blogjava.net/ktoo/comments/136229.html</wfw:comment><comments>http://www.blogjava.net/ktoo/archive/2007/08/12/136229.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/ktoo/comments/commentRss/136229.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ktoo/services/trackbacks/136229.html</trackback:ping><description><![CDATA[<table cellSpacing=0 cellPadding=2 width=765 border=0 unselectable="on">
    <tbody>
        <tr>
            <td vAlign=top width=75>一.运算符</td>
            <td vAlign=top width=688>&nbsp;</td>
        </tr>
        <tr>
            <td vAlign=top width=76>&nbsp;</td>
            <td vAlign=top width=688>OGNL借用了java的大多数符号,而且它还加了一些新的符号,<br>如下表:<br>
            <table cellSpacing=0 cellPadding=2 width=681 border=5 unselectable="on">
                <tbody>
                    <tr>
                        <td vAlign=top width=215>符号</td>
                        <td vAlign=top width=198>getValue()要注意事项</td>
                        <td vAlign=top width=264>setValue()注意事项</td>
                    </tr>
                    <tr>
                        <td vAlign=top width=215>e1,e2<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 顺序运算符</td>
                        <td vAlign=top width=198>e1和e2都会使用同一个源对象计算值,<br>且会返回e2的计算值</td>
                        <td vAlign=top width=263>getValue使用e1<br>setValue使用e2</td>
                    </tr>
                    <tr>
                        <td vAlign=top width=215>e1=e2<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 等于运算符</td>
                        <td vAlign=top width=198>getValue使用e2,setValu使用e1,且e2的结果作为目标的对象</td>
                        <td vAlign=top width=262>&nbsp;</td>
                    </tr>
                    <tr>
                        <td vAlign=top width=215>e1?e2:e3</td>
                        <td vAlign=top width=198>&nbsp;</td>
                        <td vAlign=top width=261>&nbsp;</td>
                    </tr>
                    <tr>
                        <td vAlign=top width=215>e1||e2,e1 or e2</td>
                        <td vAlign=top width=198>&nbsp;</td>
                        <td vAlign=top width=260>&nbsp;</td>
                    </tr>
                    <tr>
                        <td vAlign=top width=215>e1|e2,e1 bor e2</td>
                        <td vAlign=top width=198>&nbsp;</td>
                        <td vAlign=top width=259>&nbsp;</td>
                    </tr>
                    <tr>
                        <td vAlign=top width=215>e1^e2, e1 xor e2</td>
                        <td vAlign=top width=198>&nbsp;</td>
                        <td vAlign=top width=258>&nbsp;</td>
                    </tr>
                    <tr>
                        <td vAlign=top width=215>e1&amp;e2 ,e1 band e2</td>
                        <td vAlign=top width=198>&nbsp;</td>
                        <td vAlign=top width=258>&nbsp;</td>
                    </tr>
                    <tr>
                        <td vAlign=top width=215>e1==e2,e1 eq e2<br>e1!=e2, e1 neq e2</td>
                        <td vAlign=top width=198>&nbsp;</td>
                        <td vAlign=top width=258>&nbsp;</td>
                    </tr>
                    <tr>
                        <td vAlign=top width=215>e1&lt;e2,e1 lt e2<br>e1&lt;=e2 ,e1 lte e2<br>e1&gt;e2 ,e1 gt e2<br>e1&gt;=e2 ,e1 get e2<br>e1 in e2<br>e1 not in e2</td>
                        <td vAlign=top width=198>&nbsp;</td>
                        <td vAlign=top width=258>&nbsp;</td>
                    </tr>
                    <tr>
                        <td vAlign=top width=215>e1&lt;&lt; e2,e1 shl e2<br>e1&gt;&gt;e2 ,e1 shr e2<br>e1&gt;&gt;&gt; e2,e1 ushr e2</td>
                        <td vAlign=top width=198>&nbsp;</td>
                        <td vAlign=top width=258>&nbsp;</td>
                    </tr>
                    <tr>
                        <td vAlign=top width=215>e1+e2<br>e1-e2</td>
                        <td vAlign=top width=198>&nbsp;</td>
                        <td vAlign=top width=258>&nbsp;</td>
                    </tr>
                    <tr>
                        <td vAlign=top width=215><br>e1*e2<br>e1/e2<br>e1%e2</td>
                        <td vAlign=top width=198>&nbsp;</td>
                        <td vAlign=top width=258>&nbsp;</td>
                    </tr>
                    <tr>
                        <td vAlign=top width=215><br>+e<br>-e<br>!e<br>~e<br>e instanceof class </td>
                        <td vAlign=top width=198>&nbsp;</td>
                        <td vAlign=top width=258>&nbsp;</td>
                    </tr>
                    <tr>
                        <td vAlign=top width=215>e.method(args)<br><br>e.property<br><br>e1[e2]<br><br>e1.{e2}<br><br>e1.{?e2}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 选择<br>e1.(e2)<br>&nbsp;&nbsp; 子表达式的计算<br>e1(e2)<br>&nbsp; 表达式计算</td>
                        <td vAlign=top width=198>&nbsp;</td>
                        <td vAlign=top width=258>&nbsp;</td>
                    </tr>
                    <tr>
                        <td vAlign=top width=215>constant<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 常量<br>(e)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 将表达式加入括号内<br>method(args)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 方法调用<br>property<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 属性调用 <br>[e]<br>&nbsp;&nbsp;&nbsp;&nbsp; 通过索引得到值<br>{ e,.....}<br>&nbsp;&nbsp;&nbsp;&nbsp; 创建List<br>#variable<br>&nbsp;&nbsp;&nbsp;&nbsp; 上下文中变量的引用<br>@class@method<br>(args)<br>&nbsp;&nbsp;&nbsp;&nbsp; 静态方法调用<br>@ class@field<br>&nbsp;&nbsp;&nbsp; 静态字段调用<br>new class(args)<br>&nbsp; 构造器调用<br>new array-component-class[] {e,....}<br>&nbsp; 数组创建<br>#{e1:e2,...}<br>&nbsp;&nbsp;&nbsp;&nbsp; Map创建<br><br><a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#35;&#64;&#99;&#108;&#97;&#115;&#115;&#110;&#97;&#109;&#101;&#64;&#123;&#101;&#49;&#58;&#101;&#50;">#@classname@{e1:e2</a>,....}<br>&nbsp;&nbsp; 创建指定Map子类型的Map<br><br>:[e]<br>&nbsp;&nbsp; Lambda表达式<br><br></td>
                        <td vAlign=top width=198>
                        <p align=center>这些是最基础的运算符</p>
                        </td>
                        <td vAlign=top width=259>&nbsp;</td>
                    </tr>
                </tbody>
            </table>
            <br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br></td>
        </tr>
        <tr>
            <td vAlign=top width=76>&nbsp;</td>
            <td vAlign=top width=688>&nbsp;</td>
        </tr>
        <tr>
            <td vAlign=top width=76>&nbsp;</td>
            <td vAlign=top width=688>&nbsp;</td>
        </tr>
        <tr>
            <td vAlign=top width=76>&nbsp;</td>
            <td vAlign=top width=688>&nbsp;</td>
        </tr>
        <tr>
            <td vAlign=top width=76>&nbsp;</td>
            <td vAlign=top width=688>&nbsp;</td>
        </tr>
        <tr>
            <td vAlign=top width=76>&nbsp;</td>
            <td vAlign=top width=688>&nbsp;</td>
        </tr>
        <tr>
            <td vAlign=top width=76>&nbsp;</td>
            <td vAlign=top width=688>&nbsp;</td>
        </tr>
        <tr>
            <td vAlign=top width=76>&nbsp;</td>
            <td vAlign=top width=688>&nbsp;</td>
        </tr>
        <tr>
            <td vAlign=top width=76>&nbsp;</td>
            <td vAlign=top width=688>&nbsp;</td>
        </tr>
    </tbody>
</table>
<img src ="http://www.blogjava.net/ktoo/aggbug/136229.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ktoo/" target="_blank">KTOO</a> 2007-08-12 20:38 <a href="http://www.blogjava.net/ktoo/archive/2007/08/12/136229.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>OGNL</title><link>http://www.blogjava.net/ktoo/archive/2007/08/12/136226.html</link><dc:creator>KTOO</dc:creator><author>KTOO</author><pubDate>Sun, 12 Aug 2007 11:50:00 GMT</pubDate><guid>http://www.blogjava.net/ktoo/archive/2007/08/12/136226.html</guid><wfw:comment>http://www.blogjava.net/ktoo/comments/136226.html</wfw:comment><comments>http://www.blogjava.net/ktoo/archive/2007/08/12/136226.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/ktoo/comments/commentRss/136226.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ktoo/services/trackbacks/136226.html</trackback:ping><description><![CDATA[<p>OGNL(Object Graph Navigation Language)是一种表达式语言,使用它可以使表达式与java对象中的getter和setter属性绑定,</p>
<p>且一个OGNL表达式可以进行存和取两方面的操作.</p>
<p>1).<strong>使用OGNL的好处</strong></p>
<ul>
    <li>是一种 可以把GUI元素和model object绑定的语言!且通过OGNL的TypeConverter</li>
</ul>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;机制可以更容易实现值类型的的转换! </p>
<ul>
    <li>可以把Web组件和后台的model 绑定(WebOGNL, Tapestry,WeboWork,WebOjbects)</li>
</ul>
<p>2).<strong>OGNL表达式</strong></p>
<p><strong>OGNL使用集合</strong></p>
<p>&nbsp; 使用Collection中的元素须用索引,如:得到array中第一个元素表达式为array[0]</p>
<p><strong>List </strong></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;例子:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; name in{null,"init"}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 这个例子 当name属性是&nbsp;空或"init"返回true ,</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 而在这个过程中会创建List接口的一个实例,具体的子类没有指定</p>
<p><strong>本地Arrays&nbsp;&nbsp;&nbsp;&nbsp; </strong>OGNL支持创建Java本地数组!&nbsp;&nbsp;且允许给定存在的list或设定数组的的大小</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<em>&nbsp; new int[] {1,2,3}&nbsp;&nbsp; 创建一个int 数组</em></p>
<p><em>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;new int[5]&nbsp;&nbsp; 创建了一个int数组,它的元素的值为0</em></p>
<p><strong>Maps&nbsp;&nbsp;&nbsp; </strong>创建Map&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#{"foo":"fool value","bar":"bar value"}</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 我们甚至可以指定一个特定的java Map Class&nbsp;去创建Map</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#35;&#64;&#106;&#97;&#118;&#97;&#46;&#117;&#116;&#105;&#108;&#46;&#76;&#105;&#110;&#107;&#101;&#100;&#72;&#97;&#115;&#104;&#77;&#97;&#112;&#64;&#37;&#55;&#66;&#37;&#50;&#50;&#102;&#111;&#111;&#37;&#50;&#50;&#58;&#37;&#50;&#50;&#102;&#111;&#111;">#@java.util.LinkedHashMap@{"foo":"foo</a> value","bar":bar value"};&nbsp; </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Java Collection各自有一些特殊的属性</p>
<table style="BORDER-TOP-STYLE: solid; BORDER-RIGHT-STYLE: solid; BORDER-LEFT-STYLE: solid; BORDER-BOTTOM-STYLE: solid" cellSpacing=0 cellPadding=2 width=500 border=1 unselectable="on">
    <tbody>
        <tr>
            <td vAlign=top width=196>Collection</td>
            <td vAlign=top width=302>Special Properties</td>
        </tr>
        <tr>
            <td vAlign=top width=198>Collection(子类有Map List Set)</td>
            <td vAlign=top width=302>size&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 集合的大小<br>isEmpty&nbsp;&nbsp; 如果集合为空值为true</td>
        </tr>
        <tr>
            <td vAlign=top width=199>List</td>
            <td vAlign=top width=302>iterator&nbsp; 得到此list的迭代器</td>
        </tr>
        <tr>
            <td vAlign=top width=200>Map</td>
            <td vAlign=top width=302>keys&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 得到一个包涵所有键值的Set<br>values&nbsp; 得到一个包括所有值的Collection</td>
        </tr>
        <tr>
            <td vAlign=top width=200>Set</td>
            <td vAlign=top width=302>iterator 得到此Set的迭代器</td>
        </tr>
        <tr>
            <td vAlign=top width=200>Iterator</td>
            <td vAlign=top width=302>next&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 得到集合中的下一个object<br>hasNext如果集合中有下一个object则返回true</td>
        </tr>
        <tr>
            <td vAlign=top width=200>Enumeration</td>
            <td vAlign=top width=302>next&nbsp; 如上&nbsp;<br>hasNext如上<br>nextElement&nbsp; 和next一样的作用<br>hasMoreElements和hasNext一样作用</td>
        </tr>
    </tbody>
</table>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p>
<p>&nbsp;</p>
<p><strong>OGNL调用JavaBean 索引属性</strong></p>
<p>JavaBean索引属性的格式如下</p>
<p><em>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public PropertyType[] getPropertyName()</em></p>
<p><em>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public void setPropertyName(propertyType[] anArray)</em></p>
<p><em>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public PropertyType getPropertyName(int index);</em></p>
<p><em>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public void setPropertyName(int index,PropertyType value)</em></p>
<p>OGNL可以很容易地通过索引存取这些属性, Example</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <em>someProperty[2]</em>&nbsp; </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<em>在这个例子中OGNL会自动找到getSomeProperty(2)或存到setSomeProperty&nbsp; (2,value)中!</em></p>
<p><strong>调用OGNL对象索引属性</strong></p>
<p><strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</strong> 对象索引属性格式</p>
<p><em>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public PropertyType getPropertyName(IndexType index)</em></p>
<p><em>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public void setPropertyName(IndexType index,PropertyType value)</em></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PropertyType 和IndexType 必需跟集合和get方法中的类型相配</p>
<p>&nbsp;</p>
<p><strong>调用方法</strong></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OGNL调用方法和Java调用方法有一点区别,因为OGNL是被解释的并且必需在运行时选择正确的方法,所以OGNL调用方法时除了提供所需要参数没有额外的类型信息,OGNL选择和提供的参数最配的方法,如果有两个或更多的方法符合匹配,它们中的一个会任意的被选择(在WebWork中会选择ValueStack上面的方法)</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 特别一提的是 ,null可以匹配所有非基础类型,所有它通常会导致一个不确定的方法被调用</p>
<p><strong>变量的调用</strong>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OGNL有一个简单的变量配置,在这儿你可以存储中间值和重新使用这些中间值,或者仅仅命名以使表达式更易理解!&nbsp;在OGNL中所有变量都是全局的,使用变量的格式是"#variable"</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;OGNL把当前的object在每点的表达式值存放在"this"这个变量中,而且"this"可以像其它变量一样使用!例:</p>
<p><em>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; listeners.size().(#this&gt;100?2*this:20+#this)</em> <em>如果listeners中的元素大于100会返回元素数量的两倍,否则数量加上20</em></p>
<p><em>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</em>可以显式地给变量赋值,只要在变量的后边写一个表达式即可</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<em>&nbsp;&nbsp; #var -99</em></p>
<br><br>
<p class=poweredbyperformancing>Powered by <a href="http://scribefire.com/">ScribeFire</a>.</p>
<img src ="http://www.blogjava.net/ktoo/aggbug/136226.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ktoo/" target="_blank">KTOO</a> 2007-08-12 19:50 <a href="http://www.blogjava.net/ktoo/archive/2007/08/12/136226.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>