﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-大漠驼铃-随笔分类-JAVA框架</title><link>http://www.blogjava.net/nkjava/category/37729.html</link><description>置身浩瀚的沙漠，方向最为重要，希望此blog能向大漠驼铃一样，给我方向和指引。&lt;br/&gt;
Java,Php,Shell,Python,服务器运维,大数据，SEO, 网站开发、运维,云服务技术支持，IM服务供应商, FreeSwitch搭建，技术支持等. 技术讨论QQ群：428622099</description><language>zh-cn</language><lastBuildDate>Wed, 03 Aug 2016 04:56:17 GMT</lastBuildDate><pubDate>Wed, 03 Aug 2016 04:56:17 GMT</pubDate><ttl>60</ttl><item><title>To prevent a memory leak, the JDBC Driver has been forcibly unregistered--有关Tomcat自动宕机的解决方案</title><link>http://www.blogjava.net/nkjava/archive/2016/08/03/431436.html</link><dc:creator>草原上的骆驼</dc:creator><author>草原上的骆驼</author><pubDate>Wed, 03 Aug 2016 02:59:00 GMT</pubDate><guid>http://www.blogjava.net/nkjava/archive/2016/08/03/431436.html</guid><wfw:comment>http://www.blogjava.net/nkjava/comments/431436.html</wfw:comment><comments>http://www.blogjava.net/nkjava/archive/2016/08/03/431436.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/nkjava/comments/commentRss/431436.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/nkjava/services/trackbacks/431436.html</trackback:ping><description><![CDATA[最近有几个服务的Tomcat总是无缘无故的宕机，到了不得不解决的地步。<br />
在Stackoverflow上找到比较有用的一篇文章，解决方案如下：<br />
<div><a href="http://stackoverflow.com/questions/3320400/to-prevent-a-memory-leak-the-jdbc-driver-has-been-forcibly-unregistered">http://stackoverflow.com/questions/3320400/to-prevent-a-memory-leak-the-jdbc-driver-has-been-forcibly-unregistered<br />
有以下几个解决途径：<br />
</a>
<ol style="margin: 0px 0px 1em 30px; padding: 0px; border: 0px; font-size: 15px; color: #242729; font-family: Arial, &quot;Helvetica Neue&quot;, Helvetica, sans-serif; line-height: 19.5px; background-color: #ffffff;">
     <li style="margin: 0px 0px 0.5em; padding: 0px; border: 0px; word-wrap: break-word;">
     <p style="margin: 0px; padding: 0px; border: 0px; clear: both;">Ignore those warnings. Tomcat is doing its job right. The actual bug is in someone else's code (the JDBC driver in question), not in yours. Be happy that Tomcat did its job properly and wait until the JDBC driver vendor get it fixed so that you can upgrade the driver. On the other hand, you aren't supposed to drop a JDBC driver in webapp's&nbsp;<code style="margin: 0px; padding: 1px 5px; border: 0px; font-size: 13px; font-family: Consolas, Menlo, Monaco, &quot;Lucida Console&quot;, &quot;Liberation Mono&quot;, &quot;DejaVu Sans Mono&quot;, &quot;Bitstream Vera Sans Mono&quot;, &quot;Courier New&quot;, monospace, sans-serif; white-space: pre-wrap; background-color: #eff0f1;">/WEB-INF/lib</code>, but only in server's&nbsp;<code style="margin: 0px; padding: 1px 5px; border: 0px; font-size: 13px; font-family: Consolas, Menlo, Monaco, &quot;Lucida Console&quot;, &quot;Liberation Mono&quot;, &quot;DejaVu Sans Mono&quot;, &quot;Bitstream Vera Sans Mono&quot;, &quot;Courier New&quot;, monospace, sans-serif; white-space: pre-wrap; background-color: #eff0f1;">/lib</code>. If you still keep it in webapp's&nbsp;<code style="margin: 0px; padding: 1px 5px; border: 0px; font-size: 13px; font-family: Consolas, Menlo, Monaco, &quot;Lucida Console&quot;, &quot;Liberation Mono&quot;, &quot;DejaVu Sans Mono&quot;, &quot;Bitstream Vera Sans Mono&quot;, &quot;Courier New&quot;, monospace, sans-serif; white-space: pre-wrap; background-color: #eff0f1;">/WEB-INF/lib</code>, then you should manually register and deregister it using a&nbsp;<code style="margin: 0px; padding: 1px 5px; border: 0px; font-size: 13px; font-family: Consolas, Menlo, Monaco, &quot;Lucida Console&quot;, &quot;Liberation Mono&quot;, &quot;DejaVu Sans Mono&quot;, &quot;Bitstream Vera Sans Mono&quot;, &quot;Courier New&quot;, monospace, sans-serif; white-space: pre-wrap; background-color: #eff0f1;">ServletContextListener</code>.<br />
     忽略警告。把WEB-INF/lib下的mysql驱动文件拷贝到Tomcat/lib下。如果仍然要放在WEB-INF/lib下，需要使用监听器手动的注册和注销。<br />
     下面的文章介绍如何写监听器，<a href="http://javabeat.net/servletcontextlistener-example/">http://javabeat.net/servletcontextlistener-example/， 当然如果是Servlet3.0， 使用注解方式设置监听也是可以的。<br />
     下面的代码是如何注销。<br />
     <br />
     </a></p>
     <div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br />
     <br />
     Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
     http://www.CodeHighlighter.com/<br />
     <br />
     --><strong><span style="color: #000000; ">Step&nbsp;</span><span style="color: #000000; ">1</span></strong><span style="color: #000000; "><strong>:&nbsp;Register&nbsp;a&nbsp;Listener</strong><br />
     web.xml<br />
     </span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">listener</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br />
     &nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">listener</span><span style="color: #000000; ">-</span><span style="color: #0000FF; ">class</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">com.mysite.MySpecialListener</span><span style="color: #000000; ">&lt;/</span><span style="color: #000000; ">listener</span><span style="color: #000000; ">-</span><span style="color: #0000FF; ">class</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br />
     </span><span style="color: #000000; ">&lt;/</span><span style="color: #000000; ">listener</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br />
     <strong>Step&nbsp;</strong></span><span style="color: #000000; "><strong>2</strong></span><span style="color: #000000; "><strong>:&nbsp;Implement&nbsp;the&nbsp;Listener</strong><br />
     <br />
     com.mysite.MySpecialListener.java<br />
     <br />
     </span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">class</span><span style="color: #000000; ">&nbsp;MySpecialListener&nbsp;</span><span style="color: #0000FF; ">extends</span><span style="color: #000000; ">&nbsp;ApplicationContextListener&nbsp;{<br />
     <br />
     &nbsp;&nbsp;&nbsp;&nbsp;@Override<br />
     &nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">&nbsp;contextInitialized(ServletContextEvent&nbsp;sce)&nbsp;{<br />
     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;On&nbsp;Application&nbsp;Startup,&nbsp;please&#8230;<br />
     <br />
     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;Usually&nbsp;I'll&nbsp;make&nbsp;a&nbsp;singleton&nbsp;in&nbsp;here,&nbsp;set&nbsp;up&nbsp;my&nbsp;pool,&nbsp;etc.</span><span style="color: #008000; "><br />
     </span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;}<br />
     <br />
     &nbsp;&nbsp;&nbsp;&nbsp;@Override<br />
     &nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">&nbsp;contextDestroyed(ServletContextEvent&nbsp;sce)&nbsp;{<br />
     &nbsp; &nbsp; &nbsp;&nbsp;</span><span style="color: #000000; "><span style="font-family: verdana, &quot;courier new&quot;; line-height: 21px; color: #008000;">//</span><span style="font-family: verdana, &quot;courier new&quot;; line-height: 21px; color: #008000;">&nbsp;This&nbsp;manually&nbsp;deregisters&nbsp;JDBC&nbsp;driver,&nbsp;which&nbsp;prevents&nbsp;Tomcat&nbsp;7&nbsp;from&nbsp;complaining&nbsp;about&nbsp;memory&nbsp;leaks&nbsp;wrto&nbsp;this&nbsp;class</span><span style="font-family: verdana, &quot;courier new&quot;; line-height: 21px; color: #008000;"><br />
     </span><span style="font-family: verdana, &quot;courier new&quot;; line-height: 21px;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Enumeration</span><span style="font-family: verdana, &quot;courier new&quot;; line-height: 21px;">&lt;</span><span style="font-family: verdana, &quot;courier new&quot;; line-height: 21px;">Driver</span><span style="font-family: verdana, &quot;courier new&quot;; line-height: 21px;">&gt;</span><span style="font-family: verdana, &quot;courier new&quot;; line-height: 21px;">&nbsp;drivers&nbsp;</span><span style="font-family: verdana, &quot;courier new&quot;; line-height: 21px;">=</span><span style="font-family: verdana, &quot;courier new&quot;; line-height: 21px;">&nbsp;DriverManager.getDrivers();</span><br style="font-family: verdana, &quot;courier new&quot;; line-height: 21px;" />
     <span style="font-family: verdana, &quot;courier new&quot;; line-height: 21px;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="font-family: verdana, &quot;courier new&quot;; line-height: 21px; color: #0000ff;">while</span><span style="font-family: verdana, &quot;courier new&quot;; line-height: 21px;">&nbsp;(drivers.hasMoreElements())&nbsp;{</span><br style="font-family: verdana, &quot;courier new&quot;; line-height: 21px;" />
     <span style="font-family: verdana, &quot;courier new&quot;; line-height: 21px;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Driver&nbsp;driver&nbsp;</span><span style="font-family: verdana, &quot;courier new&quot;; line-height: 21px;">=</span><span style="font-family: verdana, &quot;courier new&quot;; line-height: 21px;">&nbsp;drivers.nextElement();</span><br style="font-family: verdana, &quot;courier new&quot;; line-height: 21px;" />
     <span style="font-family: verdana, &quot;courier new&quot;; line-height: 21px;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="font-family: verdana, &quot;courier new&quot;; line-height: 21px; color: #0000ff;">try</span><span style="font-family: verdana, &quot;courier new&quot;; line-height: 21px;">&nbsp;{</span><br style="font-family: verdana, &quot;courier new&quot;; line-height: 21px;" />
     <span style="font-family: verdana, &quot;courier new&quot;; line-height: 21px;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DriverManager.deregisterDriver(driver);</span><br style="font-family: verdana, &quot;courier new&quot;; line-height: 21px;" />
     <span style="font-family: verdana, &quot;courier new&quot;; line-height: 21px;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LOG.log(Level.INFO,&nbsp;String.format(</span><span style="font-family: verdana, &quot;courier new&quot;; line-height: 21px;">"</span><span style="font-family: verdana, &quot;courier new&quot;; line-height: 21px;">deregistering&nbsp;jdbc&nbsp;driver:&nbsp;%s</span><span style="font-family: verdana, &quot;courier new&quot;; line-height: 21px;">"</span><span style="font-family: verdana, &quot;courier new&quot;; line-height: 21px;">,&nbsp;driver));</span><br style="font-family: verdana, &quot;courier new&quot;; line-height: 21px;" />
     <span style="font-family: verdana, &quot;courier new&quot;; line-height: 21px;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span><span style="font-family: verdana, &quot;courier new&quot;; line-height: 21px; color: #0000ff;">catch</span><span style="font-family: verdana, &quot;courier new&quot;; line-height: 21px;">&nbsp;(SQLException&nbsp;e)&nbsp;{</span><br style="font-family: verdana, &quot;courier new&quot;; line-height: 21px;" />
     <span style="font-family: verdana, &quot;courier new&quot;; line-height: 21px;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LOG.log(Level.SEVERE,&nbsp;String.format(</span><span style="font-family: verdana, &quot;courier new&quot;; line-height: 21px;">"</span><span style="font-family: verdana, &quot;courier new&quot;; line-height: 21px;">Error&nbsp;deregistering&nbsp;driver&nbsp;%s</span><span style="font-family: verdana, &quot;courier new&quot;; line-height: 21px;">"</span><span style="font-family: verdana, &quot;courier new&quot;; line-height: 21px;">,&nbsp;driver),&nbsp;e);</span><br style="font-family: verdana, &quot;courier new&quot;; line-height: 21px;" />
     <span style="font-family: verdana, &quot;courier new&quot;; line-height: 21px;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span><br style="font-family: verdana, &quot;courier new&quot;; line-height: 21px;" />
     <br style="font-family: verdana, &quot;courier new&quot;; line-height: 21px;" />
     <span style="font-family: verdana, &quot;courier new&quot;; line-height: 21px;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span><br />
     &nbsp; &nbsp; }<br />
     <br />
     }</span></div>
     <div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"></div>
     </li>
     <li style="margin: 0px 0px 0.5em; padding: 0px; border: 0px; word-wrap: break-word;">
     <p style="margin: 0px; padding: 0px; border: 0px; clear: both;">Downgrade to Tomcat 6.0.23 or older so that you will not be bothered with those warnings. But it will silently keep leaking memory. Not sure if that's good to know after all. Those kind of memory leaks are one of the major causes behind&nbsp;<a href="http://wiki.apache.org/tomcat/OutOfMemory" style="margin: 0px; padding: 0px; border: 0px; color: #005999; text-decoration: none; cursor: pointer;"><code style="margin: 0px; padding: 1px 5px; border: 0px; font-size: 13px; font-family: Consolas, Menlo, Monaco, &quot;Lucida Console&quot;, &quot;Liberation Mono&quot;, &quot;DejaVu Sans Mono&quot;, &quot;Bitstream Vera Sans Mono&quot;, &quot;Courier New&quot;, monospace, sans-serif; white-space: pre-wrap; background-color: #eff0f1;">OutOfMemoryError</code>&nbsp;issues</a>&nbsp;during Tomcat hotdeployments.<br />
     把Tomcat降级到低版本（6.0.23以下），虽然不会报错，但是还是存在内存益出的问题，这并不是一个好的解决方案。<br />
     <br />
     </p>
     </li>
     <li style="margin: 0px; padding: 0px; border: 0px; word-wrap: break-word;">
     <p style="margin: 0px; padding: 0px; border: 0px; clear: both;">Move the JDBC driver to Tomcat's&nbsp;<code style="margin: 0px; padding: 1px 5px; border: 0px; font-size: 13px; font-family: Consolas, Menlo, Monaco, &quot;Lucida Console&quot;, &quot;Liberation Mono&quot;, &quot;DejaVu Sans Mono&quot;, &quot;Bitstream Vera Sans Mono&quot;, &quot;Courier New&quot;, monospace, sans-serif; white-space: pre-wrap; background-color: #eff0f1;">/lib</code>&nbsp;folder and have a connection pooled datasource to manage the driver. Note that Tomcat's builtin DBCP does not deregister drivers properly on close. See also bug&nbsp;<a href="https://issues.apache.org/jira/browse/DBCP-332" style="margin: 0px; padding: 0px; border: 0px; color: #005999; text-decoration: none; cursor: pointer;">DBCP-322</a>&nbsp;which is closed as WONTFIX. You would rather like to replace DBCP by another connection pool which is doing its job better then DBCP. For example<a href="http://brettwooldridge.github.io/HikariCP/" style="margin: 0px; padding: 0px; border: 0px; color: #005999; text-decoration: none; cursor: pointer;">HikariCP</a>,&nbsp;<a href="http://jolbox.com/" style="margin: 0px; padding: 0px; border: 0px; color: #005999; text-decoration: none; cursor: pointer;">BoneCP</a>, or perhaps&nbsp;<a href="http://people.apache.org/~fhanik/jdbc-pool/jdbc-pool.html" style="margin: 0px; padding: 0px; border: 0px; color: #005999; text-decoration: none; cursor: pointer;">Tomcat JDBC Pool</a>.<br />
     把驱动文件移到Tomcat/lib文件夹下，不用使用DBCP，使用以下的连接池库,HikariCP, BoneCP,或者Tomcat JDBC Pool.<br /><br />
     </p>
     </li>
     <li>MAVEN项目<br />
     <p style="margin: 0px 0px 1em; padding: 0px; border: 0px; clear: both;">If you are getting this message from a Maven built war change the scope of the JDBC driver to provided, and put a copy of it in the lib directory. Like this:<span style="font-size: 13px; color: #000000;">&lt;</span><span style="font-size: 13px; color: #000000;">dependency</span><span style="font-size: 13px; color: #000000;">&gt;，<br />
     对于MAVEN项目，由于Tomcat中存在mysql驱动文件（1中介绍），这样在部署时就不会把mysql带到打包文件里，注意是&lt;scope&gt;provided&lt;/scope&gt;。<br />
     </span></p>
     <div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><span style="color: #000000; ">&nbsp;&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">groupId</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">mysql</span><span style="color: #000000; ">&lt;/</span><span style="color: #000000; ">groupId</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br />
     &nbsp;&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">artifactId</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">mysql</span><span style="color: #000000; ">-</span><span style="color: #000000; ">connector</span><span style="color: #000000; ">-</span><span style="color: #000000; ">java</span><span style="color: #000000; ">&lt;/</span><span style="color: #000000; ">artifactId</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br />
     &nbsp;&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">version</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">5.1</span><span style="color: #000000; ">.</span><span style="color: #000000; ">18</span><span style="color: #000000; ">&lt;/</span><span style="color: #000000; ">version</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br />
     &nbsp;&nbsp;</span><span style="color: #000000; ">&lt;!--</span><span style="color: #000000; ">&nbsp;put&nbsp;a&nbsp;copy&nbsp;in&nbsp;</span><span style="color: #000000; ">/</span><span style="color: #000000; ">usr</span><span style="color: #000000; ">/</span><span style="color: #000000; ">share</span><span style="color: #000000; ">/</span><span style="color: #000000; ">tomcat7</span><span style="color: #000000; ">/</span><span style="color: #000000; ">lib&nbsp;</span><span style="color: #000000; ">--&gt;</span><span style="color: #000000; "><br />
     &nbsp;&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">scope</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">provided</span><span style="color: #000000; ">&lt;/</span><span style="color: #000000; ">scope</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br />
     </span><span style="color: #000000; ">&lt;/</span><span style="color: #000000; ">dependency</span><span style="color: #000000; ">&gt;</span></div>
     </li>
