﻿<?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-Rory's Blog-随笔分类-Webwork</title><link>http://www.blogjava.net/rory/category/8558.html</link><description>Happy study,Happy work,Happy life</description><language>zh-cn</language><lastBuildDate>Tue, 27 Feb 2007 08:49:21 GMT</lastBuildDate><pubDate>Tue, 27 Feb 2007 08:49:21 GMT</pubDate><ttl>60</ttl><item><title>关于Hibernate的DetachedCriteria查询的addOrder问题的解决办法</title><link>http://www.blogjava.net/rory/archive/2006/05/29/48850.html</link><dc:creator>莫多</dc:creator><author>莫多</author><pubDate>Mon, 29 May 2006 15:29:00 GMT</pubDate><guid>http://www.blogjava.net/rory/archive/2006/05/29/48850.html</guid><wfw:comment>http://www.blogjava.net/rory/comments/48850.html</wfw:comment><comments>http://www.blogjava.net/rory/archive/2006/05/29/48850.html#Feedback</comments><slash:comments>9</slash:comments><wfw:commentRss>http://www.blogjava.net/rory/comments/commentRss/48850.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rory/services/trackbacks/48850.html</trackback:ping><description><![CDATA[上篇文章:《<a class="singleposttitle" id="viewpost1_TitleUrl" href="/rory/archive/2006/05/21/47339.html"><font color="#223355"><strong>今天发现一个hibernate的bug,或者说一个应该注意的地方比较合适</strong></font></a> 》里面我提到了Hibernate查询需要注意的一个问题。今天发现了一个最好的解决办法。如果大家现在用Hibernate，相信大家都回用到DetachedCriteria.关于DetachedCriteria查询请查看<a href="http://dev.yesky.com/241/2033241.shtml">http://dev.yesky.com/241/2033241.shtml</a>。<br />      DetachedCriteria给我们的Hibernate查询带来了很多方便，但是如果你带上排序信息就会出现我的上一篇文章里面说的那种错误，今天发现一个很好的解决方法，其实也很简单。就是先把传入的带Order信息的DetachedCriteria去掉order信息查询数据总条数，然后再把Order加回来查询满足条件的对象。通过查看Hibernate的源代码发现Criteria的实现CriteriaImpl发现其实addOrder是给private List orderEntries = new ArrayList();这个List加值。这个List里面放的是OrderEntry对象。这个OrderEntry里面放了一个criteria 和 order.<br /><br />     
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #000000">    </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> PaginationSupport findPageByCriteria(</span><span style="COLOR: #0000ff">final</span><span style="COLOR: #000000"> DetachedCriteria detachedCriteria, </span><span style="COLOR: #0000ff">final</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> pageSize, </span><span style="COLOR: #0000ff">final</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> startIndex) {<br />        </span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000"> (PaginationSupport) getHibernateTemplate().execute(</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> HibernateCallback() {<br />            </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> Object doInHibernate(Session session) </span><span style="COLOR: #0000ff">throws</span><span style="COLOR: #000000"> HibernateException {<br />                Criteria criteria </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> detachedCriteria.getExecutableCriteria(session);<br />                CriteriaImpl impl </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> (CriteriaImpl) criteria;<br />                List orderEntrys </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> ArrayList();<br />                </span><span style="COLOR: #0000ff">try</span><span style="COLOR: #000000">{<br />                    Field field </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> CriteriaImpl.</span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">.getDeclaredField(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">orderEntries</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br />                    </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">Get orders</span><span style="COLOR: #008000"><br /></span><span style="COLOR: #000000">                    orderEntrys </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> (List) field.get(impl);<br />                    </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">Remove orders</span><span style="COLOR: #008000"><br /></span><span style="COLOR: #000000">                    field.set(criteria,</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> ArrayList());<br />                }</span><span style="COLOR: #0000ff">catch</span><span style="COLOR: #000000">(Exception ex){<br />                    ex.printStackTrace();<br />                    </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">TODO xxxx</span><span style="COLOR: #008000"><br /></span><span style="COLOR: #000000">                }<br />                </span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> totalCount </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> ((Integer) criteria.setProjection(Projections.rowCount())<br />                        .uniqueResult()).intValue();<br />                criteria.setProjection(</span><span style="COLOR: #0000ff">null</span><span style="COLOR: #000000">);<br />                <br />                </span><span style="COLOR: #0000ff">try</span><span style="COLOR: #000000">{<br />                    Field field </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> CriteriaImpl.</span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">.getDeclaredField(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">orderEntries</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br />                    </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">Add orders return</span><span style="COLOR: #008000"><br /></span><span style="COLOR: #000000">                    </span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">; i</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">orderEntrys.size(); i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">){<br />                        List innerOrderEntries </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> (List) field.get(criteria);<br />                        innerOrderEntries.add(orderEntrys.get(i));<br />                    }<br />                }</span><span style="COLOR: #0000ff">catch</span><span style="COLOR: #000000">(Exception ex){<br />                    ex.printStackTrace();<br />                    </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">TODO cccc</span><span style="COLOR: #008000"><br /></span><span style="COLOR: #000000">                }<br />                List items </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> criteria.setFirstResult(startIndex).setMaxResults(pageSize).list();<br />                PaginationSupport ps </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> PaginationSupport(items, totalCount, pageSize,<br />                        startIndex);<br />                </span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000"> ps;<br />            }<br />        }, </span><span style="COLOR: #0000ff">true</span><span style="COLOR: #000000">);<br />    }</span></div>希望大家多多交流<img src ="http://www.blogjava.net/rory/aggbug/48850.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rory/" target="_blank">莫多</a> 2006-05-29 23:29 <a href="http://www.blogjava.net/rory/archive/2006/05/29/48850.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>如何给webwork的action里的Field设置初始值(续)</title><link>http://www.blogjava.net/rory/archive/2006/04/22/42463.html</link><dc:creator>莫多</dc:creator><author>莫多</author><pubDate>Sat, 22 Apr 2006 03:21:00 GMT</pubDate><guid>http://www.blogjava.net/rory/archive/2006/04/22/42463.html</guid><wfw:comment>http://www.blogjava.net/rory/comments/42463.html</wfw:comment><comments>http://www.blogjava.net/rory/archive/2006/04/22/42463.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/rory/comments/commentRss/42463.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rory/services/trackbacks/42463.html</trackback:ping><description><![CDATA[前面一篇文章提到通过webwork的interceptor给webwork的action设置初始值，
<h2><a class="singleposttitle" id="viewpost1_TitleUrl" href="/rory/archive/2006/03/16/35656.html">如何给webwork的action里的Field设置初始值</a></h2><p>jdev说到"为什么要放在这里，而不是放到系统配置文件中，然后在系统设置界面中提供设置"，后来我就用spring来注入了。现在就把值放入properties文件中了。<br /></p><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #000000">    </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">bean </span><span style="COLOR: #ff0000">id</span><span style="COLOR: #0000ff">="propertyPlaceholderConfigurer"</span><span style="COLOR: #ff0000"> class</span><span style="COLOR: #0000ff">="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br />      </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">property </span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="locations"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br />        </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">list</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br />          </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">value</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">classpath:mail.properties</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">value</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br />          </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">value</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">classpath:upload.properties</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">value</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br />        </span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">list</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br />      </span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">property</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br />    </span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">bean</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br />    </span><span style="COLOR: #008000">&lt;!--</span><span style="COLOR: #008000"> 收发外部邮箱 author:somebody</span><span style="COLOR: #008000">--&gt;</span><span style="COLOR: #000000"><br />    </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">bean </span><span style="COLOR: #ff0000">id</span><span style="COLOR: #0000ff">="outMailManager"</span><span style="COLOR: #ff0000"> class</span><span style="COLOR: #0000ff">="cn.com.fivefortunes.mail.manager.impl.OutMailManagerImpl"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br />        </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">property </span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="javaMailSender"</span><span style="COLOR: #0000ff">&gt;&lt;</span><span style="COLOR: #800000">ref </span><span style="COLOR: #ff0000">bean</span><span style="COLOR: #0000ff">="javaMailSender"</span><span style="COLOR: #0000ff">/&gt;&lt;/</span><span style="COLOR: #800000">property</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br />        </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">property </span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="attachementDirectory"</span><span style="COLOR: #0000ff">&gt;&lt;</span><span style="COLOR: #800000">value</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">${mail.attachementDirectory}</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">value</span><span style="COLOR: #0000ff">&gt;&lt;/</span><span style="COLOR: #800000">property</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br />        </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">property </span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="uploadFileDirectory"</span><span style="COLOR: #0000ff">&gt;&lt;</span><span style="COLOR: #800000">value</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">${upload.directory}</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">value</span><span style="COLOR: #0000ff">&gt;&lt;/</span><span style="COLOR: #800000">property</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br />        </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">property </span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="outMailHibernateManager"</span><span style="COLOR: #0000ff">&gt;&lt;</span><span style="COLOR: #800000">ref </span><span style="COLOR: #ff0000">bean</span><span style="COLOR: #0000ff">="outMailHibernateManager"</span><span style="COLOR: #0000ff">/&gt;&lt;/</span><span style="COLOR: #800000">property</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br />        </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">property </span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="outMailAccountManager"</span><span style="COLOR: #0000ff">&gt;&lt;</span><span style="COLOR: #800000">ref </span><span style="COLOR: #ff0000">bean</span><span style="COLOR: #0000ff">="outMailAccountManager"</span><span style="COLOR: #0000ff">/&gt;&lt;/</span><span style="COLOR: #800000">property</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br />    </span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">bean</span><span style="COLOR: #0000ff">&gt;</span></div>这样把uploadFileDirectory放入mananger中去了。在properties里面配置一下就ok了。<br /><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #000000"><br />upload.directory</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">D:\\tomcat5\\webapps\\files<br />mail.attachementDirectory</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">D:\\tomcat5\\webapps\\files<br /></span></div>上次还有网友这样说到"return ServletActionContext.getServletContext().getRealPath("/"); <br /><br />你这样换了部署环境每次都要改 <br />而且也该是 <br />D://tomcat5//webapps//files"<br />也许很多人都以为这是最好的方式，可是实际情况不是这样，我们的uploadfile目录已经有3G的文件，而基本上每天我们都要发布新的webapp，如果把uploadfile目录放到webapp的一个子目录，每次部署的时候都要先把uploadfile copy出来然后再部署。所以我们这么做就是把upload目录放到其他目录不影响uploadfile目录里面的文件。关于我们项目的部署见我的下一篇文章。谢谢大家。如果您有什么更好的方法请您指教。<img src ="http://www.blogjava.net/rory/aggbug/42463.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rory/" target="_blank">莫多</a> 2006-04-22 11:21 <a href="http://www.blogjava.net/rory/archive/2006/04/22/42463.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>webwork+freemarker轻松实现Rss,Atom</title><link>http://www.blogjava.net/rory/archive/2006/04/10/40339.html</link><dc:creator>莫多</dc:creator><author>莫多</author><pubDate>Mon, 10 Apr 2006 14:40:00 GMT</pubDate><guid>http://www.blogjava.net/rory/archive/2006/04/10/40339.html</guid><wfw:comment>http://www.blogjava.net/rory/comments/40339.html</wfw:comment><comments>http://www.blogjava.net/rory/archive/2006/04/10/40339.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/rory/comments/commentRss/40339.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rory/services/trackbacks/40339.html</trackback:ping><description><![CDATA[Rss,Atom,基本上是Web2.0的基本特征，今天终于有时间决定实现一下。对于动态的Rss，Atom其实就是选取最新的内容，迭迨一下生成一个固定格式的xml文件就可以了。其实也很简单。<br />       我用webwork2，用freemarker做模版，在网上找了一个标准的Rss2.0格式就生成我的模版文件rss.ftl<br /><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #0000ff">&lt;?</span><span style="COLOR: #ff00ff">xml version="1.0" encoding="UTF-8"</span><span style="COLOR: #0000ff">?&gt;</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">rss </span><span style="COLOR: #ff0000">version</span><span style="COLOR: #0000ff">="2.0"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">channel</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">title</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #0000ff">&lt;![CDATA[</span><span style="COLOR: #808080"><a title="泡出好心情,泡出好技术" href="http://leaf.jdk.cn" >我的小站</a></span><span style="COLOR: #0000ff">]]&gt;</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">title</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">link</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">http://leaf.jdk.cn/</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">link</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">description</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #0000ff">&lt;![CDATA[</span><span style="COLOR: #808080">泡出好心情，泡出好技术</span><span style="COLOR: #0000ff">]]&gt;</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">description</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">language</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">zh-cn</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">language</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">copyright</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #0000ff">&lt;![CDATA[</span><span style="COLOR: #808080">Copyright 2006 PaoPao v4.0</span><span style="COLOR: #0000ff">]]&gt;</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">copyright</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">webMaster</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #0000ff">&lt;![CDATA[</span><span style="COLOR: #808080">rory.cn@gmail.com (Rory Ye)</span><span style="COLOR: #0000ff">]]&gt;</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">webMaster</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">generator</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">PaoPao v4.0</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">generator</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"> <br />    </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">image</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br />        </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">title</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><a title="泡出好心情,泡出好技术" href="http://leaf.jdk.cn" >我的小站</a></span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">title</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"> <br />        </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">url</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">http://leaf.jdk.cn/logo.gif</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">url</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"> <br />        </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">link</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">http://leaf.jdk.cn</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">link</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"> <br />        </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">description</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">莫多泡泡2006</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">description</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"> <br />    </span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">image</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br />    </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">#list </span><span style="COLOR: #ff0000">blogs as blog</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br />    </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">item</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br />        </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">link</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">http://leaf.jdk.cn/entry.action?entryId=${blog.id}</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">link</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br />        </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">title</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #0000ff">&lt;![CDATA[</span><span style="COLOR: #808080">${blog.title}</span><span style="COLOR: #0000ff">]]&gt;</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">title</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br />        </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">author</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">${blog.authorMail}(${blog.author})</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">author</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br />        </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">category</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #0000ff">&lt;![CDATA[</span><span style="COLOR: #808080"> ${blog.categories} </span><span style="COLOR: #0000ff">]]&gt;</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">category</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br />        </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">pubDate</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">${blog.pubDate}</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">pubDate</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br />        </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">guid</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">http://leaf.jdk.cn/entry.action?id=${blog.id}</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">guid</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">    <br />        </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">description</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #0000ff">&lt;![CDATA[</span><span style="COLOR: #808080">${blog.content}</span><span style="COLOR: #0000ff">]]&gt;</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">description</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br />    </span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">item</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br />    </span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">#list</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">channel</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">rss</span><span style="COLOR: #0000ff">&gt;</span></div>我在rss.action里面去取blogs就可以了。<br /><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #000000">    </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> String execute() </span><span style="COLOR: #0000ff">throws</span><span style="COLOR: #000000"> Exception {<br />        PaginationSupport ps </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> blogManager.getBlogsByPage(</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">);<br />        blogs </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> ArrayList();<br />        <br />        </span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">(Iterator ite </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> ps.getItems().iterator(); ite.hasNext();){<br />            Blog blog </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> (Blog)ite.next();<br />            WrapRssBlog wrapBlog </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> WrapRssBlog();<br />            wrapBlog.setId(blog.getId());<br />            wrapBlog.setAuthor(blog.getAuthor().getNickname());<br />            wrapBlog.setAuthorMail(blog.getAuthor().getMail());<br />            wrapBlog.setTitle(blog.getTitle());<br />            wrapBlog.setContent(StringUtil.extractText(blog.getContent()));<br />            wrapBlog.setPubDate(DateUtil.formatRssDate(blog.getPostTime()));<br />            StringBuffer sb </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> StringBuffer();<br />            </span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">(Iterator ite2 </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> blog.getCategories().iterator(); ite2.hasNext();){<br />                Category cate </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> (Category) ite2.next();<br />                sb.append(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">)<br />                  .append(cate.getName());<br />            }<br />            wrapBlog.setCategories(sb.toString());<br />            blogs.add(wrapBlog);<br />        }<br />        </span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">super</span><span style="COLOR: #000000">.execute();<br />    }</span></div>这里把blog包装了一下，主要是处理了一下日期，内容，还有把分类拼成字符串。关于日期的处理，参考了飞云小侠写的rss日期的研究。实现代码如下。<br /><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #000000">    </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">static</span><span style="COLOR: #000000"> String formatRssDate(Date date){<br />        SimpleDateFormat sdf </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> SimpleDateFormat(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">EEE, d MMM yyyy HH:mm:ss z</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,Locale.US);<br />        </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">TODO TimeZone</span><span style="COLOR: #008000"><br /></span><span style="COLOR: #000000">        SimpleTimeZone zone </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> SimpleTimeZone(</span><span style="COLOR: #000000">8</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">GMT</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br />        sdf.setTimeZone(zone);<br />        </span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000"> sdf.format(date);<br />    }</span></div>这样就得到了这样的日期<br />Thu, 6 Apr 2006 16:01:36 GMT<br />做好了这些，配置一下action<br /><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #000000">        </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">action </span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="rss"</span><span style="COLOR: #ff0000"> class</span><span style="COLOR: #0000ff">="cn.jdk.leaf.action.RssAction"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">        <br />            </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">result </span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="success"</span><span style="COLOR: #ff0000"> type</span><span style="COLOR: #0000ff">="freemarker"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">/WEB-INF/pages/rss.ftl</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">result</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br />        </span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">action</span><span style="COLOR: #0000ff">&gt;</span></div>不过像这样配置的话，你访问<a href="http://xxx.xxx.com/rss.action看到的不是一个xmly">http://xxx.xxx.com/rss.action看到的不是一个xml<br /></a>因为返回结果的contentType是text/html.而不是xml，这样是不行的。看了一下webwork源码。原来可以这样简单的解决。改成这样配置就可以了。<br /><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #000000">        </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">action </span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="rss"</span><span style="COLOR: #ff0000"> class</span><span style="COLOR: #0000ff">="cn.jdk.leaf.action.RssAction"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br />            </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">result </span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="success"</span><span style="COLOR: #ff0000"> type</span><span style="COLOR: #0000ff">="freemarker"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br />                </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">param </span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="location"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">/WEB-INF/pages/rss.ftl</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">param</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br />                </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">param </span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="contentType"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">application/xml</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">param</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br />            </span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">result</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br />        </span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">action</span><span style="COLOR: #0000ff">&gt;</span></div><br />简单吧。其实你还可以把这个contentType改成其他类型的。比如excle的。这样用户执行就可以得到一个xls文件。哈哈。<img src ="http://www.blogjava.net/rory/aggbug/40339.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rory/" target="_blank">莫多</a> 2006-04-10 22:40 <a href="http://www.blogjava.net/rory/archive/2006/04/10/40339.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>interceptor和ognlvaluestack</title><link>http://www.blogjava.net/rory/archive/2006/03/21/36591.html</link><dc:creator>莫多</dc:creator><author>莫多</author><pubDate>Tue, 21 Mar 2006 03:37:00 GMT</pubDate><guid>http://www.blogjava.net/rory/archive/2006/03/21/36591.html</guid><wfw:comment>http://www.blogjava.net/rory/comments/36591.html</wfw:comment><comments>http://www.blogjava.net/rory/archive/2006/03/21/36591.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/rory/comments/commentRss/36591.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rory/services/trackbacks/36591.html</trackback:ping><description><![CDATA[只是自己的想法,不对不要扔鸡蛋哦。<br /><br />今天突发奇想的实现一个小小的cache。把分类categories放入map中，cache起来。<br /><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #000000">    </span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> cache() {<br />        </span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(log.isDebugEnabled()){<br />            log.debug(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Starting cache the categories<img src="http://www.blogjava.net/images/dot.gif" /></span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br />        }<br />        cacheCategoryMap </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> HashMap();<br />        cacheCategoryMap.put(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">categories</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,categoryDao.getCategories());<br />    }<br /></span></div><br />然后我想在interceptor里面把categories写到ognlvaluestack里面这样我在ftl里面就可以&lt;#list categories&gt;....&lt;/#list&gt;了。因为这个是在每个页面的header.ftl里面的。我也就不需要再每个action里面去get一下了。<br />刚开始我implements Interceptor<br /><br /><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #000000">        </span><span style="COLOR: #0000ff">final</span><span style="COLOR: #000000"> OgnlValueStack stack </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> ActionContext.getContext().getValueStack();<br />        stack.setValue(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">categories</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> ,categoryManager.getCategories());<br />        </span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000"> invocation.invoke();</span></div>可是这样也不可以。后来我想到是不是action执行完毕之后就把stack中的这个值清空了我又用了。AroundInterceptor 我想在after里面去设置不就可以了。<br /><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #000000">    </span><span style="COLOR: #0000ff">protected</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> after(ActionInvocation dispatcher, String result) </span><span style="COLOR: #0000ff">throws</span><span style="COLOR: #000000"> Exception {<br />        </span><span style="COLOR: #0000ff">final</span><span style="COLOR: #000000"> OgnlValueStack stack </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> ActionContext.getContext().getValueStack();<br />        stack.setValue(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">categories</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> ,categoryManager.getCategories());<br />    }</span></div>可是这样还是不可以。我晕了。我想是不是要在action里面声明一下categories。<br /><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #000000">    </span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000"> List categories;<br /><br />    </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> List getCategories() {<br />        </span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000"> categories;<br />    }<br /><br /><br />    </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> setCategories(List categories) {<br />        </span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">.categories </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> categories;<br />    }<br /><br /></span></div>然后在before里面去get就可以了。<br /><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #000000">    </span><span style="COLOR: #0000ff">protected</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> before(ActionInvocation invocation) </span><span style="COLOR: #0000ff">throws</span><span style="COLOR: #000000"> Exception {<br />        </span><span style="COLOR: #0000ff">final</span><span style="COLOR: #000000"> OgnlValueStack stack </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> ActionContext.getContext().getValueStack();<br />        stack.setValue(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">categories</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> ,categoryManager.getCategories());<br />    }</span></div><br />总算实现了。不过还要在每个action里面声明一下categories，这样还是很不好的。刚才有人建议用filter。我在试试吧.<br /><br /><br /><a href="http://leaf.jdk.cn/index.php/archives/91">http://leaf.jdk.cn/index.php/archives/91</a><img src ="http://www.blogjava.net/rory/aggbug/36591.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rory/" target="_blank">莫多</a> 2006-03-21 11:37 <a href="http://www.blogjava.net/rory/archive/2006/03/21/36591.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>如何给webwork的action里的Field设置初始值</title><link>http://www.blogjava.net/rory/archive/2006/03/16/35656.html</link><dc:creator>莫多</dc:creator><author>莫多</author><pubDate>Thu, 16 Mar 2006 07:26:00 GMT</pubDate><guid>http://www.blogjava.net/rory/archive/2006/03/16/35656.html</guid><wfw:comment>http://www.blogjava.net/rory/comments/35656.html</wfw:comment><comments>http://www.blogjava.net/rory/archive/2006/03/16/35656.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.blogjava.net/rory/comments/commentRss/35656.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rory/services/trackbacks/35656.html</trackback:ping><description><![CDATA[前两天在做javamail的时候发现原来的上传的action把上传文件的路径写在action里面了。那个目录是服务器上的地址，真bad smell。我就想把它改成可以配置的。我给uploadaction添加了一个string 的字段uploadDirectory。在action的配置文件里面给设置了初始值。<BR>
<DIV style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><SPAN style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">&lt;</SPAN><SPAN style="COLOR: #800000">action&nbsp;</SPAN><SPAN style="COLOR: #ff0000">name</SPAN><SPAN style="COLOR: #0000ff">="fileupload"</SPAN><SPAN style="COLOR: #ff0000">&nbsp;class</SPAN><SPAN style="COLOR: #0000ff">="cn.com.fivefortunes.upload.FileUpload"</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN><SPAN style="COLOR: #000000"><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">&lt;</SPAN><SPAN style="COLOR: #800000">param&nbsp;</SPAN><SPAN style="COLOR: #ff0000">name</SPAN><SPAN style="COLOR: #0000ff">="uploadDirectory"</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN><SPAN style="COLOR: #000000">D:\tomcat5\webapps\files</SPAN><SPAN style="COLOR: #0000ff">&lt;/</SPAN><SPAN style="COLOR: #800000">param</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">&lt;!</SPAN><SPAN style="COLOR: #ff00ff">–D:\temp&nbsp;–</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN><SPAN style="COLOR: #000000"><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">&lt;</SPAN><SPAN style="COLOR: #800000">result&nbsp;</SPAN><SPAN style="COLOR: #ff0000">name</SPAN><SPAN style="COLOR: #0000ff">="success"</SPAN><SPAN style="COLOR: #ff0000">&nbsp;type</SPAN><SPAN style="COLOR: #0000ff">="freemarker"</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN><SPAN style="COLOR: #000000">/upload/upload.ftl</SPAN><SPAN style="COLOR: #0000ff">&lt;/</SPAN><SPAN style="COLOR: #800000">result</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN><SPAN style="COLOR: #000000"><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">&lt;</SPAN><SPAN style="COLOR: #800000">interceptor-ref&nbsp;</SPAN><SPAN style="COLOR: #ff0000">name</SPAN><SPAN style="COLOR: #0000ff">="fileUpload"</SPAN><SPAN style="COLOR: #0000ff">/&gt;</SPAN><SPAN style="COLOR: #000000"><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">&lt;</SPAN><SPAN style="COLOR: #800000">interceptor-ref&nbsp;</SPAN><SPAN style="COLOR: #ff0000">name</SPAN><SPAN style="COLOR: #0000ff">="params"</SPAN><SPAN style="COLOR: #0000ff">/&gt;</SPAN><SPAN style="COLOR: #000000"><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">&lt;/</SPAN><SPAN style="COLOR: #800000">action</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN></DIV><BR>可是这样我还是不可以debug的时候发现uploadDirectory是null。不知道怎么回事情了。就到<A href="http://wiki.opensymphony.com/">http://wiki.opensymphony.com </A>来search了一下，没想到真有。<BR><A href="http://wiki.opensymphony.com/display/WW/How+do+I+get+static+parameters+into+my+action"><STRONG><SPAN class=pagetitle style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-TOP: 0px; TEXT-DECORATION: none">How do I get static parameters into my action</SPAN></STRONG></A><BR>这个就是我的问题。原来是要加上一个inteceptor。<BR>
<DIV style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><SPAN style="COLOR: #0000ff">&lt;</SPAN><SPAN style="COLOR: #800000">action&nbsp;</SPAN><SPAN style="COLOR: #ff0000">name</SPAN><SPAN style="COLOR: #0000ff">="fileupload"</SPAN><SPAN style="COLOR: #ff0000">&nbsp;class</SPAN><SPAN style="COLOR: #0000ff">="cn.com.fivefortunes.upload.FileUpload"</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN><SPAN style="COLOR: #000000"><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">&lt;</SPAN><SPAN style="COLOR: #800000">param&nbsp;</SPAN><SPAN style="COLOR: #ff0000">name</SPAN><SPAN style="COLOR: #0000ff">="uploadDirectory"</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN><SPAN style="COLOR: #000000">D:\tomcat5\webapps\files</SPAN><SPAN style="COLOR: #0000ff">&lt;/</SPAN><SPAN style="COLOR: #800000">param</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN><SPAN style="COLOR: #0000ff">&lt;!</SPAN><SPAN style="COLOR: #ff00ff">–&nbsp;D:\temp&nbsp;–</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN><SPAN style="COLOR: #000000"><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">&lt;</SPAN><SPAN style="COLOR: #800000">result&nbsp;</SPAN><SPAN style="COLOR: #ff0000">name</SPAN><SPAN style="COLOR: #0000ff">="success"</SPAN><SPAN style="COLOR: #ff0000">&nbsp;type</SPAN><SPAN style="COLOR: #0000ff">="freemarker"</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN><SPAN style="COLOR: #000000">/upload/upload.ftl</SPAN><SPAN style="COLOR: #0000ff">&lt;/</SPAN><SPAN style="COLOR: #800000">result</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN><SPAN style="COLOR: #000000"><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">&lt;</SPAN><SPAN style="COLOR: #800000">interceptor-ref&nbsp;</SPAN><SPAN style="COLOR: #ff0000">name</SPAN><SPAN style="COLOR: #0000ff">="fileUpload"</SPAN><SPAN style="COLOR: #0000ff">/&gt;</SPAN><SPAN style="COLOR: #000000"><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">&lt;</SPAN><SPAN style="COLOR: #800000">interceptor-ref&nbsp;</SPAN><SPAN style="COLOR: #ff0000">name</SPAN><SPAN style="COLOR: #0000ff">="params"</SPAN><SPAN style="COLOR: #0000ff">/&gt;</SPAN><SPAN style="COLOR: #000000"><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">&lt;</SPAN><SPAN style="COLOR: #800000">interceptor-ref&nbsp;</SPAN><SPAN style="COLOR: #ff0000">name</SPAN><SPAN style="COLOR: #0000ff">="static-params"</SPAN><SPAN style="COLOR: #0000ff">/&gt;</SPAN><SPAN style="COLOR: #000000"><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">&lt;/</SPAN><SPAN style="COLOR: #800000">action</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN></DIV><BR>这样就可以了。不过还是觉得不怎么爽。发布的时候还是要记得修改那个xwork的配置文件。<img src ="http://www.blogjava.net/rory/aggbug/35656.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rory/" target="_blank">莫多</a> 2006-03-16 15:26 <a href="http://www.blogjava.net/rory/archive/2006/03/16/35656.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>