<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet type='text/xsl' href='http://oxyc.spaces.live.com/mmm2008-07-24_12.50/rsspretty.aspx?rssquery=en-US;http%3a%2f%2foxyc.spaces.live.com%2ffeed.rss' version='1.0'?><rss version="2.0" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:msn="http://schemas.microsoft.com/msn/spaces/2005/rss" xmlns:live="http://schemas.microsoft.com/live/spaces/2006/rss" xmlns:dcterms="http://purl.org/dc/terms/" xmlns:cf="http://www.microsoft.com/schemas/rss/core/2005" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>蚯蚓</title><description>理想,现实,自由,人性,思想,分享,和谐,美丽</description><link>http://oxyc.spaces.live.com/</link><language>en-US</language><pubDate>Fri, 15 Aug 2008 14:58:55 GMT</pubDate><lastBuildDate>Fri, 15 Aug 2008 14:58:55 GMT</lastBuildDate><generator>Microsoft Spaces v1.1</generator><docs>http://www.rssboard.org/rss-specification</docs><ttl>60</ttl><live:identity><live:id>-1409798983858752950</live:id><live:alias>oxyc</live:alias></live:identity><image><title>蚯蚓</title><url>http://byfiles.storage.live.com/y1p9ILv26BXpLKqnEH_iRCniAIwcNYeHDBUHxEjXLmxKxyxrco2hMU48Z_G2v7y5we3</url><link>http://oxyc.spaces.live.com/</link></image><cf:listinfo><cf:group ns="http://schemas.microsoft.com/live/spaces/2006/rss" element="typelabel" label="Type" /><cf:group ns="http://schemas.microsoft.com/live/spaces/2006/rss" element="tag" label="Tag" /><cf:group element="category" label="Category" /><cf:sort element="pubDate" label="Date" data-type="date" default="true" /><cf:sort element="title" label="Title" data-type="string" /><cf:sort ns="http://purl.org/rss/1.0/modules/slash/" element="comments" label="Comments" data-type="number" /></cf:listinfo><item><title>终于实现了Tapestry4 EntityForm和QueryTable的组件化</title><link>http://oxyc.spaces.live.com/Blog/cns!EC6F634B2A64724A!324.entry</link><description>&lt;div&gt;取代以前的BaseEditPage 和 BaseListingPage 两个基础抽象类,所有的Page统一继承自 BasePage（自定义的继承自org.apache.tapestry.html.BasePage）&lt;/div&gt;
&lt;div&gt;实现BasePage的单一化&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;QueryTable的实现思路&lt;/div&gt;
&lt;div&gt;传入Query和Parameters 取代掉source参数,用Query和Parameters构建一个model提供给TableView&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;看下demo 类&lt;/div&gt;
&lt;div&gt;EmployeeList.java&lt;/div&gt;
&lt;div&gt;package app.demo.web.pages;&lt;/div&gt;
&lt;div&gt;import java.util.HashMap;&lt;br&gt;import java.util.Map;&lt;/div&gt;
&lt;div&gt;import org.apache.commons.lang.StringUtils;&lt;br&gt;import org.apache.tapestry.IRequestCycle;&lt;br&gt;import org.apache.tapestry.event.PageBeginRenderListener;&lt;br&gt;import org.apache.tapestry.event.PageEvent;&lt;/div&gt;
&lt;div&gt;import common.tapestry.components.table.QueryTable;&lt;br&gt;import common.tapestry.html.BasePage;&lt;/div&gt;
&lt;div&gt;public abstract class EmployeeList extends BasePage implements&lt;br&gt;  PageBeginRenderListener {&lt;br&gt; &lt;br&gt; public abstract String getName();&lt;/div&gt;
&lt;div&gt; public void pageBeginRender(PageEvent event) {&lt;br&gt; }&lt;/div&gt;
&lt;div&gt; QueryTable getTable_1() {&lt;br&gt;  return (QueryTable) getComponent(&amp;quot;table1&amp;quot;);&lt;br&gt; }&lt;/div&gt;
&lt;div&gt; public void doSubmit() {&lt;br&gt;  Map map = new HashMap();&lt;br&gt;  map.put(&amp;quot;A&amp;quot;, &amp;quot;1&amp;quot;);&lt;br&gt;  &lt;br&gt;  String hql = &amp;quot;select a from Employee a where 1=:A&amp;quot;;&lt;br&gt;  if(StringUtils.isNotBlank(getName())){&lt;br&gt;   hql = hql +&amp;quot; and a.Name like :name&amp;quot;;&lt;br&gt;   map.put(&amp;quot;name&amp;quot;, &amp;quot;%&amp;quot; + getName() +&amp;quot;%&amp;quot;);&lt;br&gt;  }&lt;br&gt;  getTable_1().setQueryAndParameters(hql, map);&lt;br&gt; }&lt;/div&gt;
&lt;div&gt; public void activateExternalPage(Object[] obj,IRequestCycle cycle){&lt;br&gt;  super.activateExternalPage(obj, cycle);&lt;br&gt;  getTable_1().setQueryAction(false);&lt;br&gt; }&lt;br&gt;}&lt;br&gt;&lt;/div&gt;
&lt;div&gt;html模板&lt;/div&gt;&amp;lt;t3 &lt;br&gt;jwcid=&amp;quot;&lt;a href="mailto:table1@ext:QueryTable"&gt;table1@ext:QueryTable&lt;/a&gt;&amp;quot; &lt;br&gt;title=&amp;quot;ognl:components.border.title&amp;quot; &lt;br&gt;columns=&amp;quot;a_Name:名字:Name,a_Age:年龄:Age,a_Remark:备注:Remark,a_Birthday:生日:Birthday,!Operate:操作:operate&amp;quot; class=&amp;quot;data_window&amp;quot; &lt;br&gt;cellSpacing=&amp;quot;1&amp;quot; cellPadding=&amp;quot;3&amp;quot; border=&amp;quot;0&amp;quot; pageSize=&amp;quot;10&amp;quot;&amp;gt;&lt;br&gt;&amp;lt;t3 jwcid=&amp;quot;&lt;a href="mailto:OperateColumnValue@Block"&gt;OperateColumnValue@Block&lt;/a&gt;&amp;quot;&amp;gt;&lt;br&gt;&amp;lt;a jwcid=&amp;quot;@ExternalLink&amp;quot; page=&amp;quot;EmployeeEdit&amp;quot; parameters=&amp;quot;ognl:{components.table1.row.Id}&amp;quot; &amp;gt; 查 看&amp;lt;/a&amp;gt;&lt;br&gt;&amp;lt;a jwcid=&amp;quot;&lt;a href="mailto:delete@ext:EntityDeleteLink"&gt;delete@ext:EntityDeleteLink&lt;/a&gt;&amp;quot; entity=&amp;quot;ognl:components.table1.row&amp;quot;&amp;gt;删除&amp;lt;/a&amp;gt;&lt;br&gt;&amp;lt;/t3&amp;gt;&lt;br&gt;&amp;lt;/t3&amp;gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt; &lt;/div&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=-1409798983858752950&amp;page=RSS%3a+%e7%bb%88%e4%ba%8e%e5%ae%9e%e7%8e%b0%e4%ba%86Tapestry4+EntityForm%e5%92%8cQueryTable%e7%9a%84%e7%bb%84%e4%bb%b6%e5%8c%96&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=oxyc.spaces.live.com&amp;amp;GT1=oxyc"&gt;</description><category>tips</category><comments>http://oxyc.spaces.live.com/Blog/cns!EC6F634B2A64724A!324.entry#comment</comments><guid isPermaLink="true">http://oxyc.spaces.live.com/Blog/cns!EC6F634B2A64724A!324.entry</guid><pubDate>Wed, 26 Mar 2008 08:03:35 GMT</pubDate><slash:comments>0</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://oxyc.spaces.live.com/blog/cns!EC6F634B2A64724A!324/comments/feed.rss</wfw:commentRss><wfw:comment>http://oxyc.spaces.live.com/Blog/cns!EC6F634B2A64724A!324.entry#comment</wfw:comment><dcterms:modified>2008-03-26T08:06:49Z</dcterms:modified></item><item><title>Extension Tapestry4`s restart service to clear my login cookies</title><link>http://oxyc.spaces.live.com/Blog/cns!EC6F634B2A64724A!321.entry</link><description>&lt;p&gt;接上篇,自定义一个logout service 把我的login cookies 清楚掉
&lt;p&gt;Tapestry .java
&lt;p&gt;package common.tapestry;
&lt;p&gt;public final  class Tapestry {&lt;br&gt;  public static final String LOGOUT_SERVICE = &amp;quot;logout&amp;quot;;&lt;br&gt;}
&lt;p&gt;LogoutService.java&lt;br&gt;package common.tapestry.engine;
&lt;p&gt;import java.io.IOException;
&lt;p&gt;import org.apache.tapestry.IRequestCycle;&lt;br&gt;import org.apache.tapestry.engine.RestartService;
&lt;p&gt;import common.tapestry.Tapestry;
&lt;p&gt;public class LogoutService extends RestartService {&lt;br&gt; private LoginCookiesManager loginCookiesManager;
&lt;p&gt;&lt;br&gt; public void setLoginCookiesManager(&lt;br&gt;   LoginCookiesManager loginCookiesManager) {&lt;br&gt;  this.loginCookiesManager = loginCookiesManager;&lt;br&gt; }
&lt;p&gt; public void service(IRequestCycle cycle) throws IOException {&lt;br&gt;  loginCookiesManager.removeCookies();&lt;br&gt;  super.service(cycle);&lt;br&gt; }
&lt;p&gt; public String getName() {&lt;br&gt;  return Tapestry.LOGOUT_SERVICE;&lt;br&gt; }&lt;br&gt;}
&lt;p&gt;hivemodule.xml&lt;br&gt;&amp;lt;?xml version=&amp;quot;1.0&amp;quot;?&amp;gt;&lt;br&gt;&amp;lt;module id=&amp;quot;common.tapestry&amp;quot; version=&amp;quot;1.0.0&amp;quot;&amp;gt;
&lt;p&gt; &amp;lt;!-- extends tapestry RestartService and clear the login cookies info--&amp;gt;&lt;br&gt;    &amp;lt;service-point id=&amp;quot;LogoutService&amp;quot; interface=&amp;quot;org.apache.tapestry.engine.IEngineService&amp;quot;&amp;gt;&lt;br&gt;        &amp;lt;invoke-factory&amp;gt;&lt;br&gt;            &amp;lt;construct class=&amp;quot;common.tapestry.engine.LogoutService&amp;quot;&amp;gt;&lt;br&gt;             &amp;lt;set-service property=&amp;quot;request&amp;quot; service-id=&amp;quot;tapestry.globals.HttpServletRequest&amp;quot; /&amp;gt;&lt;br&gt;                &amp;lt;set-service property=&amp;quot;response&amp;quot; service-id=&amp;quot;tapestry.globals.HttpServletResponse&amp;quot; /&amp;gt;&lt;br&gt;                &amp;lt;set-object property=&amp;quot;servletPath&amp;quot; value=&amp;quot;app-property:org.apache.tapestry.servlet-path&amp;quot; /&amp;gt;&lt;br&gt;                &amp;lt;set-object property=&amp;quot;linkFactory&amp;quot; value=&amp;quot;infrastructure:linkFactory&amp;quot; /&amp;gt;&lt;br&gt;                &amp;lt;set-object property=&amp;quot;loginCookiesManager&amp;quot; value=&amp;quot;service:common.tapestry.LoginCookiesManager&amp;quot;/&amp;gt;&lt;br&gt;             &amp;lt;/construct&amp;gt;&lt;br&gt;        &amp;lt;/invoke-factory&amp;gt;&lt;br&gt;    &amp;lt;/service-point&amp;gt;
&lt;p&gt;    &amp;lt;contribution configuration-id=&amp;quot;tapestry.services.ApplicationServices&amp;quot;&amp;gt;&lt;br&gt;        &amp;lt;service name=&amp;quot;logout&amp;quot; object=&amp;quot;service:common.tapestry.LogoutService&amp;quot; /&amp;gt;&lt;br&gt;    &amp;lt;/contribution&amp;gt;
&lt;p&gt;&amp;lt;/module&amp;gt;
&lt;p&gt;in your Pages&lt;br&gt;&amp;lt;a jwcid=&amp;quot;@ServiceLink&amp;quot; href=&amp;quot;#&amp;quot; service=&amp;quot;ognl:@common.tapestry.Tapestry@LOGOUT_SERVICE&amp;quot; target=&amp;quot;_top&amp;quot;&amp;gt;退出&amp;lt;/a&amp;gt;&lt;br&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=-1409798983858752950&amp;page=RSS%3a+Extension+Tapestry4%60s+restart+service+to+clear+my+login+cookies&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=oxyc.spaces.live.com&amp;amp;GT1=oxyc"&gt;</description><category>tips</category><comments>http://oxyc.spaces.live.com/Blog/cns!EC6F634B2A64724A!321.entry#comment</comments><guid isPermaLink="true">http://oxyc.spaces.live.com/Blog/cns!EC6F634B2A64724A!321.entry</guid><pubDate>Mon, 24 Mar 2008 06:38:11 GMT</pubDate><slash:comments>1</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://oxyc.spaces.live.com/blog/cns!EC6F634B2A64724A!321/comments/feed.rss</wfw:commentRss><wfw:comment>http://oxyc.spaces.live.com/Blog/cns!EC6F634B2A64724A!321.entry#comment</wfw:comment><dcterms:modified>2008-03-24T06:38:11Z</dcterms:modified></item><item><title>How to use cookies in tapestry4? my Tapestry4.1.5`LoginCookiesManagerImpl</title><link>http://oxyc.spaces.live.com/Blog/cns!EC6F634B2A64724A!319.entry</link><description>&lt;p&gt;How to use cookies in tapestry4? my Tapestry4.1.5`LoginCookiesManagerImpl
&lt;p&gt;思路&lt;br&gt;首先BasePage是需要登陆的 protected ,&lt;br&gt;BasePage实现org.apache.tapestry.event.PageValidateListener方法,判断asm对象Visit是否已经登陆&lt;br&gt;如没visit==null,去cookies找回用户名和密码从cycle中获得Login页面&lt;br&gt;Login页面实现common.tapestry.IConstructVisit接口。LoginPage登陆时保存用户名密码到cookies中,并对cookies的值加密,&lt;br&gt;cookies的key是baseUrl+key,取回时对cookies值解密,加密解密的password放到Application的meta信息中
&lt;p&gt;实现代码如下&lt;br&gt;抽象接口LoginCookiesManager
&lt;p&gt;package common.tapestry.engine;
&lt;p&gt;public interface LoginCookiesManager {&lt;br&gt; &lt;br&gt; String APPLICATION_META_KEY_DEFAULT_COOKIES_IS_ENCRYPTION = &amp;quot;common.tapestry.default-cookies-encrypt&amp;quot;;//是否需要加密,默认加密&lt;br&gt; String APPLICATION_META_KEY_DEFAULT_COOKIES_ENCRYPTION_KEY = &amp;quot;common.tapestry.default-cookies-encryption-key&amp;quot;;//加密的password
&lt;p&gt; public static final String COOKIES_KEY_LOGIN_USERNAME = &amp;quot;USERNAME&amp;quot;;&lt;br&gt; public static final String COOKIES_KEY_LOGIN_PASSWORD = &amp;quot;PASSWORD&amp;quot;;&lt;br&gt; &lt;br&gt; /**&lt;br&gt;  * 将用户名和密码写入cookies&lt;br&gt;  * @param username&lt;br&gt;  * @param password&lt;br&gt;  * @param maxAge&lt;br&gt;  */&lt;br&gt; void writeCookies(String username,String password,int maxAge);&lt;br&gt; /**&lt;br&gt;  * 清除用户名和密码cookies&lt;br&gt;  */&lt;br&gt; void removeCookies();&lt;br&gt; /**&lt;br&gt;  * 从cookies中获得用户名&lt;br&gt;  * @return&lt;br&gt;  */&lt;br&gt; String getUsername();&lt;br&gt; /**&lt;br&gt;  * 从cookies中获得密码&lt;br&gt;  * @return&lt;br&gt;  */&lt;br&gt; String getPassword();&lt;br&gt;}
&lt;p&gt;LoginCookiesManagerImpl 实现
&lt;p&gt;package common.tapestry.engine;
&lt;p&gt;import org.apache.hivemind.ApplicationRuntimeException;&lt;br&gt;import org.apache.tapestry.engine.IPropertySource;&lt;br&gt;import org.apache.tapestry.services.AbsoluteURLBuilder;&lt;br&gt;import org.apache.tapestry.services.CookieSource;&lt;br&gt;import org.apache.tapestry.web.WebRequest;&lt;br&gt;import org.jasypt.encryption.pbe.StandardPBEStringEncryptor;&lt;br&gt;import org.jasypt.exceptions.EncryptionOperationNotPossibleException;
&lt;p&gt;public class LoginCookiesManagerImpl implements LoginCookiesManager {&lt;br&gt; private static StandardPBEStringEncryptor standardPBEStringEncryptor = new StandardPBEStringEncryptor();&lt;br&gt; private IPropertySource applicationPropertySource;&lt;br&gt; private CookieSource cookieSource;&lt;br&gt; private WebRequest request;&lt;br&gt; private AbsoluteURLBuilder absoluteURLBuilder;
&lt;p&gt; public void setApplicationPropertySource(&lt;br&gt;   IPropertySource applicationPropertySource) {&lt;br&gt;  this.applicationPropertySource = applicationPropertySource;&lt;br&gt;  String encrypKey = getCookiesEncryptionKey();&lt;br&gt;  standardPBEStringEncryptor.setPassword(encrypKey);&lt;br&gt; }
&lt;p&gt; private String decrypt(String value) {&lt;br&gt;  String tmp = value;&lt;br&gt;  try {&lt;br&gt;   tmp = standardPBEStringEncryptor.decrypt(value);&lt;br&gt;  } catch (EncryptionOperationNotPossibleException e) {&lt;br&gt;   throw new ApplicationRuntimeException(&amp;quot;please clear your cookies&amp;quot;);&lt;br&gt;  }&lt;br&gt;  return tmp;&lt;br&gt; }
&lt;p&gt; private String encrypt(String value) {&lt;br&gt;  return standardPBEStringEncryptor.encrypt(value);&lt;br&gt; }
&lt;p&gt; private String getCookiesEncryptionKey() {&lt;br&gt;  String temp = applicationPropertySource&lt;br&gt;    .getPropertyValue(APPLICATION_META_KEY_DEFAULT_COOKIES_ENCRYPTION_KEY);&lt;br&gt;  return (temp != null) ? temp : &amp;quot;crypassword&amp;quot;;&lt;br&gt; }
&lt;p&gt; private boolean isCookiesEncryption() {&lt;br&gt;  String temp = applicationPropertySource&lt;br&gt;    .getPropertyValue(APPLICATION_META_KEY_DEFAULT_COOKIES_IS_ENCRYPTION);&lt;br&gt;  return (temp != null) ? Boolean.valueOf(temp).booleanValue() : true;&lt;br&gt; }
&lt;p&gt; public void removeCookies() {&lt;br&gt;  String cookiesKeyLogin_username = generateApplicationCookiesKey_Login__Username();&lt;br&gt;  String cookiesKeyLogin_password = generateApplicationCookiesKey_Login__Password();&lt;br&gt;  cookieSource.removeCookieValue(cookiesKeyLogin_username);&lt;br&gt;  cookieSource.removeCookieValue(cookiesKeyLogin_password);&lt;br&gt; }
&lt;p&gt; public void writeCookies(String username, String password, int maxAge) {&lt;br&gt;  writeCookiesValue_Login__Username(username, maxAge);&lt;br&gt;  writeCookiesValue_Login__Password(password, maxAge);&lt;br&gt; }
&lt;p&gt; public String getUsername() {&lt;br&gt;  String value = cookieSource&lt;br&gt;    .readCookieValue(generateApplicationCookiesKey_Login__Username());&lt;br&gt;  if (isCookiesEncryption()) {&lt;br&gt;   value = decrypt(value);&lt;br&gt;  }&lt;br&gt;  return value;&lt;br&gt; }
&lt;p&gt; public String getPassword() {&lt;br&gt;  String value = cookieSource&lt;br&gt;    .readCookieValue(generateApplicationCookiesKey_Login__Password());&lt;br&gt;  if (isCookiesEncryption()) {&lt;br&gt;   value = decrypt(value);&lt;br&gt;  }&lt;br&gt;  return value;&lt;br&gt; }
&lt;p&gt; private void writeCookiesValue_Login__Username(String username, int maxAge) {&lt;br&gt;  String key = generateApplicationCookiesKey_Login__Username();&lt;br&gt;  String value = username;&lt;br&gt;  if (isCookiesEncryption()) {&lt;br&gt;   value = encrypt(username);&lt;br&gt;  }&lt;br&gt;  cookieSource.writeCookieValue(key, value, maxAge);&lt;br&gt; }
&lt;p&gt; private void writeCookiesValue_Login__Password(String password, int maxAge) {&lt;br&gt;  String key = generateApplicationCookiesKey_Login__Password();&lt;br&gt;  String value = password;&lt;br&gt;  if (isCookiesEncryption()) {&lt;br&gt;   value = encrypt(password);&lt;br&gt;  }&lt;br&gt;  cookieSource.writeCookieValue(key, value, maxAge);&lt;br&gt; }
&lt;p&gt; private String generateApplicationCookiesKey_Login__Username() {&lt;br&gt;  return generateApplicationCookiesKey(COOKIES_KEY_LOGIN_USERNAME);&lt;br&gt; }
&lt;p&gt; private String generateApplicationCookiesKey_Login__Password() {&lt;br&gt;  return generateApplicationCookiesKey(COOKIES_KEY_LOGIN_PASSWORD);&lt;br&gt; }
&lt;p&gt; private String generateApplicationCookiesKey(String key) {&lt;br&gt;  String contextPath = request.getContextPath();&lt;br&gt;  return absoluteURLBuilder.constructURL(contextPath + &amp;quot;/&amp;quot;) + key;&lt;br&gt; }
&lt;p&gt; public void setCookieSource(CookieSource cookieSource) {&lt;br&gt;  this.cookieSource = cookieSource;&lt;br&gt; }
&lt;p&gt; public void setRequest(WebRequest request) {&lt;br&gt;  this.request = request;&lt;br&gt; }
&lt;p&gt; public void setAbsoluteURLBuilder(AbsoluteURLBuilder absoluteURLBuilder) {&lt;br&gt;  this.absoluteURLBuilder = absoluteURLBuilder;&lt;br&gt; }
&lt;p&gt;}
&lt;p&gt;hivemodule.xml配置
&lt;p&gt;&amp;lt;?xml version=&amp;quot;1.0&amp;quot;?&amp;gt;&lt;br&gt;&amp;lt;module id=&amp;quot;common.tapestry&amp;quot; version=&amp;quot;1.0.0&amp;quot;&amp;gt;&lt;br&gt;&amp;lt;service-point id=&amp;quot;LoginCookiesManager&amp;quot; interface=&amp;quot;common.tapestry.engine.LoginCookiesManager&amp;quot;&amp;gt;&lt;br&gt;&amp;lt;invoke-factory&amp;gt;&lt;br&gt;   &amp;lt;construct class=&amp;quot;common.tapestry.engine.LoginCookiesManagerImpl&amp;quot; &amp;gt;&lt;br&gt;     &amp;lt;set-object property=&amp;quot;cookieSource&amp;quot; value=&amp;quot;infrastructure:cookieSource&amp;quot;/&amp;gt;&lt;br&gt;     &amp;lt;set-service property=&amp;quot;absoluteURLBuilder&amp;quot; service-id=&amp;quot;tapestry.request.AbsoluteURLBuilder&amp;quot;/&amp;gt;&lt;br&gt;              &amp;lt;set-service property=&amp;quot;request&amp;quot; service-id=&amp;quot;tapestry.globals.WebRequest&amp;quot;/&amp;gt;   &lt;br&gt;              &amp;lt;set-object property=&amp;quot;applicationPropertySource&amp;quot; value=&amp;quot;service:tapestry.props.ApplicationPropertySource&amp;quot;/&amp;gt;              &lt;br&gt;      &amp;lt;/construct&amp;gt;&lt;br&gt;  &amp;lt;/invoke-factory&amp;gt; &lt;br&gt;&amp;lt;/service-point&amp;gt;
&lt;p&gt;&amp;lt;contribution configuration-id=&amp;quot;tapestry.Infrastructure&amp;quot;&amp;gt;&lt;br&gt;    &amp;lt;property name=&amp;quot;loginCookiesManager&amp;quot; object=&amp;quot;service:common.tapestry.LoginCookiesManager&amp;quot;/&amp;gt;&lt;br&gt;&amp;lt;/contribution&amp;gt;&lt;br&gt;&amp;lt;/module&amp;gt;
&lt;p&gt;使用
&lt;p&gt;在BasePage中获得该service
&lt;p&gt;public LoginCookiesManager getLoginCookiesManager() {&lt;br&gt;  LoginCookiesManager svc = (LoginCookiesManager) getRequestCycle().getInfrastructure().getProperty(&amp;quot;loginCookiesManager&amp;quot;);&lt;br&gt;  return svc;&lt;br&gt; }&lt;br&gt; &lt;br&gt;/**&lt;br&gt;  * 判断用户是否已经登陆&lt;br&gt;  * &lt;br&gt;  * @return&lt;br&gt;  */&lt;br&gt; private boolean isUserLoggedIn() {&lt;br&gt;  Object asmVisit = this.getRequestCycle().getInfrastructure().getApplicationStateManager().get(ASM_VISIT);
&lt;p&gt;  if (!(asmVisit instanceof IVisit)) {&lt;br&gt;   throw new ApplicationRuntimeException(&lt;br&gt;     &amp;quot;The visit class must implements &amp;quot; + IVisit.class);&lt;br&gt;  }&lt;br&gt;  IVisit visit = (IVisit) asmVisit;&lt;br&gt;  if (visit == null || (visit != null &amp;amp;&amp;amp; !visit.isLoggedIn())) {&lt;br&gt;   IPage loginPage = getRequestCycle().getPage(PAGE_LOGIN);&lt;br&gt;   if (loginPage instanceof IConstructVisit) {&lt;br&gt;    //从cookies中找回用户名和密码&lt;br&gt;    String cookiesLoginUsername = getLoginCookiesManager().getUsername();&lt;br&gt;    String cookiesLoginPassword = getLoginCookiesManager().getPassword();&lt;br&gt;    IConstructVisit constructVisit = (IConstructVisit) loginPage;&lt;br&gt;    visit = constructVisit.doConstructVisit(this.getRequestCycle(),&lt;br&gt;      cookiesLoginUsername, cookiesLoginPassword);&lt;br&gt;   } else {&lt;br&gt;    throw new ApplicationRuntimeException(&amp;quot;The &amp;quot; + PAGE_LOGIN&lt;br&gt;      + &amp;quot; class must implements &amp;quot; + IConstructVisit.class);&lt;br&gt;   }&lt;br&gt;  }&lt;br&gt;  if (visit == null)&lt;br&gt;   return Boolean.FALSE.booleanValue();&lt;br&gt;  return visit.isLoggedIn();&lt;br&gt; } 
&lt;p&gt;&lt;br&gt;Login类必须实现如下接口&lt;br&gt;package common.tapestry;
&lt;p&gt;import org.apache.tapestry.IRequestCycle;
&lt;p&gt;public interface IConstructVisit {&lt;br&gt; public IVisit doConstructVisit(IRequestCycle cycle, String username,String password);&lt;br&gt;}
&lt;p&gt; &lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=-1409798983858752950&amp;page=RSS%3a+How+to+use+cookies+in+tapestry4%3f+my+Tapestry4.1.5%60LoginCookiesManagerImpl&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=oxyc.spaces.live.com&amp;amp;GT1=oxyc"&gt;</description><category>tips</category><comments>http://oxyc.spaces.live.com/Blog/cns!EC6F634B2A64724A!319.entry#comment</comments><guid isPermaLink="true">http://oxyc.spaces.live.com/Blog/cns!EC6F634B2A64724A!319.entry</guid><pubDate>Mon, 24 Mar 2008 06:23:52 GMT</pubDate><slash:comments>1</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://oxyc.spaces.live.com/blog/cns!EC6F634B2A64724A!319/comments/feed.rss</wfw:commentRss><wfw:comment>http://oxyc.spaces.live.com/Blog/cns!EC6F634B2A64724A!319.entry#comment</wfw:comment><dcterms:modified>2008-03-24T06:23:52Z</dcterms:modified></item><item><title>Tapestry4.1.5`s common Base Border Component</title><link>http://oxyc.spaces.live.com/Blog/cns!EC6F634B2A64724A!318.entry</link><description>&lt;p&gt;Tapestry4.1.5`s common Base Border Component 
&lt;p&gt;考虑到每个项目都必须具有Border组件,所以把这个组件提到Base项目的ext组件库&lt;br&gt;但是每个项目的基本css又各不相同,这个css可以使用Tapestry的meta提供给Border&lt;br&gt;我在{yourTapestyServlet}.application中增加&lt;br&gt;&amp;lt;meta key=&amp;quot;common.tapestry.components.border.stylesheets&amp;quot; value=&amp;quot;css/POJO*.css,css/sys*.css&amp;quot;/&amp;gt;&lt;br&gt;其value是一个通配符表达式,灵感来源于spring的加载*.xml的写法,&amp;quot;,&amp;quot;号分割多个匹配 
&lt;p&gt;来看我们的Border.jwc规范 
&lt;p&gt;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br&gt;&amp;lt;!DOCTYPE component-specification PUBLIC&lt;br&gt;  &amp;quot;-//Apache Software Foundation//Tapestry Specification 4.0//EN&amp;quot;&lt;br&gt;  &amp;quot;&lt;a href="http://jakarta.apache.org/tapestry/dtd/Tapestry_4_0.dtd"&gt;http://jakarta.apache.org/tapestry/dtd/Tapestry_4_0.dtd&lt;/a&gt;&amp;quot;&amp;gt; 
&lt;p&gt;&amp;lt;component-specification allow-body=&amp;quot;yes&amp;quot; allow-informal-parameters=&amp;quot;no&amp;quot; class=&amp;quot;common.tapestry.components.Border&amp;quot;&amp;gt;                         &lt;br&gt;&amp;lt;parameter name=&amp;quot;title&amp;quot;/&amp;gt;&lt;br&gt;&amp;lt;parameter name=&amp;quot;ajaxDelegate&amp;quot;/&amp;gt; 
&lt;p&gt;&amp;lt;component id=&amp;quot;shell&amp;quot; type=&amp;quot;Shell&amp;quot;&amp;gt;&lt;br&gt;    &amp;lt;binding name=&amp;quot;title&amp;quot; value=&amp;quot;ognl:title+' - '+messages.getMessage('appname')&amp;quot;/&amp;gt;&lt;br&gt;    &amp;lt;binding name=&amp;quot;doctype&amp;quot; value=&amp;quot;literal:html PUBLIC &amp;amp;quot;-//W3C//DTD XHTML 1.0 Transitional//EN&amp;amp;quot; &amp;amp;quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&amp;amp;quot;&amp;quot; /&amp;gt;&lt;br&gt; &amp;lt;binding name=&amp;quot;delegate&amp;quot; value=&amp;quot;new org.apache.tapestry.components.BlockRenderer(components.remainingHead)&amp;quot;/&amp;gt;&lt;br&gt;    &amp;lt;binding name=&amp;quot;renderBaseTag&amp;quot; value=&amp;quot;ognl:false&amp;quot; /&amp;gt;&lt;br&gt;    &amp;lt;binding name=&amp;quot;disableTapestryMeta&amp;quot; value=&amp;quot;ognl:true&amp;quot; /&amp;gt;&lt;br&gt;    &amp;lt;inherited-binding name=&amp;quot;ajaxDelegate&amp;quot; parameter-name=&amp;quot;ajaxDelegate&amp;quot; /&amp;gt;&lt;br&gt;    &amp;lt;binding name=&amp;quot;stylesheets&amp;quot; value=&amp;quot;ognl:stylesheets&amp;quot;/&amp;gt;    &lt;br&gt;&amp;lt;/component&amp;gt; 
&lt;p&gt;&amp;lt;inject property=&amp;quot;httpServletRequest&amp;quot; object=&amp;quot;service:tapestry.globals.HttpServletRequest&amp;quot;/&amp;gt;&lt;br&gt;&amp;lt;inject property=&amp;quot;webContext&amp;quot; object=&amp;quot;service:tapestry.globals.WebContext&amp;quot;/&amp;gt; 
&lt;p&gt;&amp;lt;!--&lt;br&gt;&amp;lt;inject property=&amp;quot;stylesheetResource&amp;quot; type=&amp;quot;meta&amp;quot; object=&amp;quot;common.tapestry.components.border.stylesheets&amp;quot;/&amp;gt;&lt;br&gt;--&amp;gt;&lt;br&gt;&amp;lt;/component-specification&amp;gt; 
&lt;p&gt;html模板 
&lt;p&gt;&amp;lt;html jwcid=&amp;quot;shell&amp;quot;&amp;gt;&lt;br&gt;&amp;lt;head jwcid=&amp;quot;&lt;a href="mailto:remainingHead@Block"&gt;remainingHead@Block&lt;/a&gt;&amp;quot;&amp;gt;&lt;br&gt;&amp;lt;meta http-equiv=&amp;quot;Content-Type&amp;quot; content=&amp;quot;text/html; charset=UTF-8&amp;quot; /&amp;gt;&lt;br&gt;&amp;lt;/head&amp;gt;&lt;br&gt;&amp;lt;body jwcid=&amp;quot;@Body&amp;quot;&amp;gt;&lt;br&gt;&amp;lt;span jwcid=&amp;quot;@RenderBody&amp;quot;/&amp;gt;&lt;br&gt;&amp;lt;/body&amp;gt;&lt;br&gt;&amp;lt;/html&amp;gt; 
&lt;p&gt;&lt;br&gt;Border.java 
&lt;p&gt;package common.tapestry.components; 
&lt;p&gt;import java.io.IOException;&lt;br&gt;import java.util.ArrayList;&lt;br&gt;import java.util.List; 
&lt;p&gt;import javax.servlet.ServletContext;&lt;br&gt;import javax.servlet.http.HttpServletRequest; 
&lt;p&gt;import org.apache.tapestry.BaseComponent;&lt;br&gt;import org.apache.tapestry.IAsset;&lt;br&gt;import org.apache.tapestry.asset.ContextAsset;&lt;br&gt;import org.apache.tapestry.web.WebContext;&lt;br&gt;import org.apache.tapestry.web.WebContextResource;&lt;br&gt;import org.springframework.core.io.Resource;&lt;br&gt;import org.springframework.web.context.support.ServletContextResource;&lt;br&gt;import org.springframework.web.context.support.ServletContextResourcePatternResolver; 
&lt;p&gt;public abstract class Border extends BaseComponent {&lt;br&gt; // public abstract String getStylesheetResource(); //inject meta can`not&lt;br&gt; // use? 
&lt;p&gt; public abstract HttpServletRequest getHttpServletRequest(); 
&lt;p&gt; public abstract WebContext getWebContext(); 
&lt;p&gt; public static final String APPLICATION_META_KEY_DEFAULT_BORDER_STYLE = &amp;quot;common.tapestry.components.border.stylesheets&amp;quot;;&lt;br&gt; public static final String DEFAULT_STYLESHEET_RESOURCE = &amp;quot;css/system_*.css&amp;quot;; 
&lt;p&gt; public String getStylesheetResource() {&lt;br&gt;  String tmp = getPage().getRequestCycle().getInfrastructure()&lt;br&gt;    .getApplicationPropertySource().getPropertyValue(&lt;br&gt;      APPLICATION_META_KEY_DEFAULT_BORDER_STYLE);&lt;br&gt;  return (tmp != null) ? tmp : DEFAULT_STYLESHEET_RESOURCE;&lt;br&gt; } 
&lt;p&gt; public abstract IAsset[] getCssAsset(); 
&lt;p&gt; public abstract void setCssAsset(IAsset[] oo); 
&lt;p&gt; public IAsset[] getStylesheets() { 
&lt;p&gt;  if (getCssAsset() == null) { 
&lt;p&gt;   String _stylesheetResource = (getStylesheetResource() != null) ? getStylesheetResource()&lt;br&gt;     : DEFAULT_STYLESHEET_RESOURCE;&lt;br&gt;   List list = new ArrayList();&lt;br&gt;   ServletContext _servletContext = getHttpServletRequest()&lt;br&gt;     .getSession().getServletContext();&lt;br&gt;   ServletContextResourcePatternResolver servletContextResourcePatternResolver = new ServletContextResourcePatternResolver(&lt;br&gt;     _servletContext); 
&lt;p&gt;   String[] _stylesheetResources = _stylesheetResource.split(&amp;quot;,&amp;quot;); 
&lt;p&gt;   for (int i = 0; i &amp;lt; _stylesheetResources.length; i++) { 
&lt;p&gt;    try {&lt;br&gt;     Resource[] resources = servletContextResourcePatternResolver&lt;br&gt;       .getResources(_stylesheetResources[i]); 
&lt;p&gt;     for (int j = 0; j &amp;lt; resources.length; j++) {&lt;br&gt;      ServletContextResource resource = (ServletContextResource) resources[j]; 
&lt;p&gt;      WebContextResource _resourceLocation = new WebContextResource(&lt;br&gt;        getWebContext(), resource.getPath());&lt;br&gt;      IAsset asset = new ContextAsset(&lt;br&gt;        common.tapestry.TapestryUtils&lt;br&gt;          .getContextPath(getPage()&lt;br&gt;            .getRequestCycle()),&lt;br&gt;        _resourceLocation, getLocation(), getPage()&lt;br&gt;          .getRequestCycle());&lt;br&gt;      list.add(asset);&lt;br&gt;     } 
&lt;p&gt;    } catch (IOException e) {&lt;br&gt;     e.printStackTrace();&lt;br&gt;    }&lt;br&gt;   } 
&lt;p&gt;IAsset[] tmp = (IAsset[])list.toArray(new IAsset[list.size()]);&lt;br&gt;   setCssAsset(tmp);&lt;br&gt;  }&lt;br&gt;  return getCssAsset();&lt;br&gt; }&lt;br&gt;}&lt;br&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=-1409798983858752950&amp;page=RSS%3a+Tapestry4.1.5%60s+common+Base+Border+Component&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=oxyc.spaces.live.com&amp;amp;GT1=oxyc"&gt;</description><category>tips</category><comments>http://oxyc.spaces.live.com/Blog/cns!EC6F634B2A64724A!318.entry#comment</comments><guid isPermaLink="true">http://oxyc.spaces.live.com/Blog/cns!EC6F634B2A64724A!318.entry</guid><pubDate>Mon, 24 Mar 2008 02:59:26 GMT</pubDate><slash:comments>0</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://oxyc.spaces.live.com/blog/cns!EC6F634B2A64724A!318/comments/feed.rss</wfw:commentRss><wfw:comment>http://oxyc.spaces.live.com/Blog/cns!EC6F634B2A64724A!318.entry#comment</wfw:comment><dcterms:modified>2008-03-25T00:41:30Z</dcterms:modified></item><item><title>Tapestry4.1.5 how to inject spring`s bean to pages</title><link>http://oxyc.spaces.live.com/Blog/cns!EC6F634B2A64724A!312.entry</link><description>&lt;p&gt;Tapestry4.1.5 how to inject spring`s bean to pages 
&lt;p&gt;1、in web.xml config spring 
&lt;p&gt;&amp;lt;context-param&amp;gt;&lt;br&gt;    &amp;lt;param-name&amp;gt;contextConfigLocation&amp;lt;/param-name&amp;gt;&lt;br&gt;    &amp;lt;param-value&amp;gt;classpath:applicationContext.xml&amp;lt;/param-value&amp;gt;&lt;br&gt;&amp;lt;/context-param&amp;gt; 
&lt;p&gt;&amp;lt;listener&amp;gt;&amp;lt;listener-class&amp;gt;org.springframework.web.context.ContextLoaderListener&amp;lt;/listener-class&amp;gt;&amp;lt;/listener&amp;gt; 
&lt;p&gt;2、put the tapestry-spring-1.0.0.jar to your classpath&lt;br&gt;you can download here&lt;br&gt;&lt;a href="http://howardlewisship.com/tapestry-javaforge/tapestry-spring/"&gt;http://howardlewisship.com/tapestry-javaforge/tapestry-spring/&lt;/a&gt; 
&lt;p&gt;&lt;br&gt;ok you can use  &amp;lt;inject property=&amp;quot;userInfoService&amp;quot; object=&amp;quot;spring:userInfoService&amp;quot;/&amp;gt; in your .page file &lt;br&gt;or use Annotations inject the service 
&lt;p&gt;but how to get the spring`s beans in the java code ? &lt;br&gt;-------------------------------------------------------------- 
&lt;p&gt;3、config your ${yourApp}/WEB-INF/hivemodule.xml 
&lt;p&gt;&amp;lt;contribution configuration-id=&amp;quot;tapestry.Infrastructure&amp;quot;&amp;gt;&lt;br&gt;    &amp;lt;property name=&amp;quot;springObjectProvider&amp;quot; object=&amp;quot;service:hivemind.lib.SpringObjectProvider&amp;quot;/&amp;gt;&lt;br&gt;&amp;lt;/contribution&amp;gt; 
&lt;p&gt;put the springObjectProvider to the tapestry.Infrastructure 
&lt;p&gt;ok in your code you can 
&lt;p&gt;org.apache.hivemind.service.ObjectProvider springprovider springprovider = (ObjectProvider) infrastructure.getProperty(&amp;quot;springprovider&amp;quot;); 
&lt;p&gt;YourSpringBean yourSpringBean = (YourSpringBean)springprovider.provideObject(null, null, yourSpringBeanId, null); 
&lt;p&gt;  
&lt;p&gt;  
&lt;div&gt;&lt;/div&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=-1409798983858752950&amp;page=RSS%3a+Tapestry4.1.5+how+to+inject+spring%60s+bean+to+pages&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=oxyc.spaces.live.com&amp;amp;GT1=oxyc"&gt;</description><category>tips</category><comments>http://oxyc.spaces.live.com/Blog/cns!EC6F634B2A64724A!312.entry#comment</comments><guid isPermaLink="true">http://oxyc.spaces.live.com/Blog/cns!EC6F634B2A64724A!312.entry</guid><pubDate>Fri, 21 Mar 2008 01:45:36 GMT</pubDate><slash:comments>0</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://oxyc.spaces.live.com/blog/cns!EC6F634B2A64724A!312/comments/feed.rss</wfw:commentRss><wfw:comment>http://oxyc.spaces.live.com/Blog/cns!EC6F634B2A64724A!312.entry#comment</wfw:comment><dcterms:modified>2008-03-21T01:48:21Z</dcterms:modified></item><item><title>皮鞋又坏了</title><link>http://oxyc.spaces.live.com/Blog/cns!EC6F634B2A64724A!311.entry</link><description>&lt;div&gt;皮鞋又坏了，该买新的了&lt;/div&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=-1409798983858752950&amp;page=RSS%3a+%e7%9a%ae%e9%9e%8b%e5%8f%88%e5%9d%8f%e4%ba%86&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=oxyc.spaces.live.com&amp;amp;GT1=oxyc"&gt;</description><category>生活</category><comments>http://oxyc.spaces.live.com/Blog/cns!EC6F634B2A64724A!311.entry#comment</comments><guid isPermaLink="true">http://oxyc.spaces.live.com/Blog/cns!EC6F634B2A64724A!311.entry</guid><pubDate>Fri, 21 Mar 2008 01:31:06 GMT</pubDate><slash:comments>0</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://oxyc.spaces.live.com/blog/cns!EC6F634B2A64724A!311/comments/feed.rss</wfw:commentRss><wfw:comment>http://oxyc.spaces.live.com/Blog/cns!EC6F634B2A64724A!311.entry#comment</wfw:comment><dcterms:modified>2008-03-21T01:31:06Z</dcterms:modified></item><item><title>Tapestry5的无侵入式框架实现use Annotations?</title><link>http://oxyc.spaces.live.com/Blog/cns!EC6F634B2A64724A!304.entry</link><description>&lt;div&gt;Tapestry5称使用JDK5的Annotations实现无侵入式的框架，我看起来Annotations依然是侵入到了类,:(&lt;/div&gt;
&lt;div&gt;敏捷的思维正在一步步渗透到Java Framework中,现在不仅要求类与类之间要解藕，类和Framework之间也要解耦,&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;途径:1)硬编码,extends/implements&lt;/div&gt;
&lt;div&gt;      2)xml&lt;/div&gt;
&lt;div&gt;      3)Framework的实践约定,比如说 public void **doActionListener(),方法名称的匹配说明了这是个Action监听器,够敏捷吧&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;我期待的Tapestry Control BackingBean是更纯的Java类,看来这个实现除了xml + implments,只剩下Framework的约定才能实现了,毕竟不用xml,不用Annotations,不用extends/implements 你得告诉Framework container 这个BackingBean 是怎么跟template粘起来的!&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=-1409798983858752950&amp;page=RSS%3a+Tapestry5%e7%9a%84%e6%97%a0%e4%be%b5%e5%85%a5%e5%bc%8f%e6%a1%86%e6%9e%b6%e5%ae%9e%e7%8e%b0use+Annotations%3f&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=oxyc.spaces.live.com&amp;amp;GT1=oxyc"&gt;</description><category>tips</category><comments>http://oxyc.spaces.live.com/Blog/cns!EC6F634B2A64724A!304.entry#comment</comments><guid isPermaLink="true">http://oxyc.spaces.live.com/Blog/cns!EC6F634B2A64724A!304.entry</guid><pubDate>Mon, 14 May 2007 14:14:18 GMT</pubDate><slash:comments>0</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://oxyc.spaces.live.com/blog/cns!EC6F634B2A64724A!304/comments/feed.rss</wfw:commentRss><wfw:comment>http://oxyc.spaces.live.com/Blog/cns!EC6F634B2A64724A!304.entry#comment</wfw:comment><dcterms:modified>2007-05-14T14:14:18Z</dcterms:modified></item><item><title>革命</title><link>http://oxyc.spaces.live.com/Blog/cns!EC6F634B2A64724A!303.entry</link><description>&lt;div&gt;
&lt;p style="text-indent:2em"&gt;“在我们力图改善文明这个整体的种种努力中，我们还必须始终在这个给定的整体中进行工作，旨在点滴建设，而不是全盘的建构，并在发展的每一个阶段中都运用既有的历史材料，一步一步地改进细节，而不是力图重新建设这个整体。”
&lt;p style="text-indent:2em"&gt;——著名政治思想家弗里德里希·冯·哈耶克&lt;/div&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=-1409798983858752950&amp;page=RSS%3a+%e9%9d%a9%e5%91%bd&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=oxyc.spaces.live.com&amp;amp;GT1=oxyc"&gt;</description><category>兴趣</category><comments>http://oxyc.spaces.live.com/Blog/cns!EC6F634B2A64724A!303.entry#comment</comments><guid isPermaLink="true">http://oxyc.spaces.live.com/Blog/cns!EC6F634B2A64724A!303.entry</guid><pubDate>Sun, 06 May 2007 03:56:18 GMT</pubDate><slash:comments>0</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://oxyc.spaces.live.com/blog/cns!EC6F634B2A64724A!303/comments/feed.rss</wfw:commentRss><wfw:comment>http://oxyc.spaces.live.com/Blog/cns!EC6F634B2A64724A!303.entry#comment</wfw:comment><dcterms:modified>2007-05-06T03:56:18Z</dcterms:modified></item><item><title>DAO exception/business exception 粒度</title><link>http://oxyc.spaces.live.com/Blog/cns!EC6F634B2A64724A!302.entry</link><description>&lt;div&gt;Interface UserInfo{&lt;/div&gt;
&lt;div&gt;public void login(String userName,String password) throw Exception/RuntimeException/or CustomException/or CustomRuntimeException&lt;/div&gt;
&lt;div&gt;}&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;UserNotFonundException extends Exception ?&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;PassWordWorngException ?&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;Whe in Action/listener&lt;/div&gt;
&lt;div&gt;use try{&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;}catch(){&lt;/div&gt;
&lt;div&gt;          throw new ApplicationRuntimeException(e.getMessage());&lt;/div&gt;
&lt;div&gt;}&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;困惑中~&lt;/div&gt;
&lt;div&gt;Exception handling in DAOs&lt;a&gt;&lt;span&gt;&lt;font face=Arial size=4&gt;&lt;/font&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt; &lt;a href="http://www-128.ibm.com/developerworks/java/library/j-dao/"&gt;http://www-128.ibm.com/developerworks/java/library/j-dao/&lt;/a&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=-1409798983858752950&amp;page=RSS%3a+DAO+exception%2fbusiness+exception+%e7%b2%92%e5%ba%a6&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=oxyc.spaces.live.com&amp;amp;GT1=oxyc"&gt;</description><category>计算机与 Internet</category><comments>http://oxyc.spaces.live.com/Blog/cns!EC6F634B2A64724A!302.entry#comment</comments><guid isPermaLink="true">http://oxyc.spaces.live.com/Blog/cns!EC6F634B2A64724A!302.entry</guid><pubDate>Sat, 28 Apr 2007 13:13:22 GMT</pubDate><slash:comments>0</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://oxyc.spaces.live.com/blog/cns!EC6F634B2A64724A!302/comments/feed.rss</wfw:commentRss><wfw:comment>http://oxyc.spaces.live.com/Blog/cns!EC6F634B2A64724A!302.entry#comment</wfw:comment><dcterms:modified>2007-04-28T13:14:50Z</dcterms:modified></item><item><title>DAO / Service层的划分</title><link>http://oxyc.spaces.live.com/Blog/cns!EC6F634B2A64724A!301.entry</link><description>&lt;div&gt;由于Hibernate等ORM映射tools的出现,DAO并不在直接跟数据库RDB打交道，而是多了 应用服务器持久层，从广义上讲RDB也算是持久，&lt;/div&gt;
&lt;div&gt;应用服务器对象持久层 是为了能管理ORM映射的对象的状态和周期而存在的&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;DAO ---&amp;gt; Persisent  ----&amp;gt;RDB&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=-1409798983858752950&amp;page=RSS%3a+DAO+%2f+Service%e5%b1%82%e7%9a%84%e5%88%92%e5%88%86&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=oxyc.spaces.live.com&amp;amp;GT1=oxyc"&gt;</description><category>计算机与 Internet</category><comments>http://oxyc.spaces.live.com/Blog/cns!EC6F634B2A64724A!301.entry#comment</comments><guid isPermaLink="true">http://oxyc.spaces.live.com/Blog/cns!EC6F634B2A64724A!301.entry</guid><pubDate>Sat, 28 Apr 2007 13:07:34 GMT</pubDate><slash:comments>0</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://oxyc.spaces.live.com/blog/cns!EC6F634B2A64724A!301/comments/feed.rss</wfw:commentRss><wfw:comment>http://oxyc.spaces.live.com/Blog/cns!EC6F634B2A64724A!301.entry#comment</wfw:comment><dcterms:modified>2007-04-28T13:07:34Z</dcterms:modified></item><item><title>When customEditorConfigurer  depend on propertyConfigurer</title><link>http://oxyc.spaces.live.com/Blog/cns!EC6F634B2A64724A!300.entry</link><description>&lt;div&gt; &amp;lt;bean id=&amp;quot;propertyConfigurer&amp;quot;&lt;br&gt;  class=&amp;quot;org.springframework.beans.factory.config.PropertyPlaceholderConfigurer&amp;quot;&amp;gt;&lt;br&gt;    &amp;lt;property name=&amp;quot;locations&amp;quot;&amp;gt;&lt;br&gt;   &amp;lt;list&amp;gt;&lt;br&gt;    &amp;lt;value&amp;gt;classpath*:jdbc-dev.properties&amp;lt;/value&amp;gt;&lt;br&gt;   &amp;lt;/list&amp;gt;&lt;br&gt;  &amp;lt;/property&amp;gt;&lt;br&gt; &amp;lt;/bean&amp;gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;在BeanFactory载入所有Bean后，实例化Bean前，对BeanFactor做一些后处理工作，PropertyPlaceholderConfiger和CustomEditorConfigurer是SpringFrameWork自定义的BeanFactoryPostProcessor.&lt;br&gt;
&lt;div&gt;某一个CustomEditorConfigurer依赖Datasource,Datasource依赖propertyConfigurer&lt;/div&gt;
&lt;div&gt;这时候propertyConfigurer没有生效&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;抛出错误&lt;/div&gt;
&lt;div&gt;org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'customEditorConfigurer' defined in file [D:\eclipse-SDK-3.2.1-win32\workspace\study\web\WEB-INF\classes\applicationContext-acegi-security.xml]: Cannot create inner bean 'acegi.security.service.impl.DataSourceMethodDefinitionSourceEditor#f38b42' of type [acegi.security.service.impl.DataSourceMethodDefinitionSourceEditor] while setting bean property 'customEditors' with key [TypedStringValue: value [org.acegisecurity.intercept.method.MethodDefinitionSource], target type [null]]; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'acegi.security.service.impl.DataSourceMethodDefinitionSourceEditor#f38b42' defined in file [D:\eclipse-SDK-3.2.1-win32\workspace\study\web\WEB-INF\classes\applicationContext-acegi-security.xml]: Cannot resolve reference to bean 'jdbcTemplate' while setting bean property 'jdbcTemplate'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'jdbcTemplate' defined in file [D:\eclipse-SDK-3.2.1-win32\workspace\study\web\WEB-INF\classes\applicationContext-acegi-security.xml]: Cannot resolve reference to bean 'dataSource' while setting bean property 'dataSource'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dataSource' defined in file [D:\eclipse-SDK-3.2.1-win32\workspace\study\web\WEB-INF\classes\applicationContext-datasource.xml]: Error setting property values; nested exception is org.springframework.beans.PropertyBatchUpdateException; nested PropertyAccessExceptions (1) are:&lt;br&gt;PropertyAccessException 1: org.springframework.beans.MethodInvocationException: Property 'driverClass' threw exception; nested exception is java.beans.PropertyVetoException: Could not locate driver class with name '${jdbc.driverClassName}'.&lt;br&gt;Caused by: &lt;br&gt;org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'acegi.security.service.impl.DataSourceMethodDefinitionSourceEditor#f38b42' defined in file [D:\eclipse-SDK-3.2.1-win32\workspace\study\web\WEB-INF\classes\applicationContext-acegi-security.xml]: Cannot resolve reference to bean 'jdbcTemplate' while setting bean property 'jdbcTemplate'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'jdbcTemplate' defined in file [D:\eclipse-SDK-3.2.1-win32\workspace\study\web\WEB-INF\classes\applicationContext-acegi-security.xml]: Cannot resolve reference to bean 'dataSource' while setting bean property 'dataSource'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dataSource' defined in file [D:\eclipse-SDK-3.2.1-win32\workspace\study\web\WEB-INF\classes\applicationContext-datasource.xml]: Error setting property values; nested exception is org.springframework.beans.PropertyBatchUpdateException; nested PropertyAccessExceptions (1) are:&lt;br&gt;PropertyAccessException 1: org.springframework.beans.MethodInvocationException: Property 'driverClass' threw exception; nested exception is java.beans.PropertyVetoException: Could not locate driver class with name '${jdbc.driverClassName}'.&lt;br&gt;Caused by: &lt;br&gt;org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'jdbcTemplate' defined in file [D:\eclipse-SDK-3.2.1-win32\workspace\study\web\WEB-INF\classes\applicationContext-acegi-security.xml]: Cannot resolve reference to bean 'dataSource' while setting bean property 'dataSource'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dataSource' defined in file [D:\eclipse-SDK-3.2.1-win32\workspace\study\web\WEB-INF\classes\applicationContext-datasource.xml]: Error setting property values; nested exception is org.springframework.beans.PropertyBatchUpdateException; nested PropertyAccessExceptions (1) are:&lt;br&gt;PropertyAccessException 1: org.springframework.beans.MethodInvocationException: Property 'driverClass' threw exception; nested exception is java.beans.PropertyVetoException: Could not locate driver class with name '${jdbc.driverClassName}'.&lt;br&gt;Caused by: &lt;br&gt;org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dataSource' defined in file [D:\eclipse-SDK-3.2.1-win32\workspace\study\web\WEB-INF\classes\applicationContext-datasource.xml]: Error setting property values; nested exception is org.springframework.beans.PropertyBatchUpdateException; nested PropertyAccessExceptions (1) are:&lt;br&gt;PropertyAccessException 1: org.springframework.beans.MethodInvocationException: Property 'driverClass' threw exception; nested exception is java.beans.PropertyVetoException: Could not locate driver class with name '${jdbc.driverClassName}'.&lt;br&gt;Caused by: &lt;br&gt;org.springframework.beans.PropertyBatchUpdateException; nested PropertyAccessException details (1) are:&lt;br&gt;PropertyAccessException 1:&lt;br&gt;org.springframework.beans.MethodInvocationException: Property 'driverClass' threw exception; nested exception is java.beans.PropertyVetoException: Could not locate driver class with name '${jdbc.driverClassName}'.&lt;br&gt;Caused by: &lt;br&gt;java.beans.PropertyVetoException: Could not locate driver class with name '${jdbc.driverClassName}'.&lt;br&gt; at com.mchange.v2.c3p0.DriverManagerDataSource$1.vetoableChange(DriverManagerDataSource.java:68)&lt;br&gt; at java.beans.VetoableChangeSupport.fireVetoableChange(VetoableChangeSupport.java:300)&lt;br&gt; at java.beans.VetoableChangeSupport.fireVetoableChange(VetoableChangeSupport.java:217)&lt;br&gt; at com.mchange.v2.c3p0.impl.DriverManagerDataSourceBase.setDriverClass(DriverManagerDataSourceBase.java:65)&lt;br&gt; at com.mchange.v2.c3p0.ComboPooledDataSource.setDriverClass(ComboPooledDataSource.java:119)&lt;br&gt; at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)&lt;br&gt; at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)&lt;br&gt; at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)&lt;br&gt; at java.lang.reflect.Method.invoke(Method.java:324)&lt;br&gt; at org.springframework.beans.BeanWrapperImpl.setPropertyValue(BeanWrapperImpl.java:821)&lt;br&gt; at org.springframework.beans.BeanWrapperImpl.setPropertyValue(BeanWrapperImpl.java:645)&lt;br&gt; at org.springframework.beans.AbstractPropertyAccessor.setPropertyValues(AbstractPropertyAccessor.java:78)&lt;br&gt; at org.springframework.beans.AbstractPropertyAccessor.setPropertyValues(AbstractPropertyAccessor.java:59)&lt;br&gt; at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1100)&lt;br&gt; at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:835)&lt;br&gt; at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:423)&lt;br&gt; at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:251)&lt;br&gt; at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:144)&lt;br&gt; at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:248)&lt;br&gt; at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:160)&lt;br&gt; at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:261)&lt;br&gt; at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:109)&lt;br&gt; at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1073)&lt;br&gt; at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:835)&lt;br&gt; at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:423)&lt;br&gt; at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:251)&lt;br&gt; at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:144)&lt;br&gt; at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:248)&lt;br&gt; at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:160)&lt;br&gt; at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:261)&lt;br&gt; at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:109)&lt;br&gt; at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1073)&lt;br&gt; at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:835)&lt;br&gt; at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:423)&lt;br&gt; at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveInnerBean(BeanDefinitionValueResolver.java:215)&lt;br&gt; at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:122)&lt;br&gt; at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveManagedMap(BeanDefinitionValueResolver.java:314)&lt;br&gt; at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:139)&lt;br&gt; at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1073)&lt;br&gt; at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:835)&lt;br&gt; at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:423)&lt;br&gt; at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:251)&lt;br&gt; at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:144)&lt;br&gt; at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:248)&lt;br&gt; at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:160)&lt;br&gt; at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:426)&lt;br&gt; at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:342)&lt;br&gt; at org.springframework.web.context.ContextLoader.createWebApplicationContext(ContextLoader.java:241)&lt;br&gt; at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:184)&lt;br&gt; at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:49)&lt;br&gt; at weblogic.servlet.internal.WebAppServletContext$FireContextListenerAction.run(WebAppServletContext.java:6515)&lt;br&gt; at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321)&lt;br&gt; at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:118)&lt;br&gt; at weblogic.servlet.internal.WebAppServletContext.notifyCreated(WebAppServletContext.java:1666)&lt;br&gt; at weblogic.servlet.internal.WebAppServletContext.preloadResources(WebAppServletContext.java:3203)&lt;br&gt; at weblogic.servlet.internal.HttpServer.preloadResources(HttpServer.java:694)&lt;br&gt; at weblogic.servlet.internal.WebService.preloadResources(WebService.java:483)&lt;br&gt; at weblogic.servlet.internal.ServletInitService.resume(ServletInitService.java:30)&lt;br&gt; at weblogic.t3.srvr.SubsystemManager.resume(SubsystemManager.java:131)&lt;br&gt; at weblogic.t3.srvr.T3Srvr.resume(T3Srvr.java:966)&lt;br&gt; at weblogic.t3.srvr.T3Srvr.run(T3Srvr.java:361)&lt;br&gt; at weblogic.Server.main(Server.java:32)&lt;br&gt;&amp;lt;2007-4-23 下午09时38分10秒 CST&amp;gt; &amp;lt;Warning&amp;gt; &amp;lt;HTTP&amp;gt; &amp;lt;BEA-101162&amp;gt; &amp;lt;User defined listener org.springframework.web.context.ContextLoaderListener failed: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'customEditorConfigurer' defined in file [D:\eclipse-SDK-3.2.1-win32\workspace\study\web\WEB-INF\classes\applicationContext-acegi-security.xml]: Cannot create inner bean 'acegi.security.service.impl.DataSourceMethodDefinitionSourceEditor#f38b42' of type [acegi.security.service.impl.DataSourceMethodDefinitionSourceEditor] while setting bean property 'customEditors' with key [TypedStringValue: value [org.acegisecurity.intercept.method.MethodDefinitionSource], target type [null]]; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'acegi.security.service.impl.DataSourceMethodDefinitionSourceEditor#f38b42' defined in file [D:\eclipse-SDK-3.2.1-win32\workspace\study\web\WEB-INF\classes\applicationContext-acegi-security.xml]: Cannot resolve reference to bean 'jdbcTemplate' while setting bean property 'jdbcTemplate'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'jdbcTemplate' defined in file [D:\eclipse-SDK-3.2.1-win32\workspace\study\web\WEB-INF\classes\applicationContext-acegi-security.xml]: Cannot resolve reference to bean 'dataSource' while setting bean property 'dataSource'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dataSource' defined in file [D:\eclipse-SDK-3.2.1-win32\workspace\study\web\WEB-INF\classes\applicationContext-datasource.xml]: Error setting property values; nested exception is org.springframework.beans.PropertyBatchUpdateException; nested PropertyAccessExceptions (1) are:&lt;br&gt;PropertyAccessException 1: org.springframework.beans.MethodInvocationException: Property 'driverClass' threw exception; nested exception is java.beans.PropertyVetoException: Could not locate driver class with name '${jdbc.driverClassName}'..&amp;gt; &lt;br&gt;2007-04-23 21:38:10,609 DEBUG -  - HttpSessionEventPublisher - Received ServletContextEvent: javax.servlet.ServletContextEvent[source=ServletContext(id=31277299,name=web,context-path=/study)]&lt;br&gt;&amp;lt;2007-4-23 下午09时38分10秒 CST&amp;gt; &amp;lt;Warning&amp;gt; &amp;lt;HTTP&amp;gt; &amp;lt;BEA-101162&amp;gt; &amp;lt;User defined listener org.acegisecurity.ui.session.HttpSessionEventPublisher failed: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'customEditorConfigurer' defined in file [D:\eclipse-SDK-3.2.1-win32\workspace\study\web\WEB-INF\classes\applicationContext-acegi-security.xml]: Cannot create inner bean 'acegi.security.service.impl.DataSourceMethodDefinitionSourceEditor#f38b42' of type [acegi.security.service.impl.DataSourceMethodDefinitionSourceEditor] while setting bean property 'customEditors' with key [TypedStringValue: value [org.acegisecurity.intercept.method.MethodDefinitionSource], target type [null]]; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'acegi.security.service.impl.DataSourceMethodDefinitionSourceEditor#f38b42' defined in file [D:\eclipse-SDK-3.2.1-win32\workspace\study\web\WEB-INF\classes\applicationContext-acegi-security.xml]: Cannot resolve reference to bean 'jdbcTemplate' while setting bean property 'jdbcTemplate'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'jdbcTemplate' defined in file [D:\eclipse-SDK-3.2.1-win32\workspace\study\web\WEB-INF\classes\applicationContext-acegi-security.xml]: Cannot resolve reference to bean 'dataSource' while setting bean property 'dataSource'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dataSource' defined in file [D:\eclipse-SDK-3.2.1-win32\workspace\study\web\WEB-INF\classes\applicationContext-datasource.xml]: Error setting property values; nested exception is org.springframework.beans.PropertyBatchUpdateException; nested PropertyAccessExceptions (1) are:&lt;br&gt;PropertyAccessException 1: org.springframework.beans.MethodInvocationException: Property 'driverClass' threw exception; nested exception is java.beans.PropertyVetoException: Could not locate driver class with name '${jdbc.driverClassName}'..&amp;gt; &lt;br&gt;&amp;lt;2007-4-23 下午09时38分10秒 CST&amp;gt; &amp;lt;Error&amp;gt; &amp;lt;HTTP&amp;gt; &amp;lt;BEA-101165&amp;gt; &amp;lt;Could not load user defined filter in web.xml: org.acegisecurity.util.FilterToBeanProxy.&lt;br&gt;org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'customEditorConfigurer' defined in file [D:\eclipse-SDK-3.2.1-win32\workspace\study\web\WEB-INF\classes\applicationContext-acegi-security.xml]: Cannot create inner bean 'acegi.security.service.impl.DataSourceMethodDefinitionSourceEditor#f38b42' of type [acegi.security.service.impl.DataSourceMethodDefinitionSourceEditor] while setting bean property 'customEditors' with key [TypedStringValue: value [org.acegisecurity.intercept.method.MethodDefinitionSource], target type [null]]; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'acegi.security.service.impl.DataSourceMethodDefinitionSourceEditor#f38b42' defined in file [D:\eclipse-SDK-3.2.1-win32\workspace\study\web\WEB-INF\classes\applicationContext-acegi-security.xml]: Cannot resolve reference to bean 'jdbcTemplate' while setting bean property 'jdbcTemplate'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'jdbcTemplate' defined in file [D:\eclipse-SDK-3.2.1-win32\workspace\study\web\WEB-INF\classes\applicationContext-acegi-security.xml]: Cannot resolve reference to bean 'dataSource' while setting bean property 'dataSource'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dataSource' defined in file [D:\eclipse-SDK-3.2.1-win32\workspace\study\web\WEB-INF\classes\applicationContext-datasource.xml]: Error setting property values; nested exception is org.springframework.beans.PropertyBatchUpdateException; nested PropertyAccessExceptions (1) are:&lt;br&gt;PropertyAccessException 1: org.springframework.beans.MethodInvocationException: Property 'driverClass' threw exception; nested exception is java.beans.PropertyVetoException: Could not locate driver class with name '${jdbc.driverClassName}'.&lt;br&gt;Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'acegi.security.service.impl.DataSourceMethodDefinitionSourceEditor#f38b42' defined in file [D:\eclipse-SDK-3.2.1-win32\workspace\study\web\WEB-INF\classes\applicationContext-acegi-security.xml]: Cannot resolve reference to bean 'jdbcTemplate' while setting bean property 'jdbcTemplate'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'jdbcTemplate' defined in file [D:\eclipse-SDK-3.2.1-win32\workspace\study\web\WEB-INF\classes\applicationContext-acegi-security.xml]: Cannot resolve reference to bean 'dataSource' while setting bean property 'dataSource'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dataSource' defined in file [D:\eclipse-SDK-3.2.1-win32\workspace\study\web\WEB-INF\classes\applicationContext-datasource.xml]: Error setting property values; nested exception is org.springframework.beans.PropertyBatchUpdateException; nested PropertyAccessExceptions (1) are:&lt;br&gt;PropertyAccessException 1: org.springframework.beans.MethodInvocationException: Property 'driverClass' threw exception; nested exception is java.beans.PropertyVetoException: Could not locate driver class with name '${jdbc.driverClassName}'.&lt;br&gt;Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'jdbcTemplate' defined in file [D:\eclipse-SDK-3.2.1-win32\workspace\study\web\WEB-INF\classes\applicationContext-acegi-security.xml]: Cannot resolve reference to bean 'dataSource' while setting bean property 'dataSource'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dataSource' defined in file [D:\eclipse-SDK-3.2.1-win32\workspace\study\web\WEB-INF\classes\applicationContext-datasource.xml]: Error setting property values; nested exception is org.springframework.beans.PropertyBatchUpdateException; nested PropertyAccessExceptions (1) are:&lt;br&gt;PropertyAccessException 1: org.springframework.beans.MethodInvocationException: Property 'driverClass' threw exception; nested exception is java.beans.PropertyVetoException: Could not locate driver class with name '${jdbc.driverClassName}'.&lt;br&gt;Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dataSource' defined in file [D:\eclipse-SDK-3.2.1-win32\workspace\study\web\WEB-INF\classes\applicationContext-datasource.xml]: Error setting property values; nested exception is org.springframework.beans.PropertyBatchUpdateException; nested PropertyAccessExceptions (1) are:&lt;br&gt;PropertyAccessException 1: org.springframework.beans.MethodInvocationException: Property 'driverClass' threw exception; nested exception is java.beans.PropertyVetoException: Could not locate driver class with name '${jdbc.driverClassName}'.&lt;br&gt;Caused by: org.springframework.beans.PropertyBatchUpdateException; nested PropertyAccessException details (1) are:&lt;br&gt;PropertyAccessException 1:&lt;br&gt;org.springframework.beans.MethodInvocationException: Property 'driverClass' threw exception; nested exception is java.beans.PropertyVetoException: Could not locate driver class with name '${jdbc.driverClassName}'.&lt;br&gt;Caused by: java.beans.PropertyVetoException: Could not locate driver class with name '${jdbc.driverClassName}'.&lt;br&gt; at com.mchange.v2.c3p0.DriverManagerDataSource$1.vetoableChange(DriverManagerDataSource.java:68)&lt;br&gt; at java.beans.VetoableChangeSupport.fireVetoableChange(VetoableChangeSupport.java:300)&lt;br&gt; at java.beans.VetoableChangeSupport.fireVetoableChange(VetoableChangeSupport.java:217)&lt;br&gt; at com.mchange.v2.c3p0.impl.DriverManagerDataSourceBase.setDriverClass(DriverManagerDataSourceBase.java:65)&lt;br&gt; at com.mchange.v2.c3p0.ComboPooledDataSource.setDriverClass(ComboPooledDataSource.java:119)&lt;br&gt; at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)&lt;br&gt; at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)&lt;br&gt; at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)&lt;br&gt; at java.lang.reflect.Method.invoke(Method.java:324)&lt;br&gt; at org.springframework.beans.BeanWrapperImpl.setPropertyValue(BeanWrapperImpl.java:821)&lt;br&gt; at org.springframework.beans.BeanWrapperImpl.setPropertyValue(BeanWrapperImpl.java:645)&lt;br&gt; at org.springframework.beans.AbstractPropertyAccessor.setPropertyValues(AbstractPropertyAccessor.java:78)&lt;br&gt; at org.springframework.beans.AbstractPropertyAccessor.setPropertyValues(AbstractPropertyAccessor.java:59)&lt;br&gt; at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1100)&lt;br&gt; at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:835)&lt;br&gt; at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:423)&lt;br&gt; at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:251)&lt;br&gt; at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:144)&lt;br&gt; at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:248)&lt;br&gt; at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:160)&lt;br&gt; at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:261)&lt;br&gt; at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:109)&lt;br&gt; at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1073)&lt;br&gt; at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:835)&lt;br&gt; at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:423)&lt;br&gt; at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:251)&lt;br&gt; at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:144)&lt;br&gt; at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:248)&lt;br&gt; at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:160)&lt;br&gt; at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:261)&lt;br&gt; at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:109)&lt;br&gt; at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1073)&lt;br&gt; at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:835)&lt;br&gt; at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:423)&lt;br&gt; at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveInnerBean(BeanDefinitionValueResolver.java:215)&lt;br&gt; at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:122)&lt;br&gt; at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveManagedMap(BeanDefinitionValueResolver.java:314)&lt;br&gt; at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:139)&lt;br&gt; at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1073)&lt;br&gt; at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:835)&lt;br&gt; at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:423)&lt;br&gt; at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:251)&lt;br&gt; at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:144)&lt;br&gt; at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:248)&lt;br&gt; at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:160)&lt;br&gt; at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:426)&lt;br&gt; at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:342)&lt;br&gt; at org.springframework.web.context.ContextLoader.createWebApplicationContext(ContextLoader.java:241)&lt;br&gt; at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:184)&lt;br&gt; at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:49)&lt;br&gt; at weblogic.servlet.internal.WebAppServletContext$FireContextListenerAction.run(WebAppServletContext.java:6515)&lt;br&gt; at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321)&lt;br&gt; at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:118)&lt;br&gt; at weblogic.servlet.internal.WebAppServletContext.notifyCreated(WebAppServletContext.java:1666)&lt;br&gt; at weblogic.servlet.internal.WebAppServletContext.preloadResources(WebAppServletContext.java:3203)&lt;br&gt; at weblogic.servlet.internal.HttpServer.preloadResources(HttpServer.java:694)&lt;br&gt; at weblogic.servlet.internal.WebService.preloadResources(WebService.java:483)&lt;br&gt; at weblogic.servlet.internal.ServletInitService.resume(ServletInitService.java:30)&lt;br&gt; at weblogic.t3.srvr.SubsystemManager.resume(SubsystemManager.java:131)&lt;br&gt; at weblogic.t3.srvr.T3Srvr.resume(T3Srvr.java:966)&lt;br&gt; at weblogic.t3.srvr.T3Srvr.run(T3Srvr.java:361)&lt;br&gt; at weblogic.Server.main(Server.java:32)&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=-1409798983858752950&amp;page=RSS%3a+When+customEditorConfigurer++depend+on+propertyConfigurer&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=oxyc.spaces.live.com&amp;amp;GT1=oxyc"&gt;</description><category>计算机与 Internet</category><comments>http://oxyc.spaces.live.com/Blog/cns!EC6F634B2A64724A!300.entry#comment</comments><guid isPermaLink="true">http://oxyc.spaces.live.com/Blog/cns!EC6F634B2A64724A!300.entry</guid><pubDate>Mon, 23 Apr 2007 14:20:35 GMT</pubDate><slash:comments>0</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://oxyc.spaces.live.com/blog/cns!EC6F634B2A64724A!300/comments/feed.rss</wfw:commentRss><wfw:comment>http://oxyc.spaces.live.com/Blog/cns!EC6F634B2A64724A!300.entry#comment</wfw:comment><dcterms:modified>2007-04-23T14:20:35Z</dcterms:modified></item><item><title>利用org.apache.commons.io.FileUtils快速读写文件</title><link>http://oxyc.spaces.live.com/Blog/cns!EC6F634B2A64724A!296.entry</link><description>&lt;div&gt;String fileName = &amp;quot;C://11.txt&amp;quot;;&lt;br&gt;  File file = new File(fileName);&lt;br&gt;  String fileContent = &amp;quot;&amp;quot;;&lt;br&gt;  try {&lt;br&gt;   fileContent = org.apache.commons.io.FileUtils.readFileToString(file, &amp;quot;GBK&amp;quot;);&lt;br&gt;  } catch (IOException e) {&lt;br&gt;   e.printStackTrace();&lt;br&gt;  }&lt;br&gt;  fileContent +=&amp;quot;Helloworld&amp;quot;;&lt;br&gt;  try {&lt;br&gt;   org.apache.commons.io.FileUtils.writeStringToFile(file, fileContent, &amp;quot;GBK&amp;quot;);&lt;br&gt;  } catch (IOException e) {&lt;br&gt;   e.printStackTrace();&lt;br&gt;  }&lt;/div&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=-1409798983858752950&amp;page=RSS%3a+%e5%88%a9%e7%94%a8org.apache.commons.io.FileUtils%e5%bf%ab%e9%80%9f%e8%af%bb%e5%86%99%e6%96%87%e4%bb%b6&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=oxyc.spaces.live.com&amp;amp;GT1=oxyc"&gt;</description><category>tips</category><comments>http://oxyc.spaces.live.com/Blog/cns!EC6F634B2A64724A!296.entry#comment</comments><guid isPermaLink="true">http://oxyc.spaces.live.com/Blog/cns!EC6F634B2A64724A!296.entry</guid><pubDate>Tue, 27 Mar 2007 04:45:12 GMT</pubDate><slash:comments>0</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://oxyc.spaces.live.com/blog/cns!EC6F634B2A64724A!296/comments/feed.rss</wfw:commentRss><wfw:comment>http://oxyc.spaces.live.com/Blog/cns!EC6F634B2A64724A!296.entry#comment</wfw:comment><dcterms:modified>2007-03-27T04:45:12Z</dcterms:modified></item><item><title>Tapestry4Localization本地/国际化</title><link>http://oxyc.spaces.live.com/Blog/cns!EC6F634B2A64724A!294.entry</link><description>&lt;div&gt;1、方法1 -- 使用Tapestry内置message&lt;/div&gt;
&lt;div&gt;1)Home.html&lt;br&gt;&amp;lt;span jwcid=&amp;quot;@Insert&amp;quot; value=&amp;quot;message:required&amp;quot;/&amp;gt; //使用message前缀&lt;/div&gt;
&lt;div&gt;或者使用ognl:messages&lt;/div&gt;
&lt;div&gt;&amp;lt;span jwcid=&amp;quot;@Insert&amp;quot; value=&amp;quot;ognl:messages.format('required', '第{0}个元素','第{1}个元素')&amp;quot;/&amp;gt;&lt;/div&gt;
&lt;div&gt;不建议使用&lt;br&gt;&amp;lt;span jwcid=&amp;quot;@Insert&amp;quot; value=&amp;quot;ognl:getMessage('required')&amp;quot;/&amp;gt;&lt;br&gt;因为getMessage方法在T4中被@deprecated&lt;/div&gt;
&lt;div&gt;-----the key 'title'---- will be first find in Home_zh.properties or Home.properties&lt;/div&gt;
&lt;div&gt;if in Home.properties can not be founded&lt;/div&gt;
&lt;div&gt;it will find WEB-INF/myapp.properties, &lt;br&gt;The specification may also have a message catalog; for instance, &lt;br&gt;for WEB-INF/myapp.application, &lt;br&gt;the files would be named WEB-INF/myapp.properties, &lt;br&gt;etc. Again, the name of the file is based on the servlet name (&amp;quot;myapp&amp;quot;). &lt;/div&gt;
&lt;div&gt;2)&lt;br&gt;myapp_zh.properties&lt;br&gt;required=\u8bf7\u8f93\u5165{0}\u7684\u503c{1}&lt;/div&gt;
&lt;div&gt;3)&lt;br&gt;Home_zh.properties&lt;br&gt;required=\u8bf7\u8f93\u5165{0}\u7684\u503c{1}&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;2、方法2 --使用spring的MessageSource&lt;br&gt;1)利用spring加载messges_*local.properties&lt;br&gt; &amp;lt;bean id=&amp;quot;messageSource&amp;quot; class=&amp;quot;org.springframework.context.support.ResourceBundleMessageSource&amp;quot;&amp;gt; &lt;br&gt;  &amp;lt;!--&amp;lt;property name=&amp;quot;basename&amp;quot; value=&amp;quot;classpath:messages&amp;quot;/&amp;gt;--&amp;gt;&lt;br&gt;   &amp;lt;property name=&amp;quot;basenames&amp;quot;&amp;gt;&lt;br&gt;      &amp;lt;list&amp;gt;&lt;br&gt;        &amp;lt;value&amp;gt;classpath:messages&amp;lt;/value&amp;gt;&lt;br&gt;      &amp;lt;/list&amp;gt;&lt;br&gt;    &amp;lt;/property&amp;gt;  &lt;br&gt; &amp;lt;/bean&amp;gt;&lt;br&gt;把messageSource注入到Tapestry Components/Pages中&lt;/div&gt;
&lt;div&gt;2)BasePage.java&lt;/div&gt;
&lt;div&gt;import org.springframework.context.MessageSource;&lt;/div&gt;
&lt;div&gt;public abstract BasePage extends org.apache.tapestry.html.BasePage{&lt;/div&gt;
&lt;div&gt; public abstract MessageSource getMessageSource();&lt;br&gt;  //need inject //or direct impl it;&lt;br&gt;  &lt;br&gt;  &lt;br&gt;}&lt;/div&gt;
&lt;div&gt;&lt;br&gt;3)HomePage.java extends BasePage.java&lt;/div&gt;
&lt;div&gt;4)Home.page&lt;br&gt;  &amp;lt;inject property=&amp;quot;messageSource&amp;quot; object=&amp;quot;spring:messageSource&amp;quot; /&amp;gt;&lt;br&gt;5)Home.html&lt;/div&gt;
&lt;div&gt;&amp;lt;span jwcid=&amp;quot;@Insert&amp;quot; value=&amp;quot;ognl:messageSource.getMessage('required',new java.lang.Object [] {'Login','!'}, 'Default', null)&amp;quot;/&amp;gt;&lt;/div&gt;
&lt;div&gt;6)messges_zh.properties&lt;br&gt;required=\u8bf7\u8f93\u5165{0}\u7684\u503c{1}&lt;br&gt;------------------------------------------------------------------&lt;br&gt;7)或者再封装以下&lt;br&gt;public abstract BasePage extends org.apache.tapestry.html.BasePage{&lt;br&gt; public abstract MessageSource getMessageSource();&lt;br&gt; public String getCustomMessage(java.lang.String arg0,java.lang.Object[] arg1,java.lang.String arg2,java.util.Locale arg3){&lt;br&gt;  return this.getMessageSource().getMessage(arg0,arg1,arg2,arg3);&lt;br&gt; }&lt;br&gt;}&lt;br&gt;then in the Home.html&lt;/div&gt;
&lt;div&gt;&amp;lt;span jwcid=&amp;quot;@Insert&amp;quot; value=&amp;quot;ognl:getCustomMessage('required',new java.lang.Object [] {'Login','!'}, 'Default', null)&amp;quot;/&amp;gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt; &lt;/div&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=-1409798983858752950&amp;page=RSS%3a+Tapestry4Localization%e6%9c%ac%e5%9c%b0%2f%e5%9b%bd%e9%99%85%e5%8c%96&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=oxyc.spaces.live.com&amp;amp;GT1=oxyc"&gt;</description><category>计算机与 Internet</category><comments>http://oxyc.spaces.live.com/Blog/cns!EC6F634B2A64724A!294.entry#comment</comments><guid isPermaLink="true">http://oxyc.spaces.live.com/Blog/cns!EC6F634B2A64724A!294.entry</guid><pubDate>Tue, 27 Mar 2007 02:03:16 GMT</pubDate><slash:comments>0</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://oxyc.spaces.live.com/blog/cns!EC6F634B2A64724A!294/comments/feed.rss</wfw:commentRss><wfw:comment>http://oxyc.spaces.live.com/Blog/cns!EC6F634B2A64724A!294.entry#comment</wfw:comment><dcterms:modified>2007-03-27T02:03:16Z</dcterms:modified></item><item><title>在web application 调用Spring的Beanfactory</title><link>http://oxyc.spaces.live.com/Blog/cns!EC6F634B2A64724A!293.entry</link><description>&lt;div&gt;1)配置web.xml&lt;br&gt;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br&gt;&amp;lt;!DOCTYPE web-app&lt;br&gt;    PUBLIC &amp;quot;-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN&amp;quot;&lt;br&gt;    &amp;quot;&lt;a href="http://java.sun.com/dtd/web-app_2_3.dtd"&gt;http://java.sun.com/dtd/web-app_2_3.dtd&lt;/a&gt;&amp;quot;&amp;gt;&lt;br&gt;&amp;lt;web-app&amp;gt;&lt;br&gt; &amp;lt;context-param&amp;gt;&lt;br&gt;  &amp;lt;param-name&amp;gt;contextConfigLocation&amp;lt;/param-name&amp;gt;&lt;br&gt;     &amp;lt;!-- 配置加载的bean factory xml --&amp;gt;&lt;br&gt;  &amp;lt;param-value&amp;gt;&lt;br&gt;   WEB-INF/applicationContext*.xml&lt;br&gt;   classpath:applicationContext-datasource.xml&lt;br&gt;   classpath:applicationContext-hibernate.xml&lt;br&gt;   classpath:applicationContext-dao.xml&lt;br&gt;   classpath:applicationContext-service.xml&lt;br&gt;  &amp;lt;/param-value&amp;gt;&lt;br&gt; &amp;lt;/context-param&amp;gt;&lt;br&gt; &amp;lt;listener&amp;gt;&lt;br&gt;  &amp;lt;listener-class&amp;gt;&lt;br&gt;   org.springframework.web.context.ContextLoaderListener&lt;br&gt;  &amp;lt;/listener-class&amp;gt;&lt;br&gt; &amp;lt;/listener&amp;gt;&lt;br&gt;&amp;lt;/web-app&amp;gt;&lt;/div&gt;
&lt;div&gt;2)Jsp页面中调用spring&lt;br&gt;&amp;lt;%&lt;br&gt;org.springframework.beans.factory.BeanFactory beanFactory = (org.springframework.beans.factory.BeanFactory) &lt;br&gt;pageContext.getServletContext().getAttribute(org.springframework.web.context.WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE);&lt;/div&gt;
&lt;div&gt;%&amp;gt;&lt;br&gt;3)Servlet中调用spring&lt;/div&gt;
&lt;div&gt;ServletContext context = this.getServletContext();&lt;br&gt;org.springframework.beans.factory.BeanFactory beanFactory = (org.springframework.beans.factory.BeanFactory) &lt;br&gt;context.getAttribute(org.springframework.web.context.WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE);&lt;/div&gt;
&lt;div&gt;4)ClassPath加载&lt;/div&gt;
&lt;div&gt;ApplicationContext beanFactory = new ClassPathXmlApplicationContext(&lt;br&gt;    new String[] { &amp;quot;applicationContext-datasource.xml&amp;quot;,&lt;br&gt;      &amp;quot;applicationContext-hibernate.xml&amp;quot;,&lt;br&gt;      &amp;quot;applicationContext-service-freemarker.xml&amp;quot;,&lt;br&gt;      &amp;quot;applicationContext-service.xml&amp;quot;&lt;/div&gt;
&lt;div&gt;    });&lt;br&gt;&lt;/div&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=-1409798983858752950&amp;page=RSS%3a+%e5%9c%a8web+application+%e8%b0%83%e7%94%a8Spring%e7%9a%84Beanfactory&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=oxyc.spaces.live.com&amp;amp;GT1=oxyc"&gt;</description><category>烂笔头</category><comments>http://oxyc.spaces.live.com/Blog/cns!EC6F634B2A64724A!293.entry#comment</comments><guid isPermaLink="true">http://oxyc.spaces.live.com/Blog/cns!EC6F634B2A64724A!293.entry</guid><pubDate>Tue, 27 Mar 2007 01:53:42 GMT</pubDate><slash:comments>0</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://oxyc.spaces.live.com/blog/cns!EC6F634B2A64724A!293/comments/feed.rss</wfw:commentRss><wfw:comment>http://oxyc.spaces.live.com/Blog/cns!EC6F634B2A64724A!293.entry#comment</wfw:comment><dcterms:modified>2007-03-27T04:39:07Z</dcterms:modified></item><item><title>ActiveRecord or 贫血的POJO</title><link>http://oxyc.spaces.live.com/Blog/cns!EC6F634B2A64724A!291.entry</link><description>&lt;div&gt;ActiveRecord实现Dao 和business validation 的功能似乎更能快速的开发整个项目，但他的Dao实现必须继承，导致 code 不pure&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;我们可以把外部的Crud操作集中到一个Container or Tier中实现，这个Container或者Tier (Persist Logic)中操作的可能不是pure 的POJO 而是Container Wapper后的ActiveRecord,我们不用去关心,交给EntityManager来管理好了&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;这样我们不用继承ActiveRecord Base!!&lt;/div&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=-1409798983858752950&amp;page=RSS%3a+ActiveRecord+or+%e8%b4%ab%e8%a1%80%e7%9a%84POJO&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=oxyc.spaces.live.com&amp;amp;GT1=oxyc"&gt;</description><category>计算机与 Internet</category><comments>http://oxyc.spaces.live.com/Blog/cns!EC6F634B2A64724A!291.entry#comment</comments><guid isPermaLink="true">http://oxyc.spaces.live.com/Blog/cns!EC6F634B2A64724A!291.entry</guid><pubDate>Mon, 26 Mar 2007 12:01:26 GMT</pubDate><slash:comments>0</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://oxyc.spaces.live.com/blog/cns!EC6F634B2A64724A!291/comments/feed.rss</wfw:commentRss><wfw:comment>http://oxyc.spaces.live.com/Blog/cns!EC6F634B2A64724A!291.entry#comment</wfw:comment><dcterms:modified>2007-03-27T00:22:10Z</dcterms:modified></item><item><title>Run Jboss seam</title><link>http://oxyc.spaces.live.com/Blog/cns!EC6F634B2A64724A!290.entry</link><description>&lt;p&gt;Run Jboss seam On my computer&lt;br&gt;1、download Java SDK5 (jdk-1_5_0_11-windows-i586-p.exe), intall it and config the JAVA_HOME env&lt;br&gt;2、download JEMS installer 1.2.0.BETA3 and install JBoss AS 4.0.5 with the ejb3 profile selected&lt;br&gt;3、Download Seam and unpack it. &lt;br&gt;Edit build.properties in your Seam directory and configure the path to your JBoss AS installation directory. 
&lt;p&gt;4、Run Jboss AS&lt;br&gt;5、In the jboss-seam/examples/booking directory, type ant deploy and check for any error messages. &lt;br&gt;6、Point your browser to &lt;a href="http://localhost:8080/seam-booking/"&gt;http://localhost:8080/seam-booking/&lt;/a&gt; and register an account. 
&lt;p&gt;&lt;br&gt;&lt;a href="http://labs.jboss.com/portal/jbossseam/gettingstarted/index.html"&gt;http://labs.jboss.com/portal/jbossseam/gettingstarted/index.html&lt;/a&gt; 
&lt;p&gt;就seam的booking demo而言&lt;br&gt;主要分了3部分 
&lt;p&gt;---------------------------------------------------------------------------------&lt;br&gt;view/webui  -- jsp+jsf helper/taglib/components 负责收集表单信息(element language自动get set对象) 构造dto对象(就是ejb3实体对象)&lt;br&gt;Controller  -- face filter and face-config.xml 请求分发 &lt;br&gt;Action use jobss ejb3 Session Bean      -- face-config and annotation调用business service impl&lt;br&gt;---------------------------------------------------------------------------------&lt;br&gt;Model   use jobss ejb3 Entity Bean (ORM映射,DTO,Business Object Validation)&lt;br&gt;---------------------------------------------------------------------------------&lt;br&gt;Service/Dao - javax.persistence.EntityManager (数据库持久化)&lt;br&gt;--------------------------------------------------------------------------------- 
&lt;p&gt;ORM pojo (数据库映射对象) ---  business domain class领域模型(业务对象) &lt;br&gt;---Data Transfer Object(数据传输对象) -- Presentation Value Object(值对象) 
&lt;p&gt;&lt;br&gt;&amp;quot;简单就是美&amp;quot;,&amp;quot;约定胜于配置&amp;quot;敏捷思想 
&lt;p&gt;Active Record &lt;br&gt;An object that wraps a row in a database table or view, encapsulates the database access, and adds domain logic on that data 
&lt;p&gt;ActiveRecord - 活动记录 :一个对象，它包装数据库表或视图中的某一行，封装数据库访问，并在这些数据上增加了领域逻辑。 
&lt;p&gt;&lt;br&gt;ActiveRecord可以实现真正的Domain-Driven Design，或者叫Rich Domain Model 
&lt;p&gt;拆分&lt;br&gt;Java --- POJO(贫血的JavaBean)  ---   Dao        ---Business Domain Logic Validation 
&lt;p&gt;POJO or ActiveRecord?&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=-1409798983858752950&amp;page=RSS%3a+Run+Jboss+seam&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=oxyc.spaces.live.com&amp;amp;GT1=oxyc"&gt;</description><category>计算机与 Internet</category><comments>http://oxyc.spaces.live.com/Blog/cns!EC6F634B2A64724A!290.entry#comment</comments><guid isPermaLink="true">http://oxyc.spaces.live.com/Blog/cns!EC6F634B2A64724A!290.entry</guid><pubDate>Mon, 26 Mar 2007 08:13:07 GMT</pubDate><slash:comments>0</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://oxyc.spaces.live.com/blog/cns!EC6F634B2A64724A!290/comments/feed.rss</wfw:commentRss><wfw:comment>http://oxyc.spaces.live.com/Blog/cns!EC6F634B2A64724A!290.entry#comment</wfw:comment><dcterms:modified>2007-03-27T00:33:39Z</dcterms:modified></item><item><title>国有控股？邮政变银行</title><link>http://oxyc.spaces.live.com/Blog/cns!EC6F634B2A64724A!289.entry</link><description>&lt;div&gt;国有控股？邮政变银行，反正国家要养活一批人，权利和市场的结合势必会造成腐败！&lt;/div&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=-1409798983858752950&amp;page=RSS%3a+%e5%9b%bd%e6%9c%89%e6%8e%a7%e8%82%a1%ef%bc%9f%e9%82%ae%e6%94%bf%e5%8f%98%e9%93%b6%e8%a1%8c&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=oxyc.spaces.live.com&amp;amp;GT1=oxyc"&gt;</description><category>新闻与政治</category><comments>http://oxyc.spaces.live.com/Blog/cns!EC6F634B2A64724A!289.entry#comment</comments><guid isPermaLink="true">http://oxyc.spaces.live.com/Blog/cns!EC6F634B2A64724A!289.entry</guid><pubDate>Fri, 23 Mar 2007 11:50:32 GMT</pubDate><slash:comments>0</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://oxyc.spaces.live.com/blog/cns!EC6F634B2A64724A!289/comments/feed.rss</wfw:commentRss><wfw:comment>http://oxyc.spaces.live.com/Blog/cns!EC6F634B2A64724A!289.entry#comment</wfw:comment><dcterms:modified>2007-03-23T11:51:21Z</dcterms:modified></item><item><title>About Tapestry5</title><link>http://oxyc.spaces.live.com/Blog/cns!EC6F634B2A64724A!287.entry</link><description>&lt;div&gt;1 用Filter 代替Servlet&lt;/div&gt;
&lt;div&gt;2 组件类不再继承基类了，并且不再用abstract类了,组件类将是纯的,简单的Pojos&lt;/div&gt;
&lt;div&gt;3 不再需要xml书写page规范和组件规范,用java注释取代书写规范&lt;/div&gt;
&lt;div&gt;4 Changes to Tapestry component templates and classes are now picked up immediately, without any kind of restart. This will even work properly in production, not just during development.&lt;/div&gt;
&lt;div&gt;动态编译Container?&lt;/div&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=-1409798983858752950&amp;page=RSS%3a+About+Tapestry5&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=oxyc.spaces.live.com&amp;amp;GT1=oxyc"&gt;</description><category>计算机与 Internet</category><comments>http://oxyc.spaces.live.com/Blog/cns!EC6F634B2A64724A!287.entry#comment</comments><guid isPermaLink="true">http://oxyc.spaces.live.com/Blog/cns!EC6F634B2A64724A!287.entry</guid><pubDate>Wed, 21 Mar 2007 11:58:13 GMT</pubDate><slash:comments>0</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://oxyc.spaces.live.com/blog/cns!EC6F634B2A64724A!287/comments/feed.rss</wfw:commentRss><wfw:comment>http://oxyc.spaces.live.com/Blog/cns!EC6F634B2A64724A!287.entry#comment</wfw:comment><dcterms:modified>2007-03-21T11:58:13Z</dcterms:modified></item><item><title>幸运的狗</title><link>http://oxyc.spaces.live.com/Blog/cns!EC6F634B2A64724A!286.entry</link><description>&lt;div&gt;一只狗,准确来说是一只流浪狗躺在丁老师家外边的草坪上两天了·&lt;br&gt;　　丁老师前天早晨就看见了那只狗·那只狗沿着墙根走来,一拐一拐,身上脏兮兮的,奔拉着脑袋,无精打采的样子·丁老师厌恶的绕开它,甚至还下意识的用手捂了捂鼻子·中午下班回家的时候,那只狗躺在草坪上了,哀怜地望着每一个路过的人·&lt;br&gt;　 “不晓得那是谁家的狗,也没人管·”妻子说·&lt;br&gt;　　第二天,那只狗在原地一动不动·吃午饭的时候,妻子说: “那只狗真可怜,只怕快要死了·”&lt;br&gt;　　吃晚饭的时候·妻子又说起来那只狗,吩咐丁老师: “明天去买只狗窝来·”&lt;br&gt;　　丁老师把头从饭碗里抬起来,满脸狐疑地看着妻子·&lt;br&gt;　 “你看到那只狗了吗?”妻子有点激动,站起来走到窗前, “人啊,为什么这么冷漠?”&lt;br&gt;　 “好,好,我明天就去买狗窝·”丁老师买了一只金黄色的狗窝·妻子将奄奄一息的狗抱回了家·&lt;br&gt;　　洗澡,疗伤,喂食,妻子忙得不可开交·虽然腰酸背痛,可心里舒坦·&lt;br&gt;　　流浪狗真的是三生有幸,在丁老师妻子的悉心照料下,脱胎换骨,焕然一新·&lt;br&gt;　　每天丁老师与妻子外出散步,格格----丁来势给狗起的名字----必身前身后撒欢儿跑,极逗人爱·同事们都夸丁老师妻子贤贤惠,有爱心,在评五好家庭时,一致同意丁老师家当选·&lt;br&gt;　　丁老师沉浸在幸福之中·&lt;br&gt;　　这天下班回家,丁老师在传达室门口遇上了瘦骨嶙峋的老父亲·&lt;br&gt;　 “爸,你怎么找到学校来了,不是叫你不要来吗?”他把父亲领到传达室的后墙下·&lt;br&gt;　 “你妈生病了·”父亲低声说·&lt;br&gt;　 “我不是每月给了100元?”&lt;br&gt;　 “你妈一个月要吃几百元的药·”&lt;br&gt;　 “就不能找我哥?”&lt;br&gt;　 “你哥下岗一年多了,好意思开口?”&lt;br&gt;　　下课铃响了,丁老师从钱包里取出200元递给父亲, “要放学了,你快走吧·”&lt;br&gt;　 “你妈病好久了,想你呢,你抽个空回去看看·”&lt;br&gt;　 “莎莎出差了,没人给格格弄饭吃·”丁老师说完,一转身走了·&lt;br&gt;　 “格格是谁呀?”父亲望着丁老师的背影,大声问了一句·&lt;br&gt;  转载 &lt;a href="http://www.up2c.com/book/article/200701/200712692040276876.xml"&gt;http://www.up2c.com/book/article/200701/200712692040276876.xml&lt;/a&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=-1409798983858752950&amp;page=RSS%3a+%e5%b9%b8%e8%bf%90%e7%9a%84%e7%8b%97&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=oxyc.spaces.live.com&amp;amp;GT1=oxyc"&gt;</description><category>兴趣</category><comments>http://oxyc.spaces.live.com/Blog/cns!EC6F634B2A64724A!286.entry#comment</comments><guid isPermaLink="true">http://oxyc.spaces.live.com/Blog/cns!EC6F634B2A64724A!286.entry</guid><pubDate>Wed, 21 Mar 2007 11:50:01 GMT</pubDate><slash:comments>0</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://oxyc.spaces.live.com/blog/cns!EC6F634B2A64724A!286/comments/feed.rss</wfw:commentRss><wfw:comment>http://oxyc.spaces.live.com/Blog/cns!EC6F634B2A64724A!286.entry#comment</wfw:comment><dcterms:modified>2007-03-21T11:50:01Z</dcterms:modified></item><item><title>冷漠，冷漠</title><link>http://oxyc.spaces.live.com/Blog/cns!EC6F634B2A64724A!282.entry</link><description>&lt;div&gt;冷漠，冷漠&lt;/div&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=-1409798983858752950&amp;page=RSS%3a+%e5%86%b7%e6%bc%a0%ef%bc%8c%e5%86%b7%e6%bc%a0&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=oxyc.spaces.live.com&amp;amp;GT1=oxyc"&gt;</description><category>生活</category><comments>http://oxyc.spaces.live.com/Blog/cns!EC6F634B2A64724A!282.entry#comment</comments><guid isPermaLink="true">http://oxyc.spaces.live.com/Blog/cns!EC6F634B2A64724A!282.entry</guid><pubDate>Tue, 13 Mar 2007 04:30:42 GMT</pubDate><slash:comments>0</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://oxyc.spaces.live.com/blog/cns!EC6F634B2A64724A!282/comments/feed.rss</wfw:commentRss><wfw:comment>http://oxyc.spaces.live.com/Blog/cns!EC6F634B2A64724A!282.entry#comment</wfw:comment><dcterms:modified>2007-03-13T04:30:42Z</dcterms:modified></item><item><title>Blog list: Blog list</title><link>http://oxyc.spaces.live.com/Lists/cns!EC6F634B2A64724A!313</link><description>&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;p&gt;&lt;a href="http://hiok.blog.sohu.com"&gt;&amp;#28023;&amp;#27874;&amp;#26080;&amp;#30165;&amp;#25628;&amp;#29392;&amp;#21338;&amp;#23458;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=-1409798983858752950&amp;page=RSS%3a+Blog+list%3a+Blog+list&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=oxyc.spaces.live.com&amp;amp;GT1=oxyc"&gt;</description><guid isPermaLink="false">cns!EC6F634B2A64724A!313</guid><pubDate>Fri, 21 Mar 2008 03:02:16 GMT</pubDate><msn:type>bloglist</msn:type><live:type>bloglist</live:type><live:typelabel>Blog list</live:typelabel><cf:itemRSS>http://oxyc.spaces.live.com/Lists/cns!EC6F634B2A64724A!313/feed.rss</cf:itemRSS><dcterms:modified>2008-03-21T03:02:16Z</dcterms:modified></item></channel></rss>