</ol>
</div>
好了，如果您遇到同样的问题，可以和我沟通，联系方式见头部。<img src ="http://www.blogjava.net/nkjava/aggbug/431436.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/nkjava/" target="_blank">草原上的骆驼</a> 2016-08-03 10:59 <a href="http://www.blogjava.net/nkjava/archive/2016/08/03/431436.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>MAVEN命令不断完善中。。。</title><link>http://www.blogjava.net/nkjava/archive/2016/02/15/429325.html</link><dc:creator>草原上的骆驼</dc:creator><author>草原上的骆驼</author><pubDate>Mon, 15 Feb 2016 09:13:00 GMT</pubDate><guid>http://www.blogjava.net/nkjava/archive/2016/02/15/429325.html</guid><wfw:comment>http://www.blogjava.net/nkjava/comments/429325.html</wfw:comment><comments>http://www.blogjava.net/nkjava/archive/2016/02/15/429325.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/nkjava/comments/commentRss/429325.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/nkjava/services/trackbacks/429325.html</trackback:ping><description><![CDATA[MAVEN命令<br />
<div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
-->http:<span style="color: #008000; ">//</span><span style="color: #008000; ">www.mvnrepository.com&nbsp;&nbsp;#中央仓库</span><span style="color: #008000; "><br />
</span><br />
mvn&nbsp;eclipse:eclipse&nbsp;&nbsp;#生成eclipse配置文件<br />
mvn&nbsp;clean&nbsp;<span style="color: #0000FF; ">package</span>&nbsp;#打包项目<br />
mvn&nbsp;clean&nbsp;install&nbsp;#安装成本地库<br />
mvn clean install -DoutputDirectory=lib -Dsilent=true -Pmodules <br />
mvn clean install -Pmodules #安装指定的模块到本地仓库<br />
mvn&nbsp;jetty:run&nbsp;#运行jetty<br />
mvn&nbsp;tomcat7:run&nbsp;#运行tomcat<br />
<br /><br /><br /><br />
mvn&nbsp;compile&nbsp;#编译<br />
mvn&nbsp;test&nbsp;#运行测试<br />
<br /><br /><br /><br />
下载源码和文档<br />
mvn -DdownloadJavadocs=true eclipse:eclipse<br />
mvn -DdownloadSources=true eclipse:eclipse<br />
mvn&nbsp;archetype:generate&nbsp;-DgroupId=cn.ourwill.maven&nbsp;-DartifactId=hello-world&nbsp;-DarchetypeArtifactId=maven-archetype-quickstart&nbsp;-DinteractiveMode=<span style="color: #0000FF; ">false</span>&nbsp;&nbsp;&nbsp;#mvn&nbsp;创建项目<br />
<br />
mvn&nbsp;install&nbsp;-Dmaven.test.skip=<span style="color: #0000FF; ">true</span>#不执行测试<br />
<br /><br /><br /><br />
环境分离<br />
&lt;profiles&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;profile&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;id&gt;mine&lt;/id&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;activation&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;activeByDefault&gt;<span style="color: #0000FF; ">true</span>&lt;/activeByDefault&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/activation&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;build&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;filters&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;filter&gt;src/main/filters/filter-mine.properties&lt;/filter&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/filters&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/build&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/profile&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;profile&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;id&gt;test&lt;/id&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;activation&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;activeByDefault&gt;<span style="color: #0000FF; ">false</span>&lt;/activeByDefault&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/activation&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;build&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;filters&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;filter&gt;src/main/filters/filter-test.properties&lt;/filter&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/filters&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/build&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/profile&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;profile&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;id&gt;release&lt;/id&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;activation&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;activeByDefault&gt;<span style="color: #0000FF; ">false</span>&lt;/activeByDefault&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/activation&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;build&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;filters&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;filter&gt;src/main/filters/filter-release.properties&lt;/filter&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/filters&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/build&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/profile&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;/profiles&gt;<br />
<br />
mvn&nbsp;install&nbsp;-Denvironment.type=prod&nbsp;&nbsp;#使用不同的环境，生产环境，开发环境，测试环境&nbsp;&nbsp;<br />
<br />
mvn install:install-file -Dfile=Sample.jar -DgroupId=uniquesample -DartifactId=sample_jar -Dversion=2.1.3b2 -Dpackaging=jar -DgeneratePom=true &nbsp;#安装到本地<br />
<br />
mvn&nbsp;dependency:tree&nbsp;#依赖树<br />
mvn&nbsp;dependencies:&nbsp;copy-dependency&nbsp;#复制依赖的jar包<br />
<br />
<br />
<br />
生成java-doc<br />
mvn javadoc:javadoc<br />
mvn javadoc:jar<br />
mvn javadoc:aggregate <br />
mvn javadoc:aggregate-jar <br />
mvn javadoc:test-javadoc <br />
mvn javadoc:test-jar<br />
mvn javadoc:test-aggregate <br />
mvn javadoc:test-aggregate-jar<br />
<br /><br /><br />生成jar<br />
mvn jar:jar<br />
mvn jar:test-jar<br />
<br /><br /><br />
说明文档<br />
1. mvn help:describe -Dplugin=eclipse -Dfull &gt; eclipse-help.txt<br />
2. mvn help:describe -Dplugin=help -Dfull &gt; help-help.txt<br />
3. mvn help:describe -Dplugin=dependency -Dfull &gt; dependency-help.txt<br />
4. mvn help:describe -Dcmd=compiler:compile &#8211;Ddetail<br />
5. mvn help:describe -Dplugin=org.apache.maven.plugins:maven-compiler-plugin<br />
</div>
<br />
GRADLE命令
<img src ="http://www.blogjava.net/nkjava/aggbug/429325.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/nkjava/" target="_blank">草原上的骆驼</a> 2016-02-15 17:13 <a href="http://www.blogjava.net/nkjava/archive/2016/02/15/429325.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Row was updated or deleted by another transaction</title><link>http://www.blogjava.net/nkjava/archive/2010/08/11/328555.html</link><dc:creator>草原上的骆驼</dc:creator><author>草原上的骆驼</author><pubDate>Wed, 11 Aug 2010 08:48:00 GMT</pubDate><guid>http://www.blogjava.net/nkjava/archive/2010/08/11/328555.html</guid><wfw:comment>http://www.blogjava.net/nkjava/comments/328555.html</wfw:comment><comments>http://www.blogjava.net/nkjava/archive/2010/08/11/328555.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/nkjava/comments/commentRss/328555.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/nkjava/services/trackbacks/328555.html</trackback:ping><description><![CDATA[16:35:56,845 ERROR [JPAPrimaryKeyObjectDAO] Failed to update.<br />
javax.persistence.OptimisticLockException<br />
&nbsp;&nbsp; &nbsp;at org.hibernate.ejb.AbstractEntityManagerImpl.wrapStaleStateException(AbstractEntityManagerImpl.java:627)<br />
&nbsp;&nbsp; &nbsp;at org.hibernate.ejb.AbstractEntityManagerImpl.throwPersistenceException(AbstractEntityManagerImpl.java:588)<br />
&nbsp;&nbsp; &nbsp;at org.hibernate.ejb.AbstractEntityManagerImpl.merge(AbstractEntityManagerImpl.java:244)<br />
&nbsp;&nbsp; &nbsp;at org.jboss.jpa.tx.TransactionScopedEntityManager.merge(TransactionScopedEntityManager.java:193)<br />
&nbsp;&nbsp; &nbsp;at hanvon.ebook.persistence.general.JPAPrimaryKeyObjectDAO.update(JPAPrimaryKeyObjectDAO.java:91)<br />
&nbsp;&nbsp; &nbsp;at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)<br />
&nbsp;&nbsp; &nbsp;at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)<br />
&nbsp;&nbsp; &nbsp;at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)<br />
&nbsp;&nbsp; &nbsp;at java.lang.reflect.Method.invoke(Method.java:597)<br />
&nbsp;&nbsp; &nbsp;at org.jboss.aop.joinpoint.MethodInvocation.invokeTarget(MethodInvocation.java:122)<br />
&nbsp;&nbsp; &nbsp;at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:111)<br />
&nbsp;&nbsp; &nbsp;at org.jboss.ejb3.EJBContainerInvocationWrapper.invokeNext(EJBContainerInvocationWrapper.java:69)<br />
&nbsp;&nbsp; &nbsp;at org.jboss.ejb3.interceptors.aop.InterceptorSequencer.invoke(InterceptorSequencer.java:73)<br />
&nbsp;&nbsp; &nbsp;at org.jboss.ejb3.interceptors.aop.InterceptorSequencer.aroundInvoke(InterceptorSequencer.java:59)<br />
&nbsp;&nbsp; &nbsp;at sun.reflect.GeneratedMethodAccessor967.invoke(Unknown Source)<br />
&nbsp;&nbsp; &nbsp;at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)<br />
&nbsp;&nbsp; &nbsp;at java.lang.reflect.Method.invoke(Method.java:597)<br />
&nbsp;&nbsp; &nbsp;at org.jboss.aop.advice.PerJoinpointAdvice.invoke(PerJoinpointAdvice.java:174)<br />
&nbsp;&nbsp; &nbsp;at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)<br />
&nbsp;&nbsp; &nbsp;at org.jboss.ejb3.interceptors.aop.InvocationContextInterceptor.fillMethod(InvocationContextInterceptor.java:72)<br />
&nbsp;&nbsp; &nbsp;at org.jboss.aop.advice.org.jboss.ejb3.interceptors.aop.InvocationContextInterceptor_z_fillMethod_24570304.invoke(InvocationContextInterceptor_z_fillMethod_24570304.java)<br />
&nbsp;&nbsp; &nbsp;at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)<br />
&nbsp;&nbsp; &nbsp;at org.jboss.ejb3.interceptors.aop.InvocationContextInterceptor.setup(InvocationContextInterceptor.java:88)<br />
&nbsp;&nbsp; &nbsp;at org.jboss.aop.advice.org.jboss.ejb3.interceptors.aop.InvocationContextInterceptor_z_setup_24570304.invoke(InvocationContextInterceptor_z_setup_24570304.java)<br />
&nbsp;&nbsp; &nbsp;at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)<br />
&nbsp;&nbsp; &nbsp;at org.jboss.ejb3.connectionmanager.CachedConnectionInterceptor.invoke(CachedConnectionInterceptor.java:62)<br />
&nbsp;&nbsp; &nbsp;at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)<br />
&nbsp;&nbsp; &nbsp;at org.jboss.ejb3.entity.TransactionScopedEntityManagerInterceptor.invoke(TransactionScopedEntityManagerInterceptor.java:56)<br />
&nbsp;&nbsp; &nbsp;at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)<br />
&nbsp;&nbsp; &nbsp;at org.jboss.ejb3.AllowedOperationsInterceptor.invoke(AllowedOperationsInterceptor.java:47)<br />
&nbsp;&nbsp; &nbsp;at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)<br />
&nbsp;&nbsp; &nbsp;at org.jboss.ejb3.tx.NullInterceptor.invoke(NullInterceptor.java:42)<br />
&nbsp;&nbsp; &nbsp;at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)<br />
&nbsp;&nbsp; &nbsp;at org.jboss.ejb3.stateless.StatelessInstanceInterceptor.invoke(StatelessInstanceInterceptor.java:68)<br />
&nbsp;&nbsp; &nbsp;at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)<br />
&nbsp;&nbsp; &nbsp;at org.jboss.aspects.tx.TxPolicy.invokeInCallerTx(TxPolicy.java:126)<br />
&nbsp;&nbsp; &nbsp;at org.jboss.aspects.tx.TxInterceptor$Required.invoke(TxInterceptor.java:194)<br />
&nbsp;&nbsp; &nbsp;at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)<br />
&nbsp;&nbsp; &nbsp;at org.jboss.aspects.tx.TxPropagationInterceptor.invoke(TxPropagationInterceptor.java:76)<br />
&nbsp;&nbsp; &nbsp;at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)<br />
&nbsp;&nbsp; &nbsp;at org.jboss.ejb3.tx.NullInterceptor.invoke(NullInterceptor.java:42)<br />
&nbsp;&nbsp; &nbsp;at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)<br />
&nbsp;&nbsp; &nbsp;at org.jboss.ejb3.security.Ejb3AuthenticationInterceptorv2.invoke(Ejb3AuthenticationInterceptorv2.java:186)<br />
&nbsp;&nbsp; &nbsp;at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)<br />
&nbsp;&nbsp; &nbsp;at org.jboss.ejb3.ENCPropagationInterceptor.invoke(ENCPropagationInterceptor.java:41)<br />
&nbsp;&nbsp; &nbsp;at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)<br />
&nbsp;&nbsp; &nbsp;at org.jboss.ejb3.BlockContainerShutdownInterceptor.invoke(BlockContainerShutdownInterceptor.java:67)<br />
&nbsp;&nbsp; &nbsp;at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)<br />
&nbsp;&nbsp; &nbsp;at org.jboss.aspects.currentinvocation.CurrentInvocationInterceptor.invoke(CurrentInvocationInterceptor.java:67)<br />
&nbsp;&nbsp; &nbsp;at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)<br />
&nbsp;&nbsp; &nbsp;at org.jboss.ejb3.session.SessionSpecContainer.invoke(SessionSpecContainer.java:176)<br />
&nbsp;&nbsp; &nbsp;at org.jboss.ejb3.session.SessionSpecContainer.invoke(SessionSpecContainer.java:216)<br />
&nbsp;&nbsp; &nbsp;at org.jboss.ejb3.proxy.impl.handler.session.SessionProxyInvocationHandlerBase.invoke(SessionProxyInvocationHandlerBase.java:207)<br />
&nbsp;&nbsp; &nbsp;at org.jboss.ejb3.proxy.impl.handler.session.SessionProxyInvocationHandlerBase.invoke(SessionProxyInvocationHandlerBase.java:164)<br />
&nbsp;&nbsp; &nbsp;at $Proxy784.update(Unknown Source)<br />
&nbsp;&nbsp; &nbsp;at hanvon.ebook.business.info.impl.InfoManagerBean.updateInfoNoQuestion(InfoManagerBean.java:101)<br />
&nbsp;&nbsp; &nbsp;at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)<br />
&nbsp;&nbsp; &nbsp;at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)<br />
&nbsp;&nbsp; &nbsp;at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)<br />
&nbsp;&nbsp; &nbsp;at java.lang.reflect.Method.invoke(Method.java:597)<br />
&nbsp;&nbsp; &nbsp;at org.jboss.aop.joinpoint.MethodInvocation.invokeTarget(MethodInvocation.java:122)<br />
&nbsp;&nbsp; &nbsp;at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:111)<br />
&nbsp;&nbsp; &nbsp;at org.jboss.ejb3.EJBContainerInvocationWrapper.invokeNext(EJBContainerInvocationWrapper.java:69)<br />
&nbsp;&nbsp; &nbsp;at org.jboss.ejb3.interceptors.aop.InterceptorSequencer.invoke(InterceptorSequencer.java:73)<br />
&nbsp;&nbsp; &nbsp;at org.jboss.ejb3.interceptors.aop.InterceptorSequencer.aroundInvoke(InterceptorSequencer.java:59)<br />
&nbsp;&nbsp; &nbsp;at sun.reflect.GeneratedMethodAccessor967.invoke(Unknown Source)<br />
&nbsp;&nbsp; &nbsp;at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)<br />
&nbsp;&nbsp; &nbsp;at java.lang.reflect.Method.invoke(Method.java:597)<br />
&nbsp;&nbsp; &nbsp;at org.jboss.aop.advice.PerJoinpointAdvice.invoke(PerJoinpointAdvice.java:174)<br />
&nbsp;&nbsp; &nbsp;at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)<br />
&nbsp;&nbsp; &nbsp;at org.jboss.ejb3.interceptors.aop.InvocationContextInterceptor.fillMethod(InvocationContextInterceptor.java:72)<br />
&nbsp;&nbsp; &nbsp;at org.jboss.aop.advice.org.jboss.ejb3.interceptors.aop.InvocationContextInterceptor_z_fillMethod_24570304.invoke(InvocationContextInterceptor_z_fillMethod_24570304.java)<br />
&nbsp;&nbsp; &nbsp;at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)<br />
&nbsp;&nbsp; &nbsp;at org.jboss.ejb3.interceptors.aop.InvocationContextInterceptor.setup(InvocationContextInterceptor.java:88)<br />
&nbsp;&nbsp; &nbsp;at org.jboss.aop.advice.org.jboss.ejb3.interceptors.aop.InvocationContextInterceptor_z_setup_24570304.invoke(InvocationContextInterceptor_z_setup_24570304.java)<br />
&nbsp;&nbsp; &nbsp;at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)<br />
&nbsp;&nbsp; &nbsp;at org.jboss.ejb3.connectionmanager.CachedConnectionInterceptor.invoke(CachedConnectionInterceptor.java:62)<br />
&nbsp;&nbsp; &nbsp;at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)<br />
&nbsp;&nbsp; &nbsp;at org.jboss.ejb3.entity.TransactionScopedEntityManagerInterceptor.invoke(TransactionScopedEntityManagerInterceptor.java:56)<br />
&nbsp;&nbsp; &nbsp;at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)<br />
&nbsp;&nbsp; &nbsp;at org.jboss.ejb3.AllowedOperationsInterceptor.invoke(AllowedOperationsInterceptor.java:47)<br />
&nbsp;&nbsp; &nbsp;at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)<br />
&nbsp;&nbsp; &nbsp;at org.jboss.ejb3.tx.NullInterceptor.invoke(NullInterceptor.java:42)<br />
&nbsp;&nbsp; &nbsp;at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)<br />
&nbsp;&nbsp; &nbsp;at org.jboss.ejb3.stateless.StatelessInstanceInterceptor.invoke(StatelessInstanceInterceptor.java:68)<br />
&nbsp;&nbsp; &nbsp;at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)<br />
&nbsp;&nbsp; &nbsp;at org.jboss.aspects.tx.TxPolicy.invokeInOurTx(TxPolicy.java:79)<br />
&nbsp;&nbsp; &nbsp;at org.jboss.aspects.tx.TxInterceptor$Required.invoke(TxInterceptor.java:190)<br />
&nbsp;&nbsp; &nbsp;at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)<br />
&nbsp;&nbsp; &nbsp;at org.jboss.aspects.tx.TxPropagationInterceptor.invoke(TxPropagationInterceptor.java:76)<br />
&nbsp;&nbsp; &nbsp;at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)<br />
&nbsp;&nbsp; &nbsp;at org.jboss.ejb3.tx.NullInterceptor.invoke(NullInterceptor.java:42)<br />
&nbsp;&nbsp; &nbsp;at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)<br />
&nbsp;&nbsp; &nbsp;at org.jboss.ejb3.security.Ejb3AuthenticationInterceptorv2.invoke(Ejb3AuthenticationInterceptorv2.java:186)<br />
&nbsp;&nbsp; &nbsp;at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)<br />
&nbsp;&nbsp; &nbsp;at org.jboss.ejb3.ENCPropagationInterceptor.invoke(ENCPropagationInterceptor.java:41)<br />
&nbsp;&nbsp; &nbsp;at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)<br />
&nbsp;&nbsp; &nbsp;at org.jboss.ejb3.BlockContainerShutdownInterceptor.invoke(BlockContainerShutdownInterceptor.java:67)<br />
&nbsp;&nbsp; &nbsp;at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)<br />
&nbsp;&nbsp; &nbsp;at org.jboss.aspects.currentinvocation.CurrentInvocationInterceptor.invoke(CurrentInvocationInterceptor.java:67)<br />
&nbsp;&nbsp; &nbsp;at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)<br />
&nbsp;&nbsp; &nbsp;at org.jboss.ejb3.stateless.StatelessContainer.dynamicInvoke(StatelessContainer.java:421)<br />
&nbsp;&nbsp; &nbsp;at org.jboss.ejb3.remoting.IsLocalInterceptor.invokeLocal(IsLocalInterceptor.java:85)<br />
&nbsp;&nbsp; &nbsp;at org.jboss.ejb3.remoting.IsLocalInterceptor.invoke(IsLocalInterceptor.java:72)<br />
&nbsp;&nbsp; &nbsp;at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)<br />
&nbsp;&nbsp; &nbsp;at org.jboss.aspects.remoting.PojiProxy.invoke(PojiProxy.java:62)<br />
&nbsp;&nbsp; &nbsp;at $Proxy1309.invoke(Unknown Source)<br />
&nbsp;&nbsp; &nbsp;at org.jboss.ejb3.proxy.impl.handler.session.SessionProxyInvocationHandlerBase.invoke(SessionProxyInvocationHandlerBase.java:207)<br />
&nbsp;&nbsp; &nbsp;at org.jboss.ejb3.proxy.impl.handler.session.SessionProxyInvocationHandlerBase.invoke(SessionProxyInvocationHandlerBase.java:164)<br />
&nbsp;&nbsp; &nbsp;at $Proxy1246.updateInfoNoQuestion(Unknown Source)<br />
&nbsp;&nbsp; &nbsp;at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)<br />
&nbsp;&nbsp; &nbsp;at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)<br />
&nbsp;&nbsp; &nbsp;at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)<br />
&nbsp;&nbsp; &nbsp;at java.lang.reflect.Method.invoke(Method.java:597)<br />
&nbsp;&nbsp; &nbsp;at org.springframework.remoting.rmi.RmiClientInterceptorUtils.invokeRemoteMethod(RmiClientInterceptorUtils.java:110)<br />
&nbsp;&nbsp; &nbsp;at org.springframework.ejb.access.SimpleRemoteSlsbInvokerInterceptor.doInvoke(SimpleRemoteSlsbInvokerInterceptor.java:99)<br />
&nbsp;&nbsp; &nbsp;at org.springframework.ejb.access.AbstractRemoteSlsbInvokerInterceptor.invokeInContext(AbstractRemoteSlsbInvokerInterceptor.java:141)<br />
&nbsp;&nbsp; &nbsp;at org.springframework.ejb.access.AbstractSlsbInvokerInterceptor.invoke(AbstractSlsbInvokerInterceptor.java:189)<br />
&nbsp;&nbsp; &nbsp;at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)<br />
&nbsp;&nbsp; &nbsp;at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:202)<br />
&nbsp;&nbsp; &nbsp;at $Proxy1247.updateInfoNoQuestion(Unknown Source)<br />
&nbsp;&nbsp; &nbsp;at hanvon.ebook.web.info.service.InfoService.updateInfoNoQuestion(InfoService.java:77)<br />
&nbsp;&nbsp; &nbsp;at hanvon.ebook.web.info.action.InfoAction.addOrEditInfo(InfoAction.java:356)<br />
&nbsp;&nbsp; &nbsp;at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)<br />
&nbsp;&nbsp; &nbsp;at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)<br />
&nbsp;&nbsp; &nbsp;at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)<br />
&nbsp;&nbsp; &nbsp;at java.lang.reflect.Method.invoke(Method.java:597)<br />
&nbsp;&nbsp; &nbsp;at com.opensymphony.xwork2.DefaultActionInvocation.invokeAction(DefaultActionInvocation.java:441)<br />
&nbsp;&nbsp; &nbsp;at com.opensymphony.xwork2.DefaultActionInvocation.invokeActionOnly(DefaultActionInvocation.java:280)<br />
&nbsp;&nbsp; &nbsp;at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:243)<br />
&nbsp;&nbsp; &nbsp;at hanvon.ebook.web.interceptor.PermissionInterceptor.intercept(PermissionInterceptor.java:34)<br />
&nbsp;&nbsp; &nbsp;at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)<br />
&nbsp;&nbsp; &nbsp;at hanvon.ebook.web.interceptor.EbookLogonInterceptor.intercept(EbookLogonInterceptor.java:32)<br />
&nbsp;&nbsp; &nbsp;at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)<br />
&nbsp;&nbsp; &nbsp;at com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor.java:165)<br />
&nbsp;&nbsp; &nbsp;at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)<br />
&nbsp;&nbsp; &nbsp;at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)<br />
&nbsp;&nbsp; &nbsp;at com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:252)<br />
&nbsp;&nbsp; &nbsp;at org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.doIntercept(AnnotationValidationInterceptor.java:68)<br />
&nbsp;&nbsp; &nbsp;at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)<br />
&nbsp;&nbsp; &nbsp;at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)<br />
&nbsp;&nbsp; &nbsp;at com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.intercept(ConversionErrorInterceptor.java:122)<br />
&nbsp;&nbsp; &nbsp;at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)<br />
&nbsp;&nbsp; &nbsp;at com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:195)<br />
&nbsp;&nbsp; &nbsp;at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)<br />
&nbsp;&nbsp; &nbsp;at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)<br />
&nbsp;&nbsp; &nbsp;at com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:195)<br />
&nbsp;&nbsp; &nbsp;at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)<br />
&nbsp;&nbsp; &nbsp;at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)<br />
&nbsp;&nbsp; &nbsp;at com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.intercept(StaticParametersInterceptor.java:179)<br />
&nbsp;&nbsp; &nbsp;at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)<br />
&nbsp;&nbsp; &nbsp;at org.apache.struts2.interceptor.MultiselectInterceptor.intercept(MultiselectInterceptor.java:75)<br />
&nbsp;&nbsp; &nbsp;at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)<br />
&nbsp;&nbsp; &nbsp;at org.apache.struts2.interceptor.CheckboxInterceptor.intercept(CheckboxInterceptor.java:94)<br />
&nbsp;&nbsp; &nbsp;at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)<br />
&nbsp;&nbsp; &nbsp;at org.apache.struts2.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:306)<br />
&nbsp;&nbsp; &nbsp;at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)<br />
&nbsp;&nbsp; &nbsp;at com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor.intercept(ModelDrivenInterceptor.java:89)<br />
&nbsp;&nbsp; &nbsp;at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)<br />
&nbsp;&nbsp; &nbsp;at com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor.intercept(ScopedModelDrivenInterceptor.java:130)<br />
&nbsp;&nbsp; &nbsp;at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)<br />
&nbsp;&nbsp; &nbsp;at org.apache.struts2.interceptor.debugging.DebuggingInterceptor.intercept(DebuggingInterceptor.java:267)<br />
&nbsp;&nbsp; &nbsp;at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)<br />
&nbsp;&nbsp; &nbsp;at com.opensymphony.xwork2.interceptor.ChainingInterceptor.intercept(ChainingInterceptor.java:126)<br />
&nbsp;&nbsp; &nbsp;at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)<br />
&nbsp;&nbsp; &nbsp;at com.opensymphony.xwork2.interceptor.PrepareInterceptor.doIntercept(PrepareInterceptor.java:138)<br />
&nbsp;&nbsp; &nbsp;at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)<br />
&nbsp;&nbsp; &nbsp;at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)<br />
&nbsp;&nbsp; &nbsp;at com.opensymphony.xwork2.interceptor.I18nInterceptor.intercept(I18nInterceptor.java:165)<br />
&nbsp;&nbsp; &nbsp;at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)<br />
&nbsp;&nbsp; &nbsp;at org.apache.struts2.interceptor.ServletConfigInterceptor.intercept(ServletConfigInterceptor.java:164)<br />
&nbsp;&nbsp; &nbsp;at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)<br />
&nbsp;&nbsp; &nbsp;at com.opensymphony.xwork2.interceptor.AliasInterceptor.intercept(AliasInterceptor.java:179)<br />
&nbsp;&nbsp; &nbsp;at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)<br />
&nbsp;&nbsp; &nbsp;at com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.intercept(ExceptionMappingInterceptor.java:176)<br />
&nbsp;&nbsp; &nbsp;at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)<br />
&nbsp;&nbsp; &nbsp;at org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:52)<br />
&nbsp;&nbsp; &nbsp;at org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:488)<br />
&nbsp;&nbsp; &nbsp;at org.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction(ExecuteOperations.java:77)<br />
&nbsp;&nbsp; &nbsp;at org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:91)<br />
&nbsp;&nbsp; &nbsp;at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)<br />
&nbsp;&nbsp; &nbsp;at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)<br />
&nbsp;&nbsp; &nbsp;at org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)<br />
&nbsp;&nbsp; &nbsp;at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)<br />
&nbsp;&nbsp; &nbsp;at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)<br />
&nbsp;&nbsp; &nbsp;at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:235)<br />
&nbsp;&nbsp; &nbsp;at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)<br />
&nbsp;&nbsp; &nbsp;at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:190)<br />
&nbsp;&nbsp; &nbsp;at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:92)<br />
&nbsp;&nbsp; &nbsp;at org.jboss.web.tomcat.security.SecurityContextEstablishmentValve.process(SecurityContextEstablishmentValve.java:126)<br />
&nbsp;&nbsp; &nbsp;at org.jboss.web.tomcat.security.SecurityContextEstablishmentValve.invoke(SecurityContextEstablishmentValve.java:70)<br />
&nbsp;&nbsp; &nbsp;at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)<br />
&nbsp;&nbsp; &nbsp;at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)<br />
&nbsp;&nbsp; &nbsp;at org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:158)<br />
&nbsp;&nbsp; &nbsp;at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)<br />
&nbsp;&nbsp; &nbsp;at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:330)<br />
&nbsp;&nbsp; &nbsp;at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:829)<br />
&nbsp;&nbsp; &nbsp;at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:598)<br />
&nbsp;&nbsp; &nbsp;at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)<br />
&nbsp;&nbsp; &nbsp;at java.lang.Thread.run(Thread.java:619)<br />
Caused by: org.hibernate.StaleObjectStateException: Row was updated or deleted by another transaction (or unsaved-value mapping was incorrect): [hanvon.ebook.persistence.po.Info#123]<br />
&nbsp;&nbsp; &nbsp;at org.hibernate.event.def.DefaultMergeEventListener.entityIsDetached(DefaultMergeEventListener.java:313)<br />
&nbsp;&nbsp; &nbsp;at org.hibernate.event.def.DefaultMergeEventListener.onMerge(DefaultMergeEventListener.java:167)<br />
&nbsp;&nbsp; &nbsp;at org.hibernate.event.def.DefaultMergeEventListener.onMerge(DefaultMergeEventListener.java:81)<br />
&nbsp;&nbsp; &nbsp;at org.hibernate.impl.SessionImpl.fireMerge(SessionImpl.java:704)<br />
&nbsp;&nbsp; &nbsp;at org.hibernate.impl.SessionImpl.merge(SessionImpl.java:688)<br />
&nbsp;&nbsp; &nbsp;at org.hibernate.impl.SessionImpl.merge(SessionImpl.java:692)<br />
&nbsp;&nbsp; &nbsp;at org.hibernate.ejb.AbstractEntityManagerImpl.merge(AbstractEntityManagerImpl.java:235)<br />
&nbsp;&nbsp; &nbsp;... 197 more<br />
<br />
<br />
EJB+hibernate, table has "version"， 在对一条数据进行插入时手动设置了version的值， 没有问题。<br />
但是在对条数据进行更新操作时却报错了：org.hibernate.StaleObjectStateException: Row was updated or deleted
by another transaction (or unsaved-value mapping was incorrect):
<br />
需要在更新的的页面传递version字段同时设计隐藏，&lt;s:hidden name="info.version"&gt;&lt;/s:hidden&gt;<br />
这样就解决了问题。<img src ="http://www.blogjava.net/nkjava/aggbug/328555.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/nkjava/" target="_blank">草原上的骆驼</a> 2010-08-11 16:48 <a href="http://www.blogjava.net/nkjava/archive/2010/08/11/328555.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Spring中常用的hql查询方法(getHibernateTemplate())</title><link>http://www.blogjava.net/nkjava/archive/2010/07/22/326836.html</link><dc:creator>草原上的骆驼</dc:creator><author>草原上的骆驼</author><pubDate>Thu, 22 Jul 2010 06:15:00 GMT</pubDate><guid>http://www.blogjava.net/nkjava/archive/2010/07/22/326836.html</guid><wfw:comment>http://www.blogjava.net/nkjava/comments/326836.html</wfw:comment><comments>http://www.blogjava.net/nkjava/archive/2010/07/22/326836.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/nkjava/comments/commentRss/326836.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/nkjava/services/trackbacks/326836.html</trackback:ping><description><![CDATA[<p>一、find(String queryString);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  示例：this.getHibernateTemplate().find("from bean.User");</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  返回所有User对象</p>
<p> </p>
<p>二、find(String queryString , Object value);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  示例：this.getHibernateTemplate().find("from bean.User u where
u.name=?", "test");</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  或模糊查询：this.getHibernateTemplate().find("from bean.User u where
u.name like ?", "%test%");</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  返回name属性值为test的对象（模糊查询，返回name属性值包含test的对象）</p>
<p> </p>
<p>三、find(String queryString, Object[] values);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  示例：String hql= "from bean.User u where u.name=? and
u.password=?"</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  this.getHibernateTemplate().find(hql, new
String[]{"test", "123"});</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  返回用户名为test并且密码为123的所有User对象</p>
<p> </p>
<p>－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－</p>
<p>四、findByExample(Object exampleEntity)</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  示例：</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  User u=new User();&nbsp;&nbsp;&nbsp;&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  u.setPassword("123");//必须
符合的条件但是这两个条件时并列的（象当于sql中的and）&nbsp;&nbsp;&nbsp;&nbsp;</p>
<p>&nbsp;&nbsp;  u.setName("bb");&nbsp;&nbsp;&nbsp;&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;
list=this.getHibernateTemplate().findByExample(u,start,max);&nbsp;&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  返回：用户名为bb密码为123的对象</p>
<p> </p>
<p>五、findByExample(Object exampleEntity, int firstResult, int
maxResults)</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  示例：</p>
<p>&nbsp;&nbsp;&nbsp;  User u=new User();&nbsp;&nbsp;&nbsp;&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  u.setPassword("123");//必须
符合的条件但是这两个条件时并列的（象当于sql中的and）&nbsp;&nbsp;&nbsp;&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  u.setName("bb");&nbsp;&nbsp;&nbsp;&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
list=this.getHibernateTemplate().findByExample(u,start,max);&nbsp;&nbsp;&nbsp;&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  返回：满足用户名为bb密码为123，自start起共max个User对象。（对象从0开始计数）</p>
<p> </p>
<p>---------------------------------------------------</p>
<p>六、findByNamedParam(String queryString , String paramName , Object
value)</p>
<p> </p>
<p>&nbsp;&nbsp;&nbsp;  使用以下语句查询：</p>
<p>&nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;  String queryString = "select count(*) from bean.User u where
u.name=:myName";</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  String paramName= "myName";</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  String value= "xiyue";</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  this.getHibernateTemplate().findByNamedParam(queryString,
paramName, value);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  System.out.println(list.get(0));</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;  返回name为xiyue的User对象的条数</p>
<p> </p>
<p>七、findByNamedParam(String queryString , String[] paramName , Object[]
value)</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  示例：</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  String queryString = "select count(*) from bean.User u
where u.name=:myName and u.password=:myPassword";</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  String[] paramName= new String[]{"myName", "myPassword"};</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  String[] value= new String[]{"xiyue", "123"};</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  this.getHibernateTemplate().findByNamedParam(queryString,
paramName, value);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  返回用户名为xiyue密码为123的User对象</p>
<p> </p>
<p>八、findByNamedQuery(String queryName)</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  示例：</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  1、首先需要在User.hbm.xml中定义命名查询</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  &lt;hibernate-mapping&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  &lt;class&gt;......&lt;/class&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  &lt;query
name="queryAllUser"&gt;&lt;!--此查询被调用的名字--&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  &lt;![CDATA[</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  from bean.User</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  ]]&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  &lt;/query&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  &lt;/hibernate-mapping&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  2、如下使用查询：</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
this.getHibernateTemplate().findByNamedQuery("queryAllUser");</p>
<p> </p>
<p>九、findByNamedQuery(String queryName, Object value)</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  示例：</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  1、首先需要在User.hbm.xml中定义命名查询</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  &lt;hibernate-mapping&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  &lt;class&gt;......&lt;/class&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  &lt;query
name="queryByName"&gt;&lt;!--此查询被调用的名字--&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  &lt;![CDATA[</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  from bean.User u where u.name = ?</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  ]]&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  &lt;/query&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  &lt;/hibernate-mapping&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  2、如下使用查询：</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
this.getHibernateTemplate().findByNamedQuery("queryByName", "test");</p>
<p> </p>
<p>十、findByNamedQuery(String queryName, Object[] value)</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  示例：</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  1、首先需要在User.hbm.xml中定义命名查询</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  &lt;hibernate-mapping&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  &lt;class&gt;......&lt;/class&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  &lt;query
name="queryByNameAndPassword"&gt;&lt;!--此查询被调用的名字--&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  &lt;![CDATA[</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  from bean.User u where u.name =? and
u.password =?</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  ]]&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  &lt;/query&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  &lt;/hibernate-mapping&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  2、如下使用查询：</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  String[] values= new String[]{"test", "123"};</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
this.getHibernateTemplate().findByNamedQuery("queryByNameAndPassword" ,
values);</p>
<p> </p>
<p>十一、findByNamedQueryAndNamedParam(String queryName, String paramName,
Object value)</p>
<p>示例：</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  1、首先需要在User.hbm.xml中定义命名查询</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  &lt;hibernate-mapping&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  &lt;class&gt;......&lt;/class&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  &lt;query
name="queryByName"&gt;&lt;!--此查询被调用的名字--&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  &lt;![CDATA[</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  from bean.User u where u.name =:myName</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  ]]&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  &lt;/query&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  &lt;/hibernate-mapping&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  2、如下使用查询：</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
this.getHibernateTemplate().findByNamedQuery("queryByName" , "myName",
"test");</p>
<p> </p>
<p>十二、findByNamedQueryAndNamedParam(String queryName, String[]
paramName, Object[] value)</p>
<p> </p>
<p> </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
this.getHibernateTemplate().findByNamedQuery("queryByNameAndPassword" ,
names, values);</p>
<p> </p>
<p>十三、findByValueBean(String queryString , Object value);</p>
<p>示例：</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
1、定义一个ValueBean，属性名必须和HSQL语句中的：后面的变量名同名，此处必须至少有两个属性，分别为myName和
myPassword，使用setter方法设置属性值后</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  ValueBean valueBean= new ValueBean();</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  valueBean.setMyName("test");</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  valueBean.setMyPasswrod("123");</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  2、</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  String queryString= "from bean.User u where u.name=:myName
and u.password=:myPassword";</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  this.getHibernateTemplate().findByValueBean(queryString ,
valueBean);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p>
<p>十四、findByNamedQueryAndValueBean(String queryName , Object value);</p>
<p>示例：</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  1、首先需要在User.hbm.xml中定义命名查询</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  &lt;hibernate-mapping&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  &lt;class&gt;......&lt;/class&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  &lt;query
name="queryByNameAndPassword"&gt;&lt;!--此查询被调用的名字--&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  &lt;![CDATA[</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  from bean.User u where u.name =:myName
and u.password=:myPassword</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  ]]&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  &lt;/query&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  &lt;/hibernate-mapping&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
2、定义一个ValueBean，属性名必须和User.hbm.xml命名查询语句中的：后面的变量名同名，此处必须至少有两个属性，分别为
myName和myPassword，使用setter方法设置属性值后</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  ValueBean valueBean= new ValueBean();</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  valueBean.setMyName("test");</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  valueBean.setMyPasswrod("123");</p>
<p> </p>
<p> </p>
<p> </p>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  3、
<p> </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  String queryString= "from bean.User u where u.name=:myName
and u.password=:myPassword";</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
this.getHibernateTemplate().findByNamedQueryAndValueBean("queryByNameAndPassword",
valueBean);</p><img src ="http://www.blogjava.net/nkjava/aggbug/326836.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/nkjava/" target="_blank">草原上的骆驼</a> 2010-07-22 14:15 <a href="http://www.blogjava.net/nkjava/archive/2010/07/22/326836.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>struts2.1.6中的datatimepicker 设置</title><link>http://www.blogjava.net/nkjava/archive/2009/05/28/278313.html</link><dc:creator>草原上的骆驼</dc:creator><author>草原上的骆驼</author><pubDate>Thu, 28 May 2009 03:30:00 GMT</pubDate><guid>http://www.blogjava.net/nkjava/archive/2009/05/28/278313.html</guid><wfw:comment>http://www.blogjava.net/nkjava/comments/278313.html</wfw:comment><comments>http://www.blogjava.net/nkjava/archive/2009/05/28/278313.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/nkjava/comments/commentRss/278313.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/nkjava/services/trackbacks/278313.html</trackback:ping><description><![CDATA[添加dojo依赖<br />
&lt;dependency&gt;<br />
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&lt;groupId&gt;org.apache.struts&lt;/groupId&gt;<br />
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&lt;artifactId&gt;struts2-dojo-plugin&lt;/artifactId&gt;<br />
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&lt;version&gt;2.1.6&lt;/version&gt;<br />
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&lt;type&gt;jar&lt;/type&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&lt;scope&gt;compile&lt;/scope&gt;<br />
&lt;/dependency&gt;&amp;nbsp;<br />
=================<br />
&lt;%@ taglib prefix="s" uri="/struts-tags"%&gt;<br />
&lt;%@ taglib prefix="sx" uri="/struts-dojo-tags" %&gt;<br />
&lt;s:head theme="xhtml"/&gt;<br />
&lt;sx:head parseContent="true"/&gt;<br />
&lt;sx:datetimepicker name="dd" label="Order Date"/&gt;<img src ="http://www.blogjava.net/nkjava/aggbug/278313.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/nkjava/" target="_blank">草原上的骆驼</a> 2009-05-28 11:30 <a href="http://www.blogjava.net/nkjava/archive/2009/05/28/278313.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JSF学习笔记开始</title><link>http://www.blogjava.net/nkjava/archive/2009/05/15/270935.html</link><dc:creator>草原上的骆驼</dc:creator><author>草原上的骆驼</author><pubDate>Fri, 15 May 2009 13:49:00 GMT</pubDate><guid>http://www.blogjava.net/nkjava/archive/2009/05/15/270935.html</guid><wfw:comment>http://www.blogjava.net/nkjava/comments/270935.html</wfw:comment><comments>http://www.blogjava.net/nkjava/archive/2009/05/15/270935.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/nkjava/comments/commentRss/270935.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/nkjava/services/trackbacks/270935.html</trackback:ping><description><![CDATA[从今天开始记录jsf学习的笔记，大概用一周的时间掌握好jsf<img src ="http://www.blogjava.net/nkjava/aggbug/270935.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/nkjava/" target="_blank">草原上的骆驼</a> 2009-05-15 21:49 <a href="http://www.blogjava.net/nkjava/archive/2009/05/15/270935.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>struts2中如何获取Session,HttpServletRequest,HttpServletResponse</title><link>http://www.blogjava.net/nkjava/archive/2009/03/29/262733.html</link><dc:creator>草原上的骆驼</dc:creator><author>草原上的骆驼</author><pubDate>Sun, 29 Mar 2009 08:40:00 GMT</pubDate><guid>http://www.blogjava.net/nkjava/archive/2009/03/29/262733.html</guid><wfw:comment>http://www.blogjava.net/nkjava/comments/262733.html</wfw:comment><comments>http://www.blogjava.net/nkjava/archive/2009/03/29/262733.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/nkjava/comments/commentRss/262733.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/nkjava/services/trackbacks/262733.html</trackback:ping><description><![CDATA[1,How do we get access to the session?<br />
<br />
You can obtain the session attributes by asking the ActionContext or implementing SessionAware. Implementing SessionAware is preferred.<br />
<h2>Ask the ActionContext</h2>
<p>&nbsp;</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" alt="" /><span style="color: #000000">Map&nbsp;attibutes&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;ActionContext.getContext().getSession();</span></div>
<p>&nbsp;</p>
<h2>Implement SessionAware</h2>
<p>The session attributes are available on the ActionContext instance, which is made available via ThreadLocal.<img class="emoticon" height="16" alt="" src="http://cwiki.apache.org/confluence/images/icons/emoticons/star_yellow.gif" width="16" align="absMiddle" border="0" /> _Preferred_</p>
<ul>
    <li>Ensure that <tt>servlet-config</tt> Interceptor is included in the Action's stack.
    <ul>
        <li><img class="emoticon" height="16" alt="" src="http://cwiki.apache.org/confluence/images/icons/emoticons/information.gif" width="16" align="absMiddle" border="0" /> <em>The default stack already includes</em> <tt><em>servlet-config</em></tt><em>.</em></li>
    </ul>
    </li>
    <li>Edit the Action so that it implements the SessionAware interface.
    <ul>
        <li>The SessionAware interface expects a <tt>setSession</tt> method. You may wish to include a companion <tt>getSession</tt> method.</li>
    </ul>
    </li>
    <li>At runtime, call <tt>getSession</tt> to obtain a Map representing the session attributes.</li>
    <li>Any changes made to the session Map are reflected in the actual HttpSessionRequest. You may insert and remove session attributes as needed.</li>
    <li>
    <div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" alt="" /><span style="color: #000000">Map&nbsp;parameters&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.getSession();</span></div>
    </li>
</ul>
To unit test a SessionAware Action, create your own Map with the pertinent session attributes and call <tt>setSession</tt> as part of the test's <tt>setUp</tt> method.<br />
<br />
<br />
2,How can we access the HttpServletRequest<br />
<br />
You can obtain the request by asking the ActionContext or implementing ServletRequestAware. Implementing ServletRequestAware is preferred.<br />
<h2>Ask the ActionContext</h2>
The request is available on the ActionContext instance, which is made available via ThreadLocal.<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" alt="" /><span style="color: #000000">HttpServletRequest&nbsp;request&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;ServletActionContext.getRequest();</span></div>
<h2>Implement ServletRequestAware</h2>
<p><em>Preferred</em></p>
<ul>
    <li>Ensure that <tt>servlet-config</tt> Interceptor is included in the Action's stack.
    <ul>
        <li><img class="emoticon" height="16" alt="" src="http://cwiki.apache.org/confluence/images/icons/emoticons/information.gif" width="16" align="absMiddle" border="0" /> <em>The default stack already includes</em> <tt><em>servlet-config</em></tt><em>.</em></li>
    </ul>
    </li>
    <li>Edit the Action so that it implements the ServletRequestAware interface.
    <ul>
        <li>The ServletRequestAware interface expects a <tt>setServletRequest</tt> method. You may wish to include a companion <tt>getServletRequest</tt> method.</li>
    </ul>
    </li>
    <li>At runtime, call <tt>getServletRequest</tt> to obtain a reference to the request object. </li>
</ul>
It is more difficult to test Actions with runtime dependencies on HttpServletRequest. Only implement ServletRequestAware as a last resort. If the use case cannot be solved by one of the other <tt>servet-config</tt> interfaces (ApplicationAware, SessionAware, ParameterAware), consider whether an custom Interceptor could be used instead of Action code. (Review how <tt>servlet-config</tt> works for examples of what can be done.)<br />
<br />
<br />
3，How can we access the HttpServletResponse<br />
<br />
You can obtain the request by asking the ActionContext or implementing ServletResponseAware. Implementing ServletResponseAware is preferred.<br />
<br />
<h2>Ask the ActionContext</h2>
<br />
The response is available on the ActionContext instance, which is made available via ThreadLocal.<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" alt="" /><span style="color: #000000">HttpServletResponse&nbsp;response&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;ServletActionContext.getResponse();</span></div>
<br />
<h2>Implement ServletResponseAware</h2>
<br />
<p><em>Preferred</em></p>
<ul>
    <li>Ensure that <tt>servlet-config</tt> Interceptor is included in the Action's stack.
    <ul>
        <li><img class="emoticon" height="16" alt="" src="http://cwiki.apache.org/confluence/images/icons/emoticons/information.gif" width="16" align="absMiddle" border="0" /> <em>The default stack already includes</em> <tt><em>servlet-config</em></tt><em>.</em></li>
    </ul>
    </li>
    <li>Edit the Action so that it implements the ServletResponseAware interface.
    <ul>
        <li>The ServletResponseAware interface expects a <tt>setServletResponse</tt> method. You may wish to include a companion <tt>getServletResponse</tt> method.</li>
    </ul>
    </li>
    <li>At runtime, call <tt>getServletResponse</tt> to obtain a reference to the response object. </li>
</ul>
t is more difficult to test Actions with runtime dependencies on HttpServletReponse. Only implement ServletResponseAware as a last resort. A better approach to solving a use case involving the response may be with a custom <a title="Result Types" href="http://struts.apache.org/2.0.14/docs/result-types.html">Result Type</a>.<img src ="http://www.blogjava.net/nkjava/aggbug/262733.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/nkjava/" target="_blank">草原上的骆驼</a> 2009-03-29 16:40 <a href="http://www.blogjava.net/nkjava/archive/2009/03/29/262733.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>No mapping found for dependency [type=java.lang.String, name='actionPackages'] </title><link>http://www.blogjava.net/nkjava/archive/2009/03/29/262705.html</link><dc:creator>草原上的骆驼</dc:creator><author>草原上的骆驼</author><pubDate>Sun, 29 Mar 2009 03:33:00 GMT</pubDate><guid>http://www.blogjava.net/nkjava/archive/2009/03/29/262705.html</guid><wfw:comment>http://www.blogjava.net/nkjava/comments/262705.html</wfw:comment><comments>http://www.blogjava.net/nkjava/archive/2009/03/29/262705.html#Feedback</comments><slash:comments>5</slash:comments><wfw:commentRss>http://www.blogjava.net/nkjava/comments/commentRss/262705.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/nkjava/services/trackbacks/262705.html</trackback:ping><description><![CDATA[java.lang.RuntimeException: java.lang.RuntimeException: com.opensymphony.xwork2.inject.DependencyException: com.opensymphony.xwork2.inject.ContainerImpl$MissingDependencyException: No mapping found for dependency [type=java.lang.String, name='actionPackages'] in public void org.apache.struts2.config.ClasspathPackageProvider.setActionPackages(java.lang.String).<br />
&nbsp;&nbsp; &nbsp;at com.opensymphony.xwork2.inject.ContainerBuilder$4.create(ContainerBuilder.java:132)<br />
&nbsp;&nbsp; &nbsp;at com.opensymphony.xwork2.inject.Scope$2$1.create(Scope.java:51)<br />
&nbsp;&nbsp; &nbsp;at com.opensymphony.xwork2.inject.ContainerImpl.getInstance(ContainerImpl.java:507)<br />
&nbsp;&nbsp; &nbsp;at com.opensymphony.xwork2.inject.ContainerImpl$8.call(ContainerImpl.java:540)<br />
&nbsp;&nbsp; &nbsp;at com.opensymphony.xwork2.inject.ContainerImpl.callInContext(ContainerImpl.java:574)<br />
&nbsp;&nbsp; &nbsp;at com.opensymphony.xwork2.inject.ContainerImpl.getInstance(ContainerImpl.java:538)<br />
&nbsp;&nbsp; &nbsp;at com.opensymphony.xwork2.config.impl.DefaultConfiguration.reloadContainer(DefaultConfiguration.java:198)<br />
&nbsp;&nbsp; &nbsp;at com.opensymphony.xwork2.config.ConfigurationManager.getConfiguration(ConfigurationManager.java:55)<br />
&nbsp;&nbsp; &nbsp;at org.apache.struts2.dispatcher.Dispatcher.init_PreloadConfiguration(Dispatcher.java:360)<br />
&nbsp;&nbsp; &nbsp;at org.apache.struts2.dispatcher.Dispatcher.init(Dispatcher.java:403)<br />
&nbsp;&nbsp; &nbsp;at org.apache.struts2.dispatcher.FilterDispatcher.init(FilterDispatcher.java:190)<br />
&nbsp;&nbsp; &nbsp;at org.mortbay.jetty.servlet.FilterHolder.doStart(FilterHolder.java:97)<br />
&nbsp;&nbsp; &nbsp;at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50)<br />
&nbsp;&nbsp; &nbsp;at org.mortbay.jetty.servlet.ServletHandler.initialize(ServletHandler.java:620)<br />
&nbsp;&nbsp; &nbsp;at org.mortbay.jetty.servlet.Context.startContext(Context.java:140)<br />
&nbsp;&nbsp; &nbsp;at org.mortbay.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1233)<br />
&nbsp;&nbsp; &nbsp;at org.mortbay.jetty.handler.ContextHandler.doStart(ContextHandler.java:517)<br />
&nbsp;&nbsp; &nbsp;at org.mortbay.jetty.webapp.WebAppContext.doStart(WebAppContext.java:460)<br />
&nbsp;&nbsp; &nbsp;at org.mortbay.jetty.plugin.Jetty6PluginWebAppContext.doStart(Jetty6PluginWebAppContext.java:124)<br />
&nbsp;&nbsp; &nbsp;at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50)<br />
&nbsp;&nbsp; &nbsp;at org.mortbay.jetty.plugin.AbstractJettyRunMojo.restartWebApp(AbstractJettyRunMojo.java:441)<br />
&nbsp;&nbsp; &nbsp;at org.mortbay.jetty.plugin.AbstractJettyRunMojo$1.filesChanged(AbstractJettyRunMojo.java:402)<br />
&nbsp;&nbsp; &nbsp;at org.mortbay.util.Scanner.reportBulkChanges(Scanner.java:486)<br />
&nbsp;&nbsp; &nbsp;at org.mortbay.util.Scanner.reportDifferences(Scanner.java:352)<br />
&nbsp;&nbsp; &nbsp;at org.mortbay.util.Scanner.scan(Scanner.java:280)<br />
&nbsp;&nbsp; &nbsp;at org.mortbay.util.Scanner$1.run(Scanner.java:232)<br />
&nbsp;&nbsp; &nbsp;at java.util.TimerThread.mainLoop(Timer.java:512)<br />
&nbsp;&nbsp; &nbsp;at java.util.TimerThread.run(Timer.java:462)<br />
Caused by: java.lang.RuntimeException: com.opensymphony.xwork2.inject.DependencyException: com.opensymphony.xwork2.inject.ContainerImpl$MissingDependencyException: No mapping found for dependency [type=java.lang.String, name='actionPackages'] in public void org.apache.struts2.config.ClasspathPackageProvider.setActionPackages(java.lang.String).<br />
&nbsp;&nbsp; &nbsp;at com.opensymphony.xwork2.inject.ContainerImpl.inject(ContainerImpl.java:495)<br />
&nbsp;&nbsp; &nbsp;at com.opensymphony.xwork2.inject.ContainerImpl$7.call(ContainerImpl.java:532)<br />
&nbsp;&nbsp; &nbsp;at com.opensymphony.xwork2.inject.ContainerImpl.callInContext(ContainerImpl.java:581)<br />
&nbsp;&nbsp; &nbsp;at com.opensymphony.xwork2.inject.ContainerImpl.inject(ContainerImpl.java:530)<br />
&nbsp;&nbsp; &nbsp;at com.opensymphony.xwork2.config.impl.LocatableFactory.create(LocatableFactory.java:32)<br />
&nbsp;&nbsp; &nbsp;at com.opensymphony.xwork2.inject.ContainerBuilder$4.create(ContainerBuilder.java:130)<br />
&nbsp;&nbsp; &nbsp;... 27 more<br />
Caused by: com.opensymphony.xwork2.inject.DependencyException: com.opensymphony.xwork2.inject.ContainerImpl$MissingDependencyException: No mapping found for dependency [type=java.lang.String, name='actionPackages'] in public void org.apache.struts2.config.ClasspathPackageProvider.setActionPackages(java.lang.String).<br />
&nbsp;&nbsp; &nbsp;at com.opensymphony.xwork2.inject.ContainerImpl.addInjectorsForMembers(ContainerImpl.java:144)<br />
&nbsp;&nbsp; &nbsp;at com.opensymphony.xwork2.inject.ContainerImpl.addInjectorsForMethods(ContainerImpl.java:113)<br />
&nbsp;&nbsp; &nbsp;at com.opensymphony.xwork2.inject.ContainerImpl.addInjectors(ContainerImpl.java:90)<br />
&nbsp;&nbsp; &nbsp;at com.opensymphony.xwork2.inject.ContainerImpl$1.create(ContainerImpl.java:71)<br />
&nbsp;&nbsp; &nbsp;at com.opensymphony.xwork2.inject.ContainerImpl$1.create(ContainerImpl.java:69)<br />
&nbsp;&nbsp; &nbsp;at com.opensymphony.xwork2.inject.util.ReferenceCache$CallableCreate.call(ReferenceCache.java:150)<br />
&nbsp;&nbsp; &nbsp;at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)<br />
&nbsp;&nbsp; &nbsp;at java.util.concurrent.FutureTask.run(FutureTask.java:138)<br />
&nbsp;&nbsp; &nbsp;at com.opensymphony.xwork2.inject.util.ReferenceCache.internalCreate(ReferenceCache.java:76)<br />
&nbsp;&nbsp; &nbsp;at com.opensymphony.xwork2.inject.util.ReferenceCache.get(ReferenceCache.java:116)<br />
&nbsp;&nbsp; &nbsp;at com.opensymphony.xwork2.inject.ContainerImpl$ConstructorInjector.&lt;init&gt;(ContainerImpl.java:348)<br />
&nbsp;&nbsp; &nbsp;at com.opensymphony.xwork2.inject.ContainerImpl$5.create(ContainerImpl.java:305)<br />
&nbsp;&nbsp; &nbsp;at com.opensymphony.xwork2.inject.ContainerImpl$5.create(ContainerImpl.java:304)<br />
&nbsp;&nbsp; &nbsp;at com.opensymphony.xwork2.inject.util.ReferenceCache$CallableCreate.call(ReferenceCache.java:150)<br />
&nbsp;&nbsp; &nbsp;at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)<br />
&nbsp;&nbsp; &nbsp;at java.util.concurrent.FutureTask.run(FutureTask.java:138)<br />
&nbsp;&nbsp; &nbsp;at com.opensymphony.xwork2.inject.util.ReferenceCache.internalCreate(ReferenceCache.java:76)<br />
&nbsp;&nbsp; &nbsp;at com.opensymphony.xwork2.inject.util.ReferenceCache.get(ReferenceCache.java:116)<br />
&nbsp;&nbsp; &nbsp;at com.opensymphony.xwork2.inject.ContainerImpl.getConstructor(ContainerImpl.java:594)<br />
&nbsp;&nbsp; &nbsp;at com.opensymphony.xwork2.inject.ContainerImpl.inject(ContainerImpl.java:491)<br />
&nbsp;&nbsp; &nbsp;... 32 more<br />
Caused by: com.opensymphony.xwork2.inject.ContainerImpl$MissingDependencyException: No mapping found for dependency [type=java.lang.String, name='actionPackages'] in public void org.apache.struts2.config.ClasspathPackageProvider.setActionPackages(java.lang.String).<br />
&nbsp;&nbsp; &nbsp;at com.opensymphony.xwork2.inject.ContainerImpl.createParameterInjector(ContainerImpl.java:235)<br />
&nbsp;&nbsp; &nbsp;at com.opensymphony.xwork2.inject.ContainerImpl.getParametersInjectors(ContainerImpl.java:225)<br />
&nbsp;&nbsp; &nbsp;at com.opensymphony.xwork2.inject.ContainerImpl$MethodInjector.&lt;init&gt;(ContainerImpl.java:287)<br />
&nbsp;&nbsp; &nbsp;at com.opensymphony.xwork2.inject.ContainerImpl$3.create(ContainerImpl.java:117)<br />
&nbsp;&nbsp; &nbsp;at com.opensymphony.xwork2.inject.ContainerImpl$3.create(ContainerImpl.java:115)<br />
&nbsp;&nbsp; &nbsp;at com.opensymphony.xwork2.inject.ContainerImpl.addInjectorsForMembers(ContainerImpl.java:141)<br />
&nbsp;&nbsp; &nbsp;... 51 more<br />
2009-03-29 11:23:51.305::WARN:&nbsp; Failed startup of context org.mortbay.jetty.plugin.Jetty6PluginWebAppContext@8932e8{/ssh,D:"workplace"ssh"src"main"webapp}<br />
java.lang.RuntimeException: java.lang.RuntimeException: com.opensymphony.xwork2.inject.DependencyException: com.opensymphony.xwork2.inject.ContainerImpl$MissingDependencyException: No mapping found for dependency [type=java.lang.String, name='actionPackages'] in public void org.apache.struts2.config.ClasspathPackageProvider.setActionPackages(java.lang.String).<br />
&nbsp;&nbsp; &nbsp;at com.opensymphony.xwork2.inject.ContainerBuilder$4.create(ContainerBuilder.java:132)<br />
&nbsp;&nbsp; &nbsp;at com.opensymphony.xwork2.inject.Scope$2$1.create(Scope.java:51)<br />
&nbsp;&nbsp; &nbsp;at com.opensymphony.xwork2.inject.ContainerImpl.getInstance(ContainerImpl.java:507)<br />
&nbsp;&nbsp; &nbsp;at com.opensymphony.xwork2.inject.ContainerImpl$8.call(ContainerImpl.java:540)<br />
&nbsp;&nbsp; &nbsp;at com.opensymphony.xwork2.inject.ContainerImpl.callInContext(ContainerImpl.java:574)<br />
&nbsp;&nbsp; &nbsp;at com.opensymphony.xwork2.inject.ContainerImpl.getInstance(ContainerImpl.java:538)<br />
&nbsp;&nbsp; &nbsp;at com.opensymphony.xwork2.config.impl.DefaultConfiguration.reloadContainer(DefaultConfiguration.java:198)<br />
&nbsp;&nbsp; &nbsp;at com.opensymphony.xwork2.config.ConfigurationManager.getConfiguration(ConfigurationManager.java:55)<br />
&nbsp;&nbsp; &nbsp;at org.apache.struts2.dispatcher.Dispatcher.init_PreloadConfiguration(Dispatcher.java:360)<br />
&nbsp;&nbsp; &nbsp;at org.apache.struts2.dispatcher.Dispatcher.init(Dispatcher.java:403)<br />
&nbsp;&nbsp; &nbsp;at org.apache.struts2.dispatcher.FilterDispatcher.init(FilterDispatcher.java:190)<br />
&nbsp;&nbsp; &nbsp;at org.mortbay.jetty.servlet.FilterHolder.doStart(FilterHolder.java:97)<br />
&nbsp;&nbsp; &nbsp;at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50)<br />
&nbsp;&nbsp; &nbsp;at org.mortbay.jetty.servlet.ServletHandler.initialize(ServletHandler.java:620)<br />
&nbsp;&nbsp; &nbsp;at org.mortbay.jetty.servlet.Context.startContext(Context.java:140)<br />
&nbsp;&nbsp; &nbsp;at org.mortbay.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1233)<br />
&nbsp;&nbsp; &nbsp;at org.mortbay.jetty.handler.ContextHandler.doStart(ContextHandler.java:517)<br />
&nbsp;&nbsp; &nbsp;at org.mortbay.jetty.webapp.WebAppContext.doStart(WebAppContext.java:460)<br />
&nbsp;&nbsp; &nbsp;at org.mortbay.jetty.plugin.Jetty6PluginWebAppContext.doStart(Jetty6PluginWebAppContext.java:124)<br />
&nbsp;&nbsp; &nbsp;at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50)<br />
&nbsp;&nbsp; &nbsp;at org.mortbay.jetty.plugin.AbstractJettyRunMojo.restartWebApp(AbstractJettyRunMojo.java:441)<br />
&nbsp;&nbsp; &nbsp;at org.mortbay.jetty.plugin.AbstractJettyRunMojo$1.filesChanged(AbstractJettyRunMojo.java:402)<br />
&nbsp;&nbsp; &nbsp;at org.mortbay.util.Scanner.reportBulkChanges(Scanner.java:486)<br />
&nbsp;&nbsp; &nbsp;at org.mortbay.util.Scanner.reportDifferences(Scanner.java:352)<br />
&nbsp;&nbsp; &nbsp;at org.mortbay.util.Scanner.scan(Scanner.java:280)<br />
&nbsp;&nbsp; &nbsp;at org.mortbay.util.Scanner$1.run(Scanner.java:232)<br />
&nbsp;&nbsp; &nbsp;at java.util.TimerThread.mainLoop(Timer.java:512)<br />
&nbsp;&nbsp; &nbsp;at java.util.TimerThread.run(Timer.java:462)<br />
Caused by: java.lang.RuntimeException: com.opensymphony.xwork2.inject.DependencyException: com.opensymphony.xwork2.inject.ContainerImpl$MissingDependencyException: No mapping found for dependency [type=java.lang.String, name='actionPackages'] in public void org.apache.struts2.config.ClasspathPackageProvider.setActionPackages(java.lang.String).<br />
&nbsp;&nbsp; &nbsp;at com.opensymphony.xwork2.inject.ContainerImpl.inject(ContainerImpl.java:495)<br />
&nbsp;&nbsp; &nbsp;at com.opensymphony.xwork2.inject.ContainerImpl$7.call(ContainerImpl.java:532)<br />
&nbsp;&nbsp; &nbsp;at com.opensymphony.xwork2.inject.ContainerImpl.callInContext(ContainerImpl.java:581)<br />
&nbsp;&nbsp; &nbsp;at com.opensymphony.xwork2.inject.ContainerImpl.inject(ContainerImpl.java:530)<br />
&nbsp;&nbsp; &nbsp;at com.opensymphony.xwork2.config.impl.LocatableFactory.create(LocatableFactory.java:32)<br />
&nbsp;&nbsp; &nbsp;at com.opensymphony.xwork2.inject.ContainerBuilder$4.create(ContainerBuilder.java:130)<br />
&nbsp;&nbsp; &nbsp;... 27 more<br />
Caused by: com.opensymphony.xwork2.inject.DependencyException: com.opensymphony.xwork2.inject.ContainerImpl$MissingDependencyException: No mapping found for dependency [type=java.lang.String, name='actionPackages'] in public void org.apache.struts2.config.ClasspathPackageProvider.setActionPackages(java.lang.String).<br />
&nbsp;&nbsp; &nbsp;at com.opensymphony.xwork2.inject.ContainerImpl.addInjectorsForMembers(ContainerImpl.java:144)<br />
&nbsp;&nbsp; &nbsp;at com.opensymphony.xwork2.inject.ContainerImpl.addInjectorsForMethods(ContainerImpl.java:113)<br />
&nbsp;&nbsp; &nbsp;at com.opensymphony.xwork2.inject.ContainerImpl.addInjectors(ContainerImpl.java:90)<br />
&nbsp;&nbsp; &nbsp;at com.opensymphony.xwork2.inject.ContainerImpl$1.create(ContainerImpl.java:71)<br />
&nbsp;&nbsp; &nbsp;at com.opensymphony.xwork2.inject.ContainerImpl$1.create(ContainerImpl.java:69)<br />
&nbsp;&nbsp; &nbsp;at com.opensymphony.xwork2.inject.util.ReferenceCache$CallableCreate.call(ReferenceCache.java:150)<br />
&nbsp;&nbsp; &nbsp;at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)<br />
&nbsp;&nbsp; &nbsp;at java.util.concurrent.FutureTask.run(FutureTask.java:138)<br />
&nbsp;&nbsp; &nbsp;at com.opensymphony.xwork2.inject.util.ReferenceCache.internalCreate(ReferenceCache.java:76)<br />
&nbsp;&nbsp; &nbsp;at com.opensymphony.xwork2.inject.util.ReferenceCache.get(ReferenceCache.java:116)<br />
&nbsp;&nbsp; &nbsp;at com.opensymphony.xwork2.inject.ContainerImpl$ConstructorInjector.&lt;init&gt;(ContainerImpl.java:348)<br />
&nbsp;&nbsp; &nbsp;at com.opensymphony.xwork2.inject.ContainerImpl$5.create(ContainerImpl.java:305)<br />
&nbsp;&nbsp; &nbsp;at com.opensymphony.xwork2.inject.ContainerImpl$5.create(ContainerImpl.java:304)<br />
&nbsp;&nbsp; &nbsp;at com.opensymphony.xwork2.inject.util.ReferenceCache$CallableCreate.call(ReferenceCache.java:150)<br />
&nbsp;&nbsp; &nbsp;at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)<br />
&nbsp;&nbsp; &nbsp;at java.util.concurrent.FutureTask.run(FutureTask.java:138)<br />
&nbsp;&nbsp; &nbsp;at com.opensymphony.xwork2.inject.util.ReferenceCache.internalCreate(ReferenceCache.java:76)<br />
&nbsp;&nbsp; &nbsp;at com.opensymphony.xwork2.inject.util.ReferenceCache.get(ReferenceCache.java:116)<br />
&nbsp;&nbsp; &nbsp;at com.opensymphony.xwork2.inject.ContainerImpl.getConstructor(ContainerImpl.java:594)<br />
&nbsp;&nbsp; &nbsp;at com.opensymphony.xwork2.inject.ContainerImpl.inject(ContainerImpl.java:491)<br />
&nbsp;&nbsp; &nbsp;... 32 more<br />
Caused by: com.opensymphony.xwork2.inject.ContainerImpl$MissingDependencyException: No mapping found for dependency [type=java.lang.String, name='actionPackages'] in public void org.apache.struts2.config.ClasspathPackageProvider.setActionPackages(java.lang.String).<br />
&nbsp;&nbsp; &nbsp;at com.opensymphony.xwork2.inject.ContainerImpl.createParameterInjector(ContainerImpl.java:235)<br />
[INFO] Restart completed at Sun Mar 29 11:23:51 CST 2009<br />
&nbsp;&nbsp; &nbsp;at com.opensymphony.xwork2.inject.ContainerImpl.getParametersInjectors(ContainerImpl.java:225)<br />
&nbsp;&nbsp; &nbsp;at com.opensymphony.xwork2.inject.ContainerImpl$MethodInjector.&lt;init&gt;(ContainerImpl.java:287)<br />
&nbsp;&nbsp; &nbsp;at com.opensymphony.xwork2.inject.ContainerImpl$3.create(ContainerImpl.java:117)<br />
&nbsp;&nbsp; &nbsp;at com.opensymphony.xwork2.inject.ContainerImpl$3.create(ContainerImpl.java:115)<br />
&nbsp;&nbsp; &nbsp;at com.opensymphony.xwork2.inject.ContainerImpl.addInjectorsForMembers(ContainerImpl.java:141)<br />
&nbsp;&nbsp; &nbsp;... 51 more<br />
<br />
出现这个问题，可能是添加了struts2-codebehind包，去除这个包就可以了<img src ="http://www.blogjava.net/nkjava/aggbug/262705.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/nkjava/" target="_blank">草原上的骆驼</a> 2009-03-29 11:33 <a href="http://www.blogjava.net/nkjava/archive/2009/03/29/262705.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Eclipse+Maven+jetty+Struts2+Hibernate3开发注册登陆模块</title><link>http://www.blogjava.net/nkjava/archive/2009/03/26/262198.html</link><dc:creator>草原上的骆驼</dc:creator><author>草原上的骆驼</author><pubDate>Thu, 26 Mar 2009 10:59:00 GMT</pubDate><guid>http://www.blogjava.net/nkjava/archive/2009/03/26/262198.html</guid><wfw:comment>http://www.blogjava.net/nkjava/comments/262198.html</wfw:comment><comments>http://www.blogjava.net/nkjava/archive/2009/03/26/262198.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/nkjava/comments/commentRss/262198.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/nkjava/services/trackbacks/262198.html</trackback:ping><description><![CDATA[<p>今天在blog上看到 <a href="http://www.blogjava.net/rongxh7/archive/2008/11/29/243456.html">http://www.blogjava.net/rongxh7/archive/2008/11/29/243456.html</a>&nbsp;这个帖子，其中开发工具是Myeclipse,&nbsp; 这段时间很少写代码， 闲来无事就把他的代码整合一下，放在我用的平台上，很顺利，希望能给大家有所帮助。<br />
<br />
开发平台：Eclipse3.4+maven2.0<br />
我安装Eclipse了maven插件，也可以不安装， 用maven生成了maven-archetype-webapp项目，首先先手动的把所有的目录补充好，下图为我的程序目录。<br />
<img height="617" alt="" src="http://www.blogjava.net/images/blogjava_net/nkjava/1.jpg" width="251" border="0" /><br />
<br />
其中pom.xml如下：<br />
</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" alt="" /><span style="color: #0000ff">&lt;</span><span style="color: #800000">project&nbsp;</span><span style="color: #ff0000">xmlns</span><span style="color: #0000ff">="http://maven.apache.org/POM/4.0.0"</span><span style="color: #ff0000">&nbsp;xmlns:xsi</span><span style="color: #0000ff">="http://www.w3.org/2001/XMLSchema-instance"</span><span style="color: #ff0000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" alt="" />&nbsp;&nbsp;xsi:schemaLocation</span><span style="color: #0000ff">="http://maven.apache.org/POM/4.0.0&nbsp;http://maven.apache.org/maven-v4_0_0.xsd"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" alt="" />&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">modelVersion</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">4.0.0</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">modelVersion</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" alt="" />&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">groupId</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">cn.edu.nku</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">groupId</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" alt="" />&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">artifactId</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">blog</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">artifactId</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" alt="" />&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">packaging</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">war</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">packaging</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" alt="" />&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">version</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">0.0.1-SNAPSHOT</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">version</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" alt="" />&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">blog&nbsp;Maven&nbsp;Webapp</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" alt="" />&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">url</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">http://maven.apache.org</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">url</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" alt="" />&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">dependencies</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">dependency</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">groupId</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">junit</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">groupId</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">artifactId</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">junit</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">artifactId</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">version</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">3.8.1</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">version</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">scope</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">test</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">scope</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">dependency</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">dependency</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">groupId</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">org.apache.struts</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">groupId</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">artifactId</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">struts2-core</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">artifactId</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">version</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">2.1.6</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">version</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">scope</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">compile</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">scope</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">dependency</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">dependency</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">groupId</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">org.hibernate</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">groupId</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">artifactId</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">hibernate</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">artifactId</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">version</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">3.2.6.ga</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">version</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">scope</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">compile</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">scope</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">dependency</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">dependency</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">groupId</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">mysql</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">groupId</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">artifactId</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">mysql-connector-java</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">artifactId</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">version</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">5.1.6</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">version</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">type</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">jar</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">type</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">scope</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">compile</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">scope</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">dependency</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" alt="" />&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">dependencies</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" alt="" />&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">build</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">finalName</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">blog</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">finalName</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">plugins</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">plugin</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">groupId</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">org.mortbay.jetty</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">groupId</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">artifactId</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">maven-jetty-plugin</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">artifactId</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">version</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">6.1.15.pre0</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">version</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">plugin</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">plugin</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">groupId</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">org.apache.maven.plugins</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">groupId</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">artifactId</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">maven-compiler-plugin</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">artifactId</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">version</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">2.0.2</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">version</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">configuration</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">source</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">1.5</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">source</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">target</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">1.5</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">target</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">encoding</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">UTF-8</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">encoding</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">configuration</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">plugin</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">plugins</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" alt="" />&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">build</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" alt="" /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">project</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" alt="" /></span></div>
<p><br />
在windows操作系统下（当然linux也可以，linux是在终端下）cd到项目的目录，mvn jetty:run， 即可看到系统。<br />
源码付在下面，请大家参考。<br />
用eclipse导入后，修改hibernate.cfg.xml里面的mysql的配置，首先要先建立相应的数据库，然后运行cn.edu.nku.common.ExportDB.java生成数据库里的表，。<br />
<br />
<br />
有一点还希望大家能给出指点，用maven+jetty部署项目， 每次都要关闭jetty，然后再运行mvn jetty:run，才能重新部署，不知道有没有好的办法，进行热部署。希望高人能指点迷津。<br />
<br />
<br />
<a title="源码下载" href="/Files/nkjava/blog.rar">源码下载</a></p><img src ="http://www.blogjava.net/nkjava/aggbug/262198.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/nkjava/" target="_blank">草原上的骆驼</a> 2009-03-26 18:59 <a href="http://www.blogjava.net/nkjava/archive/2009/03/26/262198.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>记事贴2：Struts的Validator并不好用！转载</title><link>http://www.blogjava.net/nkjava/archive/2009/03/19/260848.html</link><dc:creator>草原上的骆驼</dc:creator><author>草原上的骆驼</author><pubDate>Thu, 19 Mar 2009 09:45:00 GMT</pubDate><guid>http://www.blogjava.net/nkjava/archive/2009/03/19/260848.html</guid><wfw:comment>http://www.blogjava.net/nkjava/comments/260848.html</wfw:comment><comments>http://www.blogjava.net/nkjava/archive/2009/03/19/260848.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/nkjava/comments/commentRss/260848.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/nkjava/services/trackbacks/260848.html</trackback:ping><description><![CDATA[<table align="center" width="96%">
    <tbody>
        <tr>
            <td align="center">记事贴2：Struts的Validator并不好用！</td>
        </tr>
        <tr>
            <td align="right">2005年 02月01日</td>
        </tr>
        <tr>
            <td>使用正则表达式，使email字段中不能输入汉字。最近用AppFuse开发一个BS的系统，
            用的是Struts的MVC部分，使用Validator进行验证，结果发现Validator的验证EMail并不好，EMail中可以输入汉字，然后
            到服务器端验证，我配置了客户端验证，也可以验证Email的格式，但如果输入的是正确的格式，但是包含汉字它却验证不出来，但到了后台又管用了，不知道
            为什么，时间紧，我也没时间去研究它，找到一个方法可以解决这个问题，虽不完美，却也凑合：<br />
            <br />
            使用正则表达式，将原代码<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;html:text property="email" styleId="email" size="50"/&gt;<br />
            注释，换成<br />
            <br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
            &lt;input type="text" name="email" value='&lt;c:out
            value="${userForm.email}"/&gt;'
            onkeyup="value=value.replace(/["u4E00-"u9FA5]/g,'')"
            onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/["u4E00-"u9FA5]/g,''))"<br />
            &nbsp;/&gt;<br />
            就解决了问题，用户如果输入汉字，则自动删除汉字，而且如果使用向左的箭头向前移动使光标前移，则根本移动不了，光标始终在行尾，只能删除后面的字符，再重新写，其实最好是在EMail的自动生成的脚本中提示，目前先这样实现吧，将来再说！</td>
        </tr>
    </tbody>
</table><img src ="http://www.blogjava.net/nkjava/aggbug/260848.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/nkjava/" target="_blank">草原上的骆驼</a> 2009-03-19 17:45 <a href="http://www.blogjava.net/nkjava/archive/2009/03/19/260848.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>hibernate的 fetch lazy inverse cascade</title><link>http://www.blogjava.net/nkjava/archive/2009/03/09/258655.html</link><dc:creator>草原上的骆驼</dc:creator><author>草原上的骆驼</author><pubDate>Mon, 09 Mar 2009 11:41:00 GMT</pubDate><guid>http://www.blogjava.net/nkjava/archive/2009/03/09/258655.html</guid><wfw:comment>http://www.blogjava.net/nkjava/comments/258655.html</wfw:comment><comments>http://www.blogjava.net/nkjava/archive/2009/03/09/258655.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/nkjava/comments/commentRss/258655.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/nkjava/services/trackbacks/258655.html</trackback:ping><description><![CDATA[<div style="text-align: center;">1.fetch 和 lazy 主要用于级联查询(select) 而 inverse和cascade主要用于级联增、加删、除修改(sava-update,delete)
<br />
2.想要删除父表中的记录,但希望子表中记录的外键引用值设为null的情况：
<br />
&nbsp;&nbsp; 父表的映射文件应该如下配置：
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;set name="emps" inverse="false" cascade="all"&gt;
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;key&gt;
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;column name="DEPTNO" precision="2" scale="0" /&gt;
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/key&gt;
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;one-to-many class="com.sino.hibernate.Emp" /&gt;
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/set&gt;
<br />
&nbsp;&nbsp;&nbsp; inverse="false"是必须的，cascade可有可无，并且子表的映射文件中inverse没必要设置，cascade也可以不设置，如果设置就设置成为cascade="none"或者cascade="sava-update"
<br />
&lt;many-to-one name="dept" class="com.sino.hibernate.Dept" fetch="select" cascade="save-update"&gt;
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;column name="DEPTNO" precision="2" scale="0" /&gt;
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/many-to-one&gt;</div>
<br />
<br />
3.关于级联查找
<br />
&nbsp; 对子表的持久化类进行查找的时候，会一起把子表持久化类中的父表持久化类的对象一起查询出来，在页面中可以直接取值的情况：
<br />
&nbsp;&nbsp;&nbsp; 要把父表的映射文件中设置 lazy 属性如下：
<br />
&lt;class name="com.sino.hibernate.Emp" table="EMP" schema="SCOTT" lazy="false"&gt;
<br />
这样就可以直接在页面中取值 (类似于这样的取值 client.cmanager.id)
<br />
如果没有设置 lazy="false" 则会抛出异常
<br />
javax.servlet.ServletException: Exception thrown by getter for property cmanager.realName of bean cl
<br />
在Action中取值的话就会抛出
<br />
could not initialize proxy - the owning Session was closed的异常<img src ="http://www.blogjava.net/nkjava/aggbug/258655.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/nkjava/" target="_blank">草原上的骆驼</a> 2009-03-09 19:41 <a href="http://www.blogjava.net/nkjava/archive/2009/03/09/258655.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JPA annotation 笔记</title><link>http://www.blogjava.net/nkjava/archive/2009/02/22/256123.html</link><dc:creator>草原上的骆驼</dc:creator><author>草原上的骆驼</author><pubDate>Sun, 22 Feb 2009 14:08:00 GMT</pubDate><guid>http://www.blogjava.net/nkjava/archive/2009/02/22/256123.html</guid><wfw:comment>http://www.blogjava.net/nkjava/comments/256123.html</wfw:comment><comments>http://www.blogjava.net/nkjava/archive/2009/02/22/256123.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/nkjava/comments/commentRss/256123.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/nkjava/services/trackbacks/256123.html</trackback:ping><description><![CDATA[@Id 顾名思义，就不多说了。
<br />
<br />
@GeneratedValue：主键的产生策略，通过strategy属性指定。
<br />
默认情况下，JPA自动选择一个最适合底层数据库的主键生成策略，如SqlServer对应identity，MySql对应auto increment。
<br />
在javax.persistence.GenerationType中定义了以下几种可供选择的策略：
<br />
1) IDENTITY：表自增键字段，Oracle不支持这种方式；
<br />
2) AUTO： JPA自动选择合适的策略，是默认选项；
<br />
3) SEQUENCE：通过序列产生主键，通过@SequenceGenerator注解指定序列名，MySql不支持这种方式；
<br />
4) TABLE：通过表产生主键，框架借由表模拟序列产生主键，使用该策略可以使应用更易于数据库移植。
<br />
<br />
这里我重点来说下GenerationType.TABLE的情况。
<br />
把库表的主键auto_increment去掉
<br />
CREATE TABLE `t_creditcard` (&nbsp; &nbsp;<br />
&nbsp; `id` int(11) NOT NULL,&nbsp; &nbsp;<br />
&nbsp; `cardName` varchar(20) NOT NULL,&nbsp; &nbsp;<br />
&nbsp; PRIMARY KEY&nbsp; (`id`)&nbsp; &nbsp;<br />
) ENGINE=InnoDB DEFAULT CHARSET=utf8;<br />
<br />
CREATE TABLE `id_gen` (<br />
&nbsp; `gen_name` varchar(80) NOT NULL default '',<br />
&nbsp; `gen_val` int(11) default NULL,<br />
&nbsp; PRIMARY KEY&nbsp; (`gen_name`)<br />
) ENGINE=InnoDB DEFAULT CHARSET=gbk;<br />
<br />
@Entity<br />
@Table(name="t_creditcard")<br />
public class CreditCard{<br />
&nbsp;&nbsp; &nbsp;@TableGenerator(name = "CardPkGen",<br />
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; table = "ID_GEN",<br />
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pkColumnName = "GEN_NAME", <br />
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pkColumnValue = "Card_Gen", <br />
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; valueColumnName = "GEN_VAL", <br />
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; allocationSize = 1<br />
&nbsp;&nbsp; &nbsp;)<br />
&nbsp;&nbsp; &nbsp;@Id<br />
&nbsp;&nbsp; &nbsp;@GeneratedValue(strategy=GenerationType.TABLE,generator="CardPkGen")<br />
&nbsp;&nbsp; &nbsp;private Long id;<br />
<br />
<br />
@GeneratedValue：定义主键生成策略，这里因为使用的是TableGenerator，所以，主键的生成策略为GenerationType.TABLE，生成主键策略的名称则为前面定义的"CardPkGen&#8221;。
<br />
@TableGenerator各属性含义如下：
<br />
name：表示该表主键生成策略的名称，这个名字可以自定义，它被引用在@GeneratedValue中设置的"generator"值中
<br />
table：表示表生成策略所持久化的表名，说简单点就是一个管理其它表主键的表，本例中，这个表名为ID_GEN
<br />
pkColumnName：表生成器中的列名，用来存放其它表的主键键名，一般来说一个主键键名对应一张其他表要获取主键值对应的key。这个值要与数据库的列对应，比如GEN_NAME对应id_gen中的主键名称
<br />
pkColumnValue：该实体所要访问对应主键生成表的主键的key值
<br />
valueColumnName：表生成器所要对应pkColumnName主键的下一个值，这个值也要和表生成器中的列名对应
<br />
allocationSize：表示每次主键值增加的大小，例如设置成1，则表示每次创建新记录后自动加1，默认为50
<br />
<br />
按照以上结构，如果我们执行:
<br />
CreditCard cc = new CreditCard();<br />
cc.setCardName("测试卡");<br />
cc = ccDao.persist(cc);<br />
<br />
<br />
<pre style="display: none;" name="code" class="java">CreditCard cc = new CreditCard();
cc.setCardName("测试卡");
cc = ccDao.persist(cc);
</pre>
<br />
表id_gen内的数据为
<br />
<br />
GEN_NAME GEN_VALUE
<br />
Card_Gen&nbsp; 2
<br />
<br />
表t_creditcard内的数据为
<br />
<br />
ID CARDNAME
<br />
1&nbsp;&nbsp; 测试卡
<br />
<br />
再执行一次程序
<br />
表id_gen内的数据为
<br />
<br />
GEN_NAME GEN_VALUE
<br />
Card_Gen&nbsp; 3
<br />
<br />
表t_creditcard内的数据为
<br />
<br />
ID CARDNAME
<br />
1&nbsp;&nbsp; 测试卡
<br />
2&nbsp;&nbsp; 测试卡
<br />
<br />
把实体类的annation改写为:
<br />
@Entity<br />
@Table(name="t_creditcard")<br />
public class CreditCard{<br />
&nbsp;&nbsp; &nbsp;@TableGenerator(name = "CardPkGen",<br />
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; table = "ID_GEN",<br />
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pkColumnName = "GEN_NAME", <br />
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pkColumnValue = "Card_Gen2", <br />
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; valueColumnName = "GEN_VAL", <br />
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; allocationSize = 1<br />
&nbsp;&nbsp; &nbsp;)<br />
&nbsp;&nbsp; &nbsp;@Id<br />
&nbsp;&nbsp; &nbsp;@GeneratedValue(strategy=GenerationType.TABLE,generator="CardPkGen")<br />
&nbsp;&nbsp; &nbsp;private Long id;<br />
<br />
<br />
注意看，pkColumnValue已经被改为Card_Gen2。
<br />
<br />
执行程序，插入数据失败，抛出t_creditcard表主键重复的异常，因为这次去名为Card_Gen2的这个主键生成器去拿来的id为1，t_creditcard表之前已经插入过一条主键为1的数据了。
<br />
<br />
表id_gen内的数据为
<br />
<br />
GEN_NAME GEN_VALUE
<br />
Card_Gen&nbsp; 3
<br />
Card_Gen2&nbsp; 2
<br />
<br />
表t_creditcard内的数据还是为
<br />
<br />
ID CARDNAME
<br />
1&nbsp;&nbsp; 测试卡
<br />
2&nbsp;&nbsp; 测试卡
<br />
<br />
结论：在有些应用中，我们可以适用@TableGenerator来统一管理我们数据库中的各个表的主键生成，如果我们的应用中有10个实体需要使用自动生成的主键，只需在每个实体中使用@TableGenerator并给出不同的pkColumnValue值就可以了。
<br />
<br />
@Id还有一些另类的用法:
<br />
<br />
1.使用系统毫秒数作为主键
<br />
@Id<br />
private Long id = System.currentTimeMillis();<br />
CreditCard cc = new CreditCard();<br />
cc.setCardName("测试卡");<br />
cc = ccDao.persist(cc);<br />
<br />
<br />
2.使用UUID作为主键
<br />
@Id<br />
private String id;;<br />
<br />
CreditCard cc = new CreditCard();<br />
cc.setId(UUID.randomUUID().toString());<br />
cc.setCardName("测试卡");<br />
cc = ccDao.persist(cc);<br />
<br />
<br />
<br />
别忘了修改库表中主键字段的大小和对应的类型.<img src ="http://www.blogjava.net/nkjava/aggbug/256123.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/nkjava/" target="_blank">草原上的骆驼</a> 2009-02-22 22:08 <a href="http://www.blogjava.net/nkjava/archive/2009/02/22/256123.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>A Blog Application with Warp (continued)(2)</title><link>http://www.blogjava.net/nkjava/archive/2009/02/17/255131.html</link><dc:creator>草原上的骆驼</dc:creator><author>草原上的骆驼</author><pubDate>Tue, 17 Feb 2009 08:30:00 GMT</pubDate><guid>http://www.blogjava.net/nkjava/archive/2009/02/17/255131.html</guid><wfw:comment>http://www.blogjava.net/nkjava/comments/255131.html</wfw:comment><comments>http://www.blogjava.net/nkjava/archive/2009/02/17/255131.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/nkjava/comments/commentRss/255131.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/nkjava/services/trackbacks/255131.html</trackback:ping><description><![CDATA[<div>
<h3><font color="#ff9900">A Blog Application with Warp</font> <em>(continued)</em><em><br />
</em></h3>
<p>First check out the <a href="http://www.jroller.com/page/dhanji/?anchor=a_blog_application_in_warp">previous tutorial on creating a Blog application</a>
to get yourself going. In this article, I'll show you how to add forms
and a bit of interactivity. You will learn the following Warp concepts:</p>
<ul>
    <li>Event Handling and Navigation<br />
    </li>
    <li>Events and the Button component</li>
    <li>The TextField and TextArea components</li>
    <li>Page scopes<br />
    </li>
</ul>
<p>Continuing
from the previous tutorial, let's now make a "compose new entry" page.
This will be very similar to the other pages with some different
components: </p>
<pre>&lt;html&gt;<br />
<p>  &lt;head w:component="meta"&gt;<br />
&lt;title&gt;Warp :: Compose New Blog Entry&lt;/title&gt;<br />
&lt;/head&gt;</p>
<p>&nbsp; &lt;body w:component="frame"&gt;</p>
<p>    &lt;input w:component="textfield" w:bind="newBlog.subject" /&gt;<br />
&lt;input w:component="textarea" w:bind="newBlog.text" /&gt;</p>
<p>    &lt;input w:component="button" w:label="post blog" /&gt;<br />
&lt;/body&gt;</p>
<p>&lt;/html&gt;&nbsp;</p>
</pre>
<p>The first important part to notice is that the &lt;head&gt; tag is
decorated with a <em>Meta </em>component. This is very important indeed--along with the <em>Frame </em>component on &lt;body&gt;, <em>Meta </em>forms the foundation for Warp page behavior. </p>
<p>The other things to notice are the input components. <em>TextField </em>is
a simple text box, we use the attribute w:bind to tell Warp where to
bind the user input to. In this case I am giving it a path to a
property of newBlog, which is a variable in my page object. OK, let's
create ourselves this property:</p>
<pre>@URIMapping("/blogs/compose")<br />
public class ComposeBlog {<br />
private Blog newBlog = new Blog("", "");    //an empty blog<br />
<strong><br />
@OnEvent<br />
public void save() {<br />
System.out.println(newBlog.getSubject() + " - " </strong><br />
<strong>				+ newBlog.getText());<br />
}<br />
public Blog getNewBlog() {<br />
return newBlog;<br />
}<br />
}<br />
</strong></pre>
<p><strong>Here I have provided an event handler method named <em>save()</em>. By tagging it with the <em>@OnEvent </em>annotation,
I have told Warp to invoke this method whenever the page triggers an
event (in our case, the clicking of the button). First, the data is
synchronized between the input components (<em>TextField </em>and <em>TextArea</em>) and the bound properties, then the event handler is fired which prints out their content.<br />
</strong></p>
<p><strong>Let's
add some more functionality, where our list of blogs (from the previous
tutorial) actually gets updated. For this we first need to add a method
in ListBlogs that stores a new blog entry into the map. That part is
easy enough:</strong></p>
<pre><strong>@URIMapping("/home")<br />
public class ListBlogs {<br />
private Map&lt;String, Blog&gt; blogs = new HashMap&lt;String, Blog&gt;();<br />
</strong>
<p><strong>    public ListBlogs() { .. }</strong></p>
<p><strong><strong>    public void addNewBlog(Blog blog) {<br />
blogs.put(blog.getSubject(), blog);<br />
}</strong></strong></p>
<p><strong>    //...<br />
}&nbsp;</strong></p>
</pre>
<p><strong>&nbsp;Ok
now let us invoke the store method from our compose page's event
handler (remember Page-injection from the previous tutorial):<br />
</strong></p>
<pre><strong>@URIMapping("/blogs/compose")<br />
public class ComposeBlog {<br />
private Blog newBlog = new Blog("", "");    //an empty blog<br />
<br />
<strong>    @Inject @Page ListBlogs listBlogs;</strong><br />
<br />
@OnEvent<br />
public void save() {<br />
<strong>	listBlogs.addNewBlog(newBlog);</strong><br />
}<br />
<br />
public Blog getNewBlog() {<br />
return newBlog;<br />
}<br />
}</strong></pre>
<p><strong>We're almost there, now when I save the entry, I want it to come back to the blog list. This follows the <em>post-and-redirect </em>design
pattern common in web development. Warp supports this in an intuitive,
type-safe manner. After saving the blog in my event handler, I simply
return the page object that I want shown:<br />
</strong></p>
<pre><strong>    @OnEvent<br />
public ListBlogs save() {<br />
listBlogs.addNewBlog(newBlog);<br />
<strong><br />
return listBlogs;</strong><br />
}<br />
</strong></pre>
<p><strong>Neat! Now when you click the "post blog" button, it runs the <em>save()</em>
method and redirects you to back to the blog list. You can return any
type of object from an event handler so long as it is a page object (or
a subclass of one). You can also redirect to an arbitrary URL or use
JSP-style forwarding instead of <em>post-and-redirect</em>. Check out the <a href="http://code.google.com/p/warp-core/wiki/EventHandling">Event Handling guide</a> on the wiki for details.<br />
<br />
One last step concerning <em>Page scoping</em>.
Typically, Warp obtains an instance of a page object from the Guice
injector on every request. This effectively means that any page object
that is not bound (see Guice user guide for information on scopes) with
a given scope is instantiated once per request. Since our HashMap is a
property of the ListBlogs page, this means that when we redirect (in a
new request), the Map gets blown away and we lose our new entry.<br />
<br />
To
fix this, we can scope the ListBlogs page object as a singleton. This
means that ListBlogs is only created once for the lifetime of the
webapp, and the Map of entries is retained. <br />
</strong></p>
<pre><strong>@URIMapping("/home")<br />
<strong>@Singleton</strong><br />
public class ListBlogs { .. }</strong></pre>
<p><strong>You should be careful about relying on page objects to maintain
state and do a lot of thinking before declaring a scope on a page.</strong></p>
<p><strong>The
singleton scope is an easy fix for our example but in the real world
you will want to store the blogs in a more permanent storage medium
(such as a database or persistent store). In my next tutorial, we'll
see how to do just that using JPA and Hibernate. <br />
</strong></p>
<strong>              <!--
<p>
<?php wp_link_pages(); ?>
</p>
-->
<!--
<?php trackback_rdf(); ?>
-->
</strong>
<div><strong>&nbsp;</strong></div>
</div>
<!--
<?php comments_template(); // Get wp-comments.php template ?>
-->
<img src ="http://www.blogjava.net/nkjava/aggbug/255131.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/nkjava/" target="_blank">草原上的骆驼</a> 2009-02-17 16:30 <a href="http://www.blogjava.net/nkjava/archive/2009/02/17/255131.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>A Blog Application with Wideplay's Warp Framework(1)</title><link>http://www.blogjava.net/nkjava/archive/2009/02/17/255130.html</link><dc:creator>草原上的骆驼</dc:creator><author>草原上的骆驼</author><pubDate>Tue, 17 Feb 2009 08:29:00 GMT</pubDate><guid>http://www.blogjava.net/nkjava/archive/2009/02/17/255130.html</guid><wfw:comment>http://www.blogjava.net/nkjava/comments/255130.html</wfw:comment><comments>http://www.blogjava.net/nkjava/archive/2009/02/17/255130.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/nkjava/comments/commentRss/255130.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/nkjava/services/trackbacks/255130.html</trackback:ping><description><![CDATA[<h3><font color="#ff9900">A Blog Application with Wideplay's</font> <font color="#000000"><em>Warp Framework</em></font><em><br />
</em></h3>
<p>First check out the <a href="http://www.jroller.com/page/dhanji/?anchor=a_hello_world_application_in">Hello World example</a>
to get yourself going. In this article, I'll show you how to knock
together a simple Blog application where you can browse and read blog
entries. You will learn the following Warp concepts:</p>
<ul>
    <li>Page Injection <br />
    </li>
    <li>RESTful behavior and the HyperLink component</li>
    <li>The Table and Column components</li>
    <li>Simple Internationalization (i18n)<br />
    </li>
</ul>
<p>First let's create ourselves a data model object representing a blog. This will be a simple POJO with 2 fields: <em>subject </em>and <em>text</em>. </p>
<pre>public class Blog {<br />
<br />
private String subject;<br />
<br />
private String text;<br />
<br />
<p>    //don't forget your getters/setters here...<br />
<br />
}</p>
<br />
</pre>
<p>OK, now we make a list page where you can see a list of all
the blogs currently in the system. For simplicity, we will store blogs
in a HashMap. The Page object class for this list should look something
like this:<br />
</p>
<pre>@URIMapping("<strong>/blogs</strong>")<br />
<br />
public class ListBlogs {<br />
<br />
private final Map&lt;String, Blog&gt; blogs = new HashMap&lt;String, Blog&gt;();<br />
<br />
<br />
<br />
public ListBlogs() {<br />
<br />
//setup a blog as dummy data<br />
<br />
blog = new Blog("MyBlog", "Warp is so great...");<br />
<br />
blogs.put(blog.getSubject(), blog);<br />
<br />
}<br />
<br />
<br />
<br />
public Collection&lt;Blog&gt; getBlogList() {<br />
<br />
return blogs.values();<br />
<br />
}<br />
<br />
}<br />
<br />
<br />
<br />
</pre>
<p><font face="times new roman,times,serif">Note the @URIMapping annotation which tells warp to map this page object to the URI "/blogs". The getter for property <em>blogList</em>,
simply returns a list of all the values contained in our HashMap of
blogs. For the interesting part, let's make a template to layout our
blogs:</font></p>
<pre><br />
<br />
&lt;?xml version="1.0" encoding="UTF-8"?&gt;<br />
<br />
&lt;html&gt;<br />
<br />
<br />
<br />
&lt;head&gt;<br />
<br />
&lt;title&gt;Warp :: Blogs&lt;/title&gt;<br />
<br />
&lt;/head&gt;<br />
<br />
<br />
<br />
&lt;body w:component="frame"&gt;<br />
<br />
&lt;h1&gt;A list of blog entries&lt;/h1&gt;<br />
<br />
<br />
<br />
<strong>    &lt;table w:component="table" w:items="${blogList}"/&gt;</strong><br />
<br />
<br />
<br />
&lt;/body&gt;<br />
<br />
&lt;/html&gt;<br />
<br />
<br />
<br />
<br />
<br />
</pre>
<p>This
is a very simple template. Inside our body we have only one real
component (Table) and we pass it our list of blogs in the w:items
property that we declared above. Go ahead and run the app now and point
your browser to: <a href="http://localhost:8080/blogs">http://localhost:8080/blogs</a>,
you should see a table with 2 columns (subject and text) corresponding
to the Blog data model object we declared above. Table is smart enough
to inspect the items given it and construct an appropriate set of
display columns. The rows of the table reflect the data in each
instance of the Blog object in our HashMap. Nice!</p>
<p>OK, having the
property names as the title of each column is not ideal--let's
customize this. Customizing is as simple as adding a properties file in
the same package as our Blog class, with the same name:<br />
</p>
<pre><em>Blog.properties:</em><br />
<br />
subject=Subject of Blog<br />
<br />
text=Content<br />
<br />
<br />
<br />
</pre>
<p>Now,
run the app again and you should see the column names changed. In this
way, you can also achieve internationalization (i18n). If you want to
hide a property (i.e. not render a column for it), specify an empty key
(so to hide <em>subject</em>, you would have just "<font face="courier new,courier,monospace">subject=</font>").</p>
<p>OK, let's create a view blog page now. This page will display one blog entry. Let's start with the view portion (called <strong>ViewBlog.html</strong>):</p>
<pre>&lt;?xml version="1.0" encoding="UTF-8"?&gt;<br />
<br />
&lt;html&gt;<br />
<br />
<br />
<br />
&lt;head w:component="meta"&gt;<br />
<br />
&lt;title&gt;Reading :: ${blog.subject}&lt;/title&gt;<br />
<br />
&lt;/head&gt;<br />
<br />
<br />
<br />
&lt;body w:component="frame"&gt;<br />
<br />
&lt;h1&gt;Read...&lt;/h1&gt;<br />
<br />
&lt;h3&gt;${blog.subject}&lt;/h3&gt;<br />
<br />
<br />
<br />
${blog.text}<br />
<br />
<br />
<br />
&lt;a href="../home"&gt;back to list&lt;/a&gt;<br />
<br />
&lt;/body&gt;</pre>
<p>And its Page object: <br />
<br />
</p>
<pre>@URIMapping("/blog")<br />
<br />
public class ViewBlog {<br />
<br />
private Blog blog;<br />
<br />
<br />
<br />
//getters/setters...<br />
<br />
}<br />
<br />
<br />
<br />
</pre>
<p>Ok, this is fairly simple, but how does it know what blog to display? Let us <a href="http://code.google.com/p/warp-core/wiki/URIMapping">use a RESTful idiom to achieve this</a>. First, change your ViewBlog page object so that it takes a parameter indicating what blog to show:</p>
<pre>@URIMapping("/blog/<strong>{subject}</strong>")<br />
<br />
public class ViewBlog {<br />
<br />
private Blog blog;<br />
<br />
<br />
<br />
@OnEvent @PreRender<br />
<br />
public void init(String subject) { .. }<br />
<br />
}<br />
<br />
<br />
<br />
</pre>
<p>Ok, this tells warp that when the URL http://localhost:8080/blog/<strong>myblog</strong> is requested, to inject anything matching the <strong>{subject}</strong>
portion of the @URIMapping (in this case "myblog") to the @PreRender
event handler method. Hold on, we're not done yet--we still need to
obtain the appropriate blog from our HashMap which is stored in the
ListBlogs page. This is done via page-injection:</p>
<pre>
<pre>@URIMapping("/blog/{subject}")<br />
<br />
public class ViewBlog {<br />
<br />
private Blog blog;<br />
<br />
<br />
<br />
<strong>@Inject @Page private ListBlogs listBlogs;</strong><br />
<br />
<br />
<br />
@OnEvent @PreRender<br />
<br />
public void init(String subject) {<br />
<br />
<strong>this.blog = listBlogs.getBlog(subject);</strong><br />
<br />
}<br />
<br />
}</pre>
<br />
</pre>
<p>Finally, we need to modify ListBlogs and give it a <em>getBlog()</em> method to fetch a Blog by subject:</p>
<pre>
<pre>@URIMapping("/blogs")<br />
<br />
public class ListBlogs {<br />
<br />
private Map&lt;String, Blog&gt; blogs = new HashMap&lt;String, Blog&gt;();<br />
<br />
<br />
<br />
public ListBlogs() { .. }<br />
<br />
<br />
<br />
public Collection&lt;Blog&gt; getBlogList() {<br />
<br />
return blogs.values();<br />
<br />
}<br />
<br />
<br />
<br />
<strong>public Blog getBlog(String subject) {<br />
<br />
return blogs.get(subject);<br />
<br />
}</strong><br />
<br />
}<br />
<br />
</pre>
<br />
</pre>
<p>Ok,
now let's wire the pages together so clicking on a blog in the list
will take us to the view page for that blog. I want to make the subject
of the blog clickable, so let's use the Column component to override
the default behavior of table (which just prints out the subject as
text):<br />
</p>
<pre>
<pre>
<pre>&lt;?xml version="1.0" encoding="UTF-8"?&gt;<br />
<br />
&lt;html&gt;<br />
<br />
<br />
<br />
&lt;head w:component="meta"&gt;<br />
<br />
&lt;title&gt;Warp :: Blogs&lt;/title&gt;<br />
<br />
&lt;/head&gt;<br />
<br />
<br />
<br />
&lt;body w:component="frame"&gt;<br />
<br />
&lt;h1&gt;A list of blog entries&lt;/h1&gt;<br />
<br />
<br />
<br />
&lt;table w:component="table" w:items="${blogList}" <strong>class="mytableCss"</strong>&gt;<br />
<br />
<strong>&lt;td w:component="column" w:property="subject"&gt;<br />
<br />
&lt;a w:component="hyperlink" w:target="/blog" </strong><br />
<br />
<strong>		   w:topic="${subject}"&gt;${subject}&lt;/a&gt;<br />
<br />
&lt;/td&gt;</strong><br />
<br />
&lt;/table&gt;<br />
<br />
<br />
<br />
&lt;/body&gt;<br />
<br />
&lt;/html&gt;<br />
<br />
<br />
<br />
</pre>
<br />
</pre>
<br />
</pre>
<p>Notice
that we nest the hyperlink component inside the column override. This
tells the Table component not to draw the column, instead to use our
overridden layout instead. The attribute w:target simply tells the
hyperlink the URI that we're linking (in this case /blog, which is the
ViewBlog's mapping) and w:topic tells hyperlink to append the subject
of the blog to the URI. So for a blog entitled "MyBlog," Warp will
generate a URI as follows: /blog/MyBlog. And "MyBlog" gets stripped out
and injected into the ViewBlog page's @PreRender handler so it can set
it up. </p>
<p>Also notice the addition of a non-Warp attribute <em>class</em> to the &lt;table&gt; tag,
which refers to the CSS class I want to style my table with. This is a
useful tool for both for previewability as well as the end result HTML--generally whatever HTML attributes you
write on a component will be passed through the final rendered page.</p>
Done!
<img src ="http://www.blogjava.net/nkjava/aggbug/255130.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/nkjava/" target="_blank">草原上的骆驼</a> 2009-02-17 16:29 <a href="http://www.blogjava.net/nkjava/archive/2009/02/17/255130.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>A Hello World Application in Warp</title><link>http://www.blogjava.net/nkjava/archive/2009/02/17/255127.html</link><dc:creator>草原上的骆驼</dc:creator><author>草原上的骆驼</author><pubDate>Tue, 17 Feb 2009 08:28:00 GMT</pubDate><guid>http://www.blogjava.net/nkjava/archive/2009/02/17/255127.html</guid><wfw:comment>http://www.blogjava.net/nkjava/comments/255127.html</wfw:comment><comments>http://www.blogjava.net/nkjava/archive/2009/02/17/255127.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/nkjava/comments/commentRss/255127.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/nkjava/services/trackbacks/255127.html</trackback:ping><description><![CDATA[<h3><font color="#ff9900">Getting started with Wideplay's</font> <font color="#000000"><em>Warp Framework</em></font><em><br />
</em></h3>
<p>First
download warp and its dependencies from the link provided above. For
convenience, dependencies are packaged along with the warp core library
in a zip file named <a href="http://warp-core.googlecode.com/svn/trunk/dist/warp-with-deps.zip">warp-with-deps.zip</a>.
Unzip and place the provided jars into your application's WEB-INF/lib
folder. Create a web.xml file in WEB-INF, and add the following filter
mapping to it:</p>
<pre>&lt;?xml version="1.0" encoding="UTF-8"?&gt;<br />
<br />
&lt;web-app version="2.4"<br />
<br />
xmlns="http://java.sun.com/xml/ns/j2ee"<br />
<br />
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"<br />
<br />
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" &gt;<br />
<br />
</pre>
<pre>	&lt;context-param&gt;<br />
<br />
&lt;param-name&gt;<strong>warp.module</strong>&lt;/param-name&gt;<br />
<br />
&lt;param-value&gt;<strong>my.example.MyModule</strong>&lt;/param-value&gt;</pre>
<pre>	&lt;/context-param&gt;<br />
<br />
<br />
<br />
&lt;filter&gt;<br />
<br />
&lt;filter-name&gt;warp&lt;/filter-name&gt;<br />
<br />
&lt;filter-class&gt;com.wideplay.warp.WarpFilter&lt;/filter-class&gt;<br />
<br />
&lt;/filter&gt;<br />
<br />
<br />
<br />
&lt;filter-mapping&gt;<br />
<br />
&lt;filter-name&gt;warp&lt;/filter-name&gt;<br />
<br />
&lt;url-pattern&gt;/*&lt;/url-pattern&gt;<br />
<br />
&lt;/filter-mapping&gt;<br />
<br />
&lt;/web-app&gt;</pre>
<pre><br />
<br />
</pre>
<p>Note that the parameter <strong>warp.module</strong> must specify the class name of your Warp Module class. This is typically a class that looks like so:</p>
<pre>package my.example;&nbsp;</pre>
<pre>public class MyModule implements WarpModule {</pre>
<pre> 	public void configure(Warp warp) {</pre>
<pre>		//nothing required yet<br />
<br />
</pre>
<pre> 	}<br />
<br />
</pre>
<pre>}&nbsp;</pre>
<pre>&nbsp;</pre>
<p>Now, this tells Warp to look in package <strong>my.example</strong>
for page classes (and resources) to register to the runtime. Every
class in the WarpModule's package and its sub-packages are considered
candidates for page object registration (but only those that have
corresponding templates are typically registered). You can also perform
a lot of setup work in the WarpModule as we will see later on.&nbsp;</p>
<p>In
Warp, a page is represented by a page object, and any manipulation of
that page or its state is driven from the page object. OK, let's create
a simple page to say hello to the world:</p>
<pre>package my.example;</pre>
<pre>public class Start {<br />
<br />
private String message = "hello warp!";</pre>
<pre> 	//getter...&nbsp;<br />
<br />
public String getMessage() { return message; }&nbsp;&nbsp;&nbsp;  <br />
<br />
</pre>
<pre>}&nbsp;</pre>
<pre>&nbsp;</pre>
<p>In Warp, page objects are always be accompanied by a template (in
this case a standard HTML template) to tell Warp how to decorate and
layout the content in the page. As a convention, templates are named
the same as page classes (in our case, Start.html in the / directory):</p>
<pre>&lt;?xml version="1.0" encoding="UTF-8"?&gt;<br />
<br />
&lt;html xmlns:w="http://www.wideplay.com/warp/schema/warp_core.xsd"<br />
<br />
xmlns="http://www.w3.org/1999/xhtml"<br />
<br />
xml:lang="en" lang="en"&gt;<br />
<br />
<br />
<br />
&lt;head&gt;<br />
<br />
&lt;title&gt;Warp :: Hello World&lt;/title&gt;<br />
<br />
&lt;/head&gt;<br />
<br />
<br />
<br />
&lt;body w:component="frame"&gt;<br />
<br />
&lt;p&gt;</pre>
<pre><strong>			${message}</strong><br />
<br />
&lt;/p&gt;<br />
<br />
&lt;/body&gt;<br />
<br />
&lt;/html&gt;</pre>
<pre><br />
<br />
</pre>
<p>Note that the only unusual part about this template is the attribute on body named <strong>w:component</strong> which tells Warp to decorate the <span style="font-family: courier new,monospace;">&lt;body&gt; </span>tag with a <em><strong>Frame </strong></em>component. The <em>Frame </em>component is used on nearly every page and is a kind of "wrapper" for the page (and should always be present on the <span style="font-family: courier new,monospace;">&lt;body&gt;</span> tag) which creates some necessary conditions for the rendering of the page by the Warp framework.</p>
<p>The other noteworthy part of the template is the <span style="font-family: courier new,monospace;">${message}</span> expression, which is a property expression telling Warp to look into the corresponding page object for a property named <strong><em>message</em></strong>. If you look above, we've declared message as a String in our <span style="font-family: courier new,monospace;">Start </span>page class.&nbsp;</p>
<p>You should now have a web application with roughly the following structure:<br />
</p>
<pre>	/</pre>
<pre>	 - Start.html&nbsp;</pre>
<pre>	 - WEB-INF/</pre>
<pre>		- web.xml</pre>
<pre>		+ lib/</pre>
<pre>		+ classes/<br />
<br />
</pre>
<p>Running the web aplication and pointing your browser at http://localhost:8080/Start now will produce the following page output:</p>
<p><a imageanchor="1" href="http://www.wideplay.com/Warp-hello-world.png/Warp-hello-world-full.jpg" style="border: 0pt none ; background-color: transparent; clear: left; margin-bottom: 1em; margin-right: 1em; float: left;"><img style="border: 0pt none ;" src="http://www.wideplay.com/Warp-hello-world.png/Warp-hello-world-full.jpg" alt="" /></a><br />
</p>
<p style="text-align: right;"><br />
</p>
<h3>Contribute to the <span style="color: #ff9900;">Warp Framework</span><br />
</h3>
Get involved! Email me on the <a href="http://groups.google.com/group/warp-core">Warp mailing list</a> if you want to help or have a problem to report. Problems with Guice should be reported on the <span style="text-decoration: underline;">G</span><a href="http://groups.google.com/group/google-guice">uice user mailing list</a>.
<img src ="http://www.blogjava.net/nkjava/aggbug/255127.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/nkjava/" target="_blank">草原上的骆驼</a> 2009-02-17 16:28 <a href="http://www.blogjava.net/nkjava/archive/2009/02/17/255127.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Struts2.0的Struts.properties(转)</title><link>http://www.blogjava.net/nkjava/archive/2009/02/14/254700.html</link><dc:creator>草原上的骆驼</dc:creator><author>草原上的骆驼</author><pubDate>Sat, 14 Feb 2009 13:09:00 GMT</pubDate><guid>http://www.blogjava.net/nkjava/archive/2009/02/14/254700.html</guid><wfw:comment>http://www.blogjava.net/nkjava/comments/254700.html</wfw:comment><comments>http://www.blogjava.net/nkjava/archive/2009/02/14/254700.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/nkjava/comments/commentRss/254700.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/nkjava/services/trackbacks/254700.html</trackback:ping><description><![CDATA[<font face="Courier New"><strong>struts.action.extension</strong><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; The URL extension to use to determine if the request is meant for a Struts action <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 用URL扩展名来确定是否这个请求是被用作Struts action，其实也就是设置 action的后缀，例如login.do的"'do"'字。</font>
<p><font face="Courier New"><strong>struts.configuration</strong><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; The org.apache.struts2.config.Configuration implementation class<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; org.apache.struts2.config.Configuration接口名</font></p>
<p><font face="Courier New"><strong>struts.configuration.files</strong><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; A list of configuration files automatically loaded by Struts <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; struts自动加载的一个配置文件列表</font></p>
<p><font face="Courier New"><strong>struts.configuration.xml.reload</strong><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Whether to reload the XML configuration or not<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 是否加载xml配置(true,false)</font></p>
<p><font face="Courier New"><strong>struts.continuations.package</strong><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; The package containing actions that use Rife continuations<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 含有actions的完整连续的package名称</font></p>
<p><font face="Courier New"><strong>struts.custom.i18n.resources<br />
</strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Location of additional localization properties files to load <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 加载附加的国际化属性文件（不包含.properties后缀）</font></p>
<p><font face="Courier New"><strong>struts.custom.properties</strong><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Location of additional configuration properties files to load<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 加载附加的配置文件的位置</font></p>
<p><br />
<font face="Courier New"><strong>struts.devMode</strong><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Whether Struts is in development mode or not<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 是否为struts开发模式</font></p>
<p><font face="Courier New"><strong>struts.dispatcher.parametersWorkaround</strong><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Whether to use a Servlet request parameter workaround necessary for some versions of WebLogic<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; （某些版本的weblogic专用）是否使用一个servlet请求参数工作区（PARAMETERSWORKAROUND）</font></p>
<p><font face="Courier New"><strong>struts.enable.DynamicMethodInvocation</strong><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Allows one to disable dynamic method invocation from the URL<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 允许动态方法调用</font></p>
<p><font face="Courier New"><strong>struts.freemarker.manager.classname</strong><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; The org.apache.struts2.views.freemarker.FreemarkerManager implementation class <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; org.apache.struts2.views.freemarker.FreemarkerManager接口名</font></p>
<p><font face="Courier New"><strong>struts.i18n.encoding</strong><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; The encoding to use for localization messages<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 国际化信息内码</font></p>
<p><font face="Courier New"><strong>struts.i18n.reload</strong><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Whether the localization messages should automatically be reloaded<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 是否国际化信息自动加载 </font></p>
<p><font face="Courier New"><strong>struts.locale</strong><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; The default locale for the Struts application<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 默认的国际化地区信息</font></p>
<p><font face="Courier New"><strong>struts.mapper.class</strong><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; The org.apache.struts2.dispatcher.mapper.ActionMapper implementation class<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; org.apache.struts2.dispatcher.mapper.ActionMapper接口</font></p>
<p><font face="Courier New"><strong>struts.multipart.maxSize</strong><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; The maximize size of a multipart request (file upload)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; multipart请求信息的最大尺寸（文件上传用） </font></p>
<p><font face="Courier New"><strong>struts.multipart.parser</strong><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; The org.apache.struts2.dispatcher.multipart.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MultiPartRequest parser implementation for a multipart request (file upload) <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 专为multipart请求信息使用的org.apache.struts2.dispatcher.multipart.MultiPartRequest解析器接口（文件上传用）</font></p>
<p><br />
<font face="Courier New"><strong>struts.multipart.saveDir</strong><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; The directory to use for storing uploaded files <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 设置存储上传文件的目录夹</font></p>
<p><font face="Courier New"><strong>struts.objectFactory</strong><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; The com.opensymphony.xwork2.ObjectFactory implementation class<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; com.opensymphony.xwork2.ObjectFactory接口（spring）</font></p>
<p><font face="Courier New"><strong>struts.objectFactory.spring.autoWire</strong><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Whether Spring should autoWire or not<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 是否自动绑定Spring</font></p>
<p><font face="Courier New"><strong>struts.objectFactory.spring.useClassCache</strong><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Whether Spring should use its class cache or not<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 是否spring应该使用自身的cache </font></p>
<p><font face="Courier New"><strong>struts.objectTypeDeterminer</strong><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; The com.opensymphony.xwork2.util.ObjectTypeDeterminer implementation class<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; com.opensymphony.xwork2.util.ObjectTypeDeterminer接口</font></p>
<p><font face="Courier New"><strong>struts.serve.static.browserCache</strong><br />
&nbsp; If static content served by the Struts filter should set browser caching header properties or not <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 是否struts过滤器中提供的静态内容应该被浏览器缓存在头部属性中</font></p>
<p><font face="Courier New"><strong>struts.serve.static</strong><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Whether the Struts filter should serve static content or not <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 是否struts过滤器应该提供静态内容</font></p>
<p><font face="Courier New"><strong>struts.tag.altSyntax</strong><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Whether to use the alterative syntax for the tags or not <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 是否可以用替代的语法替代tags</font></p>
<p><font face="Courier New"><strong>struts.ui.templateDir</strong><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; The directory containing UI templates<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; UI templates的目录夹 </font></p>
<p><font face="Courier New"><strong>struts.ui.theme</strong><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; The default UI template theme<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 默认的UI template主题</font></p>
<p><font face="Courier New"><strong>struts.url.http.port</strong><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; The HTTP port used by Struts URLs<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 设置http端口</font></p>
<p><font face="Courier New"><strong>struts.url.https.port</strong><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; The HTTPS port used by Struts URLs <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 设置https端口</font></p>
<p><font face="Courier New"><strong>struts.url.includeParams</strong><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; The default includeParams method to generate Struts URLs <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在url中产生 默认的includeParams</font></p>
<p><font face="Courier New"><strong>struts.velocity.configfile</strong><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; The Velocity configuration file path<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; velocity配置文件路径</font></p>
<p><font face="Courier New"><strong>struts.velocity.contexts</strong><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; List of Velocity context names<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; velocity的context列表</font></p>
<p><font face="Courier New"><strong>struts.velocity.manager.classname</strong><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; org.apache.struts2.views.velocity.VelocityManager implementation class<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; org.apache.struts2.views.velocity.VelocityManager接口名</font></p>
<p><font face="Courier New"><strong>struts.velocity.toolboxlocation</strong><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; The location of the Velocity toolbox<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; velocity工具盒的位置 </font></p>
<p><font face="Courier New"><strong>struts.xslt.nocache</strong><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Whether or not XSLT templates should not be cached<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 是否XSLT模版应该被缓存</font></p><img src ="http://www.blogjava.net/nkjava/aggbug/254700.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/nkjava/" target="_blank">草原上的骆驼</a> 2009-02-14 21:09 <a href="http://www.blogjava.net/nkjava/archive/2009/02/14/254700.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Struts2.0标签库（三）表单标签</title><link>http://www.blogjava.net/nkjava/archive/2009/02/14/254699.html</link><dc:creator>草原上的骆驼</dc:creator><author>草原上的骆驼</author><pubDate>Sat, 14 Feb 2009 13:07:00 GMT</pubDate><guid>http://www.blogjava.net/nkjava/archive/2009/02/14/254699.html</guid><wfw:comment>http://www.blogjava.net/nkjava/comments/254699.html</wfw:comment><comments>http://www.blogjava.net/nkjava/archive/2009/02/14/254699.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/nkjava/comments/commentRss/254699.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/nkjava/services/trackbacks/254699.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 一、表单标签的通用属性对于表单标签,分为两种标签:form标签本身,和所有来包装单个的表单元素的其他标签.form标签本身的行为不同于它内部的元素,这是很重要的.在我们为所有表单标签,包括form标签在内,提供一个参考手册之前,我们必须先描述一些通用的属性. 通用属性                        属性             Theme      ...&nbsp;&nbsp;<a href='http://www.blogjava.net/nkjava/archive/2009/02/14/254699.html'>阅读全文</a><img src ="http://www.blogjava.net/nkjava/aggbug/254699.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/nkjava/" target="_blank">草原上的骆驼</a> 2009-02-14 21:07 <a href="http://www.blogjava.net/nkjava/archive/2009/02/14/254699.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Struts2.0标签库（二）数据标签[转]</title><link>http://www.blogjava.net/nkjava/archive/2009/02/14/254698.html</link><dc:creator>草原上的骆驼</dc:creator><author>草原上的骆驼</author><pubDate>Sat, 14 Feb 2009 13:07:00 GMT</pubDate><guid>http://www.blogjava.net/nkjava/archive/2009/02/14/254698.html</guid><wfw:comment>http://www.blogjava.net/nkjava/comments/254698.html</wfw:comment><comments>http://www.blogjava.net/nkjava/archive/2009/02/14/254698.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/nkjava/comments/commentRss/254698.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/nkjava/services/trackbacks/254698.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: Struts2提供了大量丰富的标签供使用，它不再像Struts1中一样，将种类标签进行分门列别，但可以根据其使用的用途用以区别。本文通过对Struts2中数据标签的学习，来对Struts2中标签的学习起到一个抛砖引玉的作用。文中将介绍Action标签、Bean标签、Data标签、Include标签、Param标签、Set标签、Text标签、Property标签等标签。&nbsp;一、&lt;s...&nbsp;&nbsp;<a href='http://www.blogjava.net/nkjava/archive/2009/02/14/254698.html'>阅读全文</a><img src ="http://www.blogjava.net/nkjava/aggbug/254698.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/nkjava/" target="_blank">草原上的骆驼</a> 2009-02-14 21:07 <a href="http://www.blogjava.net/nkjava/archive/2009/02/14/254698.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>struts2 标签学习</title><link>http://www.blogjava.net/nkjava/archive/2009/02/14/254697.html</link><dc:creator>草原上的骆驼</dc:creator><author>草原上的骆驼</author><pubDate>Sat, 14 Feb 2009 13:05:00 GMT</pubDate><guid>http://www.blogjava.net/nkjava/archive/2009/02/14/254697.html</guid><wfw:comment>http://www.blogjava.net/nkjava/comments/254697.html</wfw:comment><comments>http://www.blogjava.net/nkjava/archive/2009/02/14/254697.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.blogjava.net/nkjava/comments/commentRss/254697.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/nkjava/services/trackbacks/254697.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 用过struts1.x的人都知道，标签库有html、bean、logic、tiles，而struts2.0里的标签却没有分类，只用在jsp头文件加上&lt;%@ taglib prefix="s" uri="/struts-tags" %&gt;就能使用struts2.0的标签库下面就介绍下每个标签的用法（有错请指正）：A：&lt;s:a href=""&gt;&l...&nbsp;&nbsp;<a href='http://www.blogjava.net/nkjava/archive/2009/02/14/254697.html'>阅读全文</a><img src ="http://www.blogjava.net/nkjava/aggbug/254697.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/nkjava/" target="_blank">草原上的骆驼</a> 2009-02-14 21:05 <a href="http://www.blogjava.net/nkjava/archive/2009/02/14/254697.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>SiteMesh学习笔记1（一个优于Apache Tiles的Web页面布局、装饰框架）</title><link>http://www.blogjava.net/nkjava/archive/2008/12/10/245559.html</link><dc:creator>草原上的骆驼</dc:creator><author>草原上的骆驼</author><pubDate>Wed, 10 Dec 2008 12:14:00 GMT</pubDate><guid>http://www.blogjava.net/nkjava/archive/2008/12/10/245559.html</guid><wfw:comment>http://www.blogjava.net/nkjava/comments/245559.html</wfw:comment><comments>http://www.blogjava.net/nkjava/archive/2008/12/10/245559.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/nkjava/comments/commentRss/245559.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/nkjava/services/trackbacks/245559.html</trackback:ping><description><![CDATA[<span class="style7"><font color="#0000ff" size="4" face="宋体"> <font color="#000000">OS(OpenSymphony)的SiteMesh是一个用来在JSP中实现页面布局和装饰（layout and decoration）<br />
的框架组件，能够帮助网站开发人员较容易实现页面中动态内容和静态装饰外观的分离。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Sitemesh是由一个基于Web页面布局、装饰以及与现存Web应用整合的框架。它能帮助我们在由大<br />
量页面构成的项目中创建一致的页面布局和外观，如一致的导航条，一致的banner，一致的版权，等等。<br />
它不仅仅能处理动态的内容，如jsp，php，asp等产生的内容，它也能处理静态的内容，如htm的内容，<br />
使得它的内容也符合你的页面结构的要求。甚至于它能将HTML文件象include那样将该文件作为一个面板<br />
的形式嵌入到别的文件中去。所有的这些，都是GOF的Decorator模式的最生动的实现。尽管它是由java语言来实现的，但它能与其他Web应用很好地集成。<br />
<br />
</font></font></span><span class="style7"><font color="#0000ff" size="4" face="宋体"><font color="#000000">&nbsp; 官方：<a href="http://www.opensymphony.com/sitemesh/"><font color="#1d58d1">http://www.opensymphony.com/sitemesh/</font></a><br />
<br />
&nbsp;
下载地址：<a href="http://www.opensymphony.com/sitemesh/download.action"><font color="#1d58d1">http://www.opensymphony.com/sitemesh/download.action</font></a> 目前的最新版本是<font size="3"><span class="releaseName"><strong>Version 2.3</strong></span>；</font></font></font></span><br />
本文介绍sitemesh的简单应用：<br />
<br />
首先下载 sitemesh.jar， 拷贝到你的WEB-INF/lib文件夹下，然后将一下代码添加到你的web.xml下<br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #000000;">&lt;!--</span><span style="color: #000000;">&nbsp;sitemesh配置&nbsp;</span><span style="color: #000000;">--&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">filter</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">filter</span><span style="color: #000000;">-</span><span style="color: #000000;">name</span><span style="color: #000000;">&gt;</span><span style="color: #000000;">sitemesh</span><span style="color: #000000;">&lt;/</span><span style="color: #000000;">filter</span><span style="color: #000000;">-</span><span style="color: #000000;">name</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">filter</span><span style="color: #000000;">-</span><span style="color: #0000ff;">class</span><span style="color: #000000;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;com.opensymphony.module.sitemesh.filter.PageFilter<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">&lt;/</span><span style="color: #000000;">filter</span><span style="color: #000000;">-</span><span style="color: #0000ff;">class</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">&lt;/</span><span style="color: #000000;">filter</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">filter</span><span style="color: #000000;">-</span><span style="color: #000000;">mapping</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">filter</span><span style="color: #000000;">-</span><span style="color: #000000;">name</span><span style="color: #000000;">&gt;</span><span style="color: #000000;">sitemesh</span><span style="color: #000000;">&lt;/</span><span style="color: #000000;">filter</span><span style="color: #000000;">-</span><span style="color: #000000;">name</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">url</span><span style="color: #000000;">-</span><span style="color: #000000;">pattern</span><span style="color: #000000;">&gt;</span><span style="color: #008000;">/*</span><span style="color: #008000;">&lt;/url-pattern&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;/filter-mapping&gt;</span></div>
<span class="style7"><font color="#0000ff" size="4" face="宋体"><font color="#000000"><font color="#0000ff" size="5"><font size="4"><font color="#000000">（注意过滤器的位置：应该在struts2的org.apache.struts2.dispatcher.FilterDispatcher过滤器之前
org.apache.struts2.dispatcher.ActionContextCleanUp过滤器之后，否则会有问题；）<br />
在WEB-INF下建立</font></font></font></font></font></span><span class="style7"><font color="#0000ff" size="4" face="宋体"><font color="#000000"><font color="#0000ff" size="5"><font size="4"><font color="#000000">decorators.xml文件，添加如下代码：<br />
</font></font></font></font></font></span>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #0000ff;">&lt;?</span><span style="color: #ff00ff;">xml&nbsp;version="1.0"&nbsp;encoding="utf-8"</span><span style="color: #0000ff;">?&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br />
&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">decorators&nbsp;</span><span style="color: #ff0000;">defaultdir</span><span style="color: #0000ff;">="/WEB-INF/decorators"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">&lt;!--</span><span style="color: #008000;">&nbsp;此处用来定义不需要过滤的页面&nbsp;</span><span style="color: #008000;">--&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">excludes</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp; <br />
</span><span class="style7"><font color="#0000ff" size="4" face="宋体"><font color="#000000"><font color="#0000ff" size="5"><font size="4"><font color="#000000"><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">pattern</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">/login/*</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">pattern</span><span style="color: #0000ff;">&gt;</span></font></font></font></font></font></span><br />
<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">excludes</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">&lt;!--</span><span style="color: #008000;">&nbsp;用来定义装饰器要过滤的页面&nbsp;</span><span style="color: #008000;">--&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">decorator&nbsp;</span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="main"</span><span style="color: #ff0000;">&nbsp;page</span><span style="color: #0000ff;">="main.jsp"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">pattern</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">/*</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">pattern</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">decorator</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br />
</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">decorators</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp; <br />
</span></div>
<span class="style7"><font color="#0000ff" size="4" face="宋体"><font color="#000000"><font color="#0000ff" size="5"><font size="4"><font color="#000000">decorators.xml有两个主要的结点：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; decorator结点指定了模板的位置和文件名，通过pattern来指定哪些路径引用哪个模板<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; excludes结点则指定了哪些路径的请求不使用任何模板<br />
上面代码，凡是以/login/开头的请求路径一律不使用模板；<br />
decorators结点的defaultdir属性指定了模板文件存放的目录;</font></font></font></font></font></span><br />
<br />
<br />
在WEB-INF下建立decorators文件夹，在下面建立main.jsp,代码如下：<br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="background-color: #ffff00; color: #000000;">&lt;%</span><span style="background-color: #f5f5f5; color: #000000;">@&nbsp;page&nbsp;language</span><span style="background-color: #f5f5f5; color: #000000;">=</span><span style="background-color: #f5f5f5; color: #000000;">"</span><span style="background-color: #f5f5f5; color: #000000;">java</span><span style="background-color: #f5f5f5; color: #000000;">"</span><span style="background-color: #f5f5f5; color: #000000;">&nbsp;contentType</span><span style="background-color: #f5f5f5; color: #000000;">=</span><span style="background-color: #f5f5f5; color: #000000;">"</span><span style="background-color: #f5f5f5; color: #000000;">text/html;&nbsp;charset=utf-8</span><span style="background-color: #f5f5f5; color: #000000;">"</span><span style="background-color: #f5f5f5; color: #000000;">&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pageEncoding</span><span style="background-color: #f5f5f5; color: #000000;">=</span><span style="background-color: #f5f5f5; color: #000000;">"</span><span style="background-color: #f5f5f5; color: #000000;">utf-8</span><span style="background-color: #f5f5f5; color: #000000;">"</span><span style="background-color: #ffff00; color: #000000;">%&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="background-color: #ffff00; color: #000000;">&lt;%</span><span style="background-color: #f5f5f5; color: #000000;">@&nbsp;taglib&nbsp;uri</span><span style="background-color: #f5f5f5; color: #000000;">=</span><span style="background-color: #f5f5f5; color: #000000;">"</span><span style="background-color: #f5f5f5; color: #000000;">http://www.opensymphony.com/sitemesh/decorator</span><span style="background-color: #f5f5f5; color: #000000;">"</span><span style="background-color: #f5f5f5; color: #000000;">&nbsp;prefix</span><span style="background-color: #f5f5f5; color: #000000;">=</span><span style="background-color: #f5f5f5; color: #000000;">"</span><span style="background-color: #f5f5f5; color: #000000;">decorator</span><span style="background-color: #f5f5f5; color: #000000;">"</span><span style="background-color: #ffff00; color: #000000;">%&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;!</span><span style="color: #ff00ff;">DOCTYPE&nbsp;html&nbsp;PUBLIC&nbsp;"-//W3C//DTD&nbsp;HTML&nbsp;01&nbsp;Transitional//EN"&nbsp;"http://www.worg/TR/html4/loose.dtd"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">html</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">&lt;!--</span><span style="color: #008000;">&nbsp;第一个装饰页面&nbsp;</span><span style="color: #008000;">--&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">head</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">&lt;!--</span><span style="color: #008000;">&nbsp;从被装饰页面获取title标签内容,并设置默认值</span><span style="color: #008000;">--&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">title</span><span style="color: #0000ff;">&gt;&lt;</span><span style="color: #800000;">decorator:title&nbsp;</span><span style="color: #ff0000;">default</span><span style="color: #0000ff;">="默认title"</span><span style="color: #0000ff;">/&gt;&lt;/</span><span style="color: #800000;">title</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br />
</span><span style="color: #008000;">&lt;!--</span><span style="color: #008000;">&nbsp;从被装饰页面获取head标签内容&nbsp;</span><span style="color: #008000;">--&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br />
&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">decorator:head</span><span style="color: #0000ff;">/&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br />
</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">head</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br />
<br />
</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">body</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">h2</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">SiteMesh装饰header</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">h2</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br />
&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">hr&nbsp;</span><span style="color: #0000ff;">/&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br />
</span><span style="color: #008000;">&lt;!--</span><span style="color: #008000;">&nbsp;从被装饰页面获取body标签内容&nbsp;</span><span style="color: #008000;">--&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br />
&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">decorator:body&nbsp;</span><span style="color: #0000ff;">/&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br />
&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">hr&nbsp;</span><span style="color: #0000ff;">/&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br />
&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">h2</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">SiteMesh装饰footer</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">h2</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br />
&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">body</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br />
</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">html</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp; <br />
</span></div>
<span class="style7"><font color="#0000ff" size="4" face="宋体"><font color="#000000"><font color="#0000ff" size="5"><font size="4"><font color="#000000">这就是个简单的模板，页面的头和脚都由模板里的静态HTML决定了，主页面区域用的是&lt;decorator:body /&gt;标签；<br />
也就是说凡是能进入过滤器的请求生成的页面都会默认加上模板上的头和脚，然后页面自身的内容将自动放到&lt;decorator:body /&gt;标签所在位置；<br />
<br />
&lt;decorator:title default="</font></font></font></font></font></span><span style="color: #0000ff;">默认title</span><span class="style7"><font color="#0000ff" size="4" face="宋体"><font color="#000000"><font color="#0000ff" size="5"><font size="4"><font color="#000000">" /&gt;：读取被装饰页面的标题，并给出了默认标题。<br />
&lt;decorator:head /&gt;：读取被装饰页面的&lt;head&gt;中的内容；<br />
&lt;decorator:body /&gt;：读取被装饰页面的&lt;body&gt;中的内容；</font></font></font></font></font></span><br />
<br />
<br />
好了，下载可以建立页面了，看看你的页面是不是被sitemesh改变了呢？（建立index.jsp）浏览<br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="background-color: #ffff00; color: #000000;">&lt;%</span><span style="background-color: #f5f5f5; color: #000000;">@&nbsp;page&nbsp;language</span><span style="background-color: #f5f5f5; color: #000000;">=</span><span style="background-color: #f5f5f5; color: #000000;">"</span><span style="background-color: #f5f5f5; color: #000000;">java</span><span style="background-color: #f5f5f5; color: #000000;">"</span><span style="background-color: #f5f5f5; color: #000000;">&nbsp;contentType</span><span style="background-color: #f5f5f5; color: #000000;">=</span><span style="background-color: #f5f5f5; color: #000000;">"</span><span style="background-color: #f5f5f5; color: #000000;">text/html;&nbsp;charset=utf-8</span><span style="background-color: #f5f5f5; color: #000000;">"</span><span style="background-color: #f5f5f5; color: #000000;">&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pageEncoding</span><span style="background-color: #f5f5f5; color: #000000;">=</span><span style="background-color: #f5f5f5; color: #000000;">"</span><span style="background-color: #f5f5f5; color: #000000;">utf-8</span><span style="background-color: #f5f5f5; color: #000000;">"</span><span style="background-color: #ffff00; color: #000000;">%&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;!</span><span style="color: #ff00ff;">DOCTYPE&nbsp;html&nbsp;PUBLIC&nbsp;"-//W3C//DTD&nbsp;HTML&nbsp;01&nbsp;Transitional//EN"&nbsp;"http://wwwworg/TR/html4/loosedtd"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">html</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">&lt;!--</span><span style="color: #008000;">&nbsp;第一个被装饰(目标)页面&nbsp;&nbsp;</span><span style="color: #008000;">--&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">head</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">meta&nbsp;</span><span style="color: #ff0000;">http-equiv</span><span style="color: #0000ff;">="Content-Type"</span><span style="color: #ff0000;">&nbsp;content</span><span style="color: #0000ff;">="text/html;&nbsp;charset=utf-8"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">title</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">被装饰（目标）页面title</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">title</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">head</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">body</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">h4</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">被装饰（目标）页面body标签内内容。</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">h4</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">h3</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">使用SiteMesh的好处?</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">h3</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">ul</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">li</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">li</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">很多很多</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">li</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">ul</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">body</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">html</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp; <br />
</span></div>
<br />
<img src ="http://www.blogjava.net/nkjava/aggbug/245559.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/nkjava/" target="_blank">草原上的骆驼</a> 2008-12-10 20:14 <a href="http://www.blogjava.net/nkjava/archive/2008/12/10/245559.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>