﻿<?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-hyljava-随笔分类-Struts2</title><link>http://www.blogjava.net/hyljava/category/52134.html</link><description /><language>zh-cn</language><lastBuildDate>Sat, 23 Nov 2013 23:15:24 GMT</lastBuildDate><pubDate>Sat, 23 Nov 2013 23:15:24 GMT</pubDate><ttl>60</ttl><item><title>四海兴唐课程辅导平台</title><link>http://www.blogjava.net/hyljava/archive/2013/11/23/406728.html</link><dc:creator>何云隆</dc:creator><author>何云隆</author><pubDate>Sat, 23 Nov 2013 12:52:00 GMT</pubDate><guid>http://www.blogjava.net/hyljava/archive/2013/11/23/406728.html</guid><wfw:comment>http://www.blogjava.net/hyljava/comments/406728.html</wfw:comment><comments>http://www.blogjava.net/hyljava/archive/2013/11/23/406728.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/hyljava/comments/commentRss/406728.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hyljava/services/trackbacks/406728.html</trackback:ping><description><![CDATA[<div>四海兴唐课程辅导平台<br /><a href="http://fd.itedu-g.cn/login.php">http://fd.itedu-g.cn/login.php</a></div><img src ="http://www.blogjava.net/hyljava/aggbug/406728.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hyljava/" target="_blank">何云隆</a> 2013-11-23 20:52 <a href="http://www.blogjava.net/hyljava/archive/2013/11/23/406728.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Write operations are not allowed in read-only mode 只读模式下(FlushMode.NEVER/MANUAL)写操作不允</title><link>http://www.blogjava.net/hyljava/archive/2012/09/05/387072.html</link><dc:creator>何云隆</dc:creator><author>何云隆</author><pubDate>Wed, 05 Sep 2012 03:57:00 GMT</pubDate><guid>http://www.blogjava.net/hyljava/archive/2012/09/05/387072.html</guid><wfw:comment>http://www.blogjava.net/hyljava/comments/387072.html</wfw:comment><comments>http://www.blogjava.net/hyljava/archive/2012/09/05/387072.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/hyljava/comments/commentRss/387072.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hyljava/services/trackbacks/387072.html</trackback:ping><description><![CDATA[<div class="articalTitle" isshow="1">
<h2 id="t_656ffe730100ugtw" class="titName SG_txta">
<h2 id="t_656ffe730100ugtw" class="titName SG_txta"></h2>Write&nbsp;operations&nbsp;are&nbsp;not&nbsp;allowed&nbsp;in&nbsp;read-only&nbsp;mode&nbsp;只读模式下(FlushMode.NEVER/MANUAL)写操作不允</h2><span class="time SG_txtc"> </span><!-- 正文开始 -->
</div>
<div id="sina_keyword_ad_area2" class="articalContent  ">
<div>
<p>org.springframework.dao.InvalidDataAccessApiUsag<wbr>eException: Write operations are not allowed in read-only mode (FlushMode.NEVER/MANUAL): Turn your Session into FlushMode.COMMIT/AUTO or remove 'readOnly' marker from transaction definition.</p>
<p><span style="color: #ff0000; font-size: 18px">问题</span>：<span style="font-family: 宋体; color: #0055ff; font-size: 14px">只读模式下(FlushMode.NEVER/MANUAL)写操作不被允许：把你的Session改成FlushMode.COMMIT/AUTO或者清除事务定义中的readOnly标记。</span></p>
<p>&nbsp;<wbr></p>
<p>错误原因:<br />&nbsp;<wbr><span style="color: #5500ff; font-size: 16px">&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>OpenSessionInViewFilter在getSession的时候,会把获取回来的session的flush mode 设为<span style="color: #0f9932">FlushMode.NEVER</span>。然后把该sessionFactory绑定到<span style="color: #0f9932">TransactionSynchronizati<wbr>onManager</span>，使request的整个过程都使用同一个session，在请求过后再接除该sessionFactory的绑定，最后</span><span style="color: #5500ff; font-size: 16px">closeSessionIfNecessary</span><span style="color: #5500ff; font-size: 16px">根据该session是否已和transaction绑定来决定是否关闭session。在这个过程中，若HibernateTemplate 发现自当前session有不是readOnly的transaction，就会获取到FlushMode.AUTO Session，使方法拥有写权限。</span><span style="color: #5500ff; font-size: 16px">也即是，如果有不是readOnly的transaction就可以由Flush.NEVER转为Flush.AUTO,拥有insert,update,delete操作权限，如果没有transaction，并且没有另外人为地设flush model的话，则doFilter的整个过程都是Flush.NEVER。所以受transaction<span style="color: #00cc22">(</span><u><span style="color: #00cc22">声明式的事务</span></u><span style="color: #00cc22">)</span>保护的方法有写权限，没受保护的则没有。</span><br /><br /><u>解决方法:</u></p>
<p><span style="color: #5500ff">web.xml配置里添加</span><br /><span style="color: #0f9932">&lt;filter&gt;</span><br /><span style="color: #0f9932">&nbsp;<wbr>&nbsp;<wbr> &lt;filter-name&gt;OpenSessionInViewFilter&lt;/filter-name&gt;</span><br /><span style="color: #0f9932">&nbsp;<wbr>&nbsp;<wbr> &lt;filter-class&gt;</span><br /><span style="color: #0f9932">&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</span><br /><span style="color: #0f9932">&nbsp;<wbr>&nbsp;<wbr> &lt;/filter-class&gt;</span><br /><span style="color: #0f9932">&nbsp;<wbr>&nbsp;<wbr> &lt;init-param&gt;</span><br /><span style="color: #0f9932">&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &lt;param-name&gt;sessionFactoryBeanName&lt;/param-name&gt;</span><br /><span style="color: #0f9932">&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &lt;param-value&gt;sessionFactory&lt;/param-value&gt;</span><br /><span style="color: #0f9932">&nbsp;<wbr>&nbsp;<wbr> &lt;/init-param&gt;</span><br /><span style="color: #0f9932">&nbsp;<wbr>&nbsp;<wbr> &lt;init-param&gt;</span><br /><span style="color: #0f9932">&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &lt;param-name&gt;singleSession&lt;/param-name&gt;</span><br /><span style="color: #0f9932">&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &lt;param-value&gt;true&lt;/param-value&gt;&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr></span><br /><span style="color: #0f9932">&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &lt;/init-param&gt;</span><br /><span style="color: #0f9932">&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &lt;init-param&gt;</span><br /><span style="color: #0f9932">&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &lt;param-name&gt; flushMode &lt;/param-name&gt;</span><br /><span style="color: #0f9932">&nbsp;<wbr>&nbsp;<wbr> &lt;param-value&gt;AUTO &lt;/param-value&gt;&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr></span><br /><span style="color: #0f9932">&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &lt;/init-param&gt;</span><br /><span style="color: #0f9932">&lt;/filter&gt;</span><br />&nbsp;<wbr>&nbsp;<wbr>//&nbsp;<wbr>&nbsp;<wbr> 。。。。</p>
<p><br /><span style="color: #0f9932">&lt;filter-mapping&gt;</span><br /><span style="color: #0f9932">&nbsp;<wbr>&nbsp;<wbr> &lt;filter-name&gt;OpenSessionInViewFilter&lt;/filter-name&gt;</span><br /><span style="color: #0f9932">&nbsp;<wbr>&nbsp;<wbr> &lt;url-pattern&gt;/*&lt;/url-pattern&gt;</span><br /><span style="color: #0f9932">&lt;/filter-mapping&gt;</span></p>
<p>&nbsp;<wbr></p>
<p><span style="color: #0f9932">如果在交给spring 管理的情况下，在beans.xml 里的配置</span></p>
<p><span style="color: #0f9932">&nbsp;<wbr>&lt;bean id="txManager"<br />&nbsp;<wbr>&nbsp;<wbr>class="org.springframework.orm.hibernate3.HibernateTransactionMana<wbr>ger"&gt;<br />&nbsp;<wbr>&nbsp;<wbr>&lt;property name="sessionFactory" ref="sessionFactory" /&gt;<br />&nbsp;<wbr>&lt;/bean&gt;</span></p>
<p><span style="color: #0f9932">&nbsp;<wbr>&lt;aop:config&gt;<br />&nbsp;<wbr>&nbsp;<wbr>&lt;aop:pointcut id="bussinessService"<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>expression="execution(* com.fan.service.base.*.*(..))" /&gt;<br />&nbsp;<wbr>&nbsp;<wbr>&lt;aop:advisor pointcut-ref="bussinessService"<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>advice-ref="txAdvice" /&gt;<br />&nbsp;<wbr>&lt;/aop:config&gt;</span></p>
<p><span style="color: #0f9932">&nbsp;<wbr>&lt;tx:advice id="txAdvice" transaction-manager="txManager"&gt;<br />&nbsp;<wbr>&nbsp;<wbr>&lt;tx:attributes&gt;<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&lt;tx:method name="get*" read-only="false" propagation="NOT_SUPPORTED"/&gt;<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&lt;tx:method name="find*" read-only="false" propagation="NOT_SUPPORTED"/&gt;<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&lt;tx:method name="save*" propagation="REQUIRED"/&gt; // 如果不把save update delete都配置上，<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&lt;tx:method name="update*" propagation="REQUIRED"/&gt;&nbsp;<wbr>//这些操作会无效<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&lt;tx:method name="delete*" propagation="REQUIRED"/&gt;<br />&nbsp;<wbr>&nbsp;<wbr>&lt;/tx:attributes&gt;<br />&nbsp;<wbr>&lt;/tx:advice&gt;</span></p></div></div><img src ="http://www.blogjava.net/hyljava/aggbug/387072.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hyljava/" target="_blank">何云隆</a> 2012-09-05 11:57 <a href="http://www.blogjava.net/hyljava/archive/2012/09/05/387072.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Struts2上传下载</title><link>http://www.blogjava.net/hyljava/archive/2012/08/10/385254.html</link><dc:creator>何云隆</dc:creator><author>何云隆</author><pubDate>Fri, 10 Aug 2012 12:12:00 GMT</pubDate><guid>http://www.blogjava.net/hyljava/archive/2012/08/10/385254.html</guid><wfw:comment>http://www.blogjava.net/hyljava/comments/385254.html</wfw:comment><comments>http://www.blogjava.net/hyljava/archive/2012/08/10/385254.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/hyljava/comments/commentRss/385254.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hyljava/services/trackbacks/385254.html</trackback:ping><description><![CDATA[<div><span style="color: red">JSP页面</span><br />&lt;body&gt;<br />&nbsp;&nbsp;&lt;s:fielderror&gt;&lt;/s:fielderror&gt;<br />&nbsp;&nbsp;&lt;s:form action="uploadUploadAction" <span style="color: red">enctype="multipart/form-data"</span><br />&nbsp;&nbsp;&nbsp;theme="simple"&gt;<br />&nbsp;&nbsp;&nbsp; 用户名：&lt;s:textfield name="userName" /&gt;<br />&nbsp;&nbsp;&nbsp;&lt;br /&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;密码： &lt;s:textfield name="userPwd" /&gt;<br />&nbsp;&nbsp;&nbsp;&lt;br /&gt;<br />&nbsp;&nbsp;&nbsp;&lt;input type="file" name="file" /&gt;<br />&nbsp;&nbsp;&nbsp;&lt;br /&gt;<br />&nbsp;&nbsp;&nbsp;&lt;s:submit value="提交"&gt;&lt;/s:submit&gt;<br />&nbsp;&nbsp;&lt;/s:form&gt;&nbsp;<br />&nbsp;&nbsp;&lt;br /&gt;<br />下载&lt;a href="DownLoadAction"&gt;开始.gif&lt;/a&gt;<br />&nbsp;&lt;/body&gt;<br /><span style="color: #ff0000">UploadAction 
<p>&nbsp;</p></span><span style="color: #000000">
<p><span style="color: #000000"></p></span><span style="color: #000000">
<p>package com.hyl.action;</p>
<p>import java.io.File;<br />import java.io.FileInputStream;<br />import java.io.FileOutputStream;<br />import java.io.IOException;<br />import java.io.InputStream;<br />import java.io.OutputStream;<br />import org.apache.struts2.ServletActionContext;<br />import com.hyl.util.DateUtil;<br />import com.opensymphony.xwork2.ActionSupport;</p>
<p>public class UploadAction extends ActionSupport {<br />&nbsp;private File file;<br />&nbsp;private String fileFileName;<br />&nbsp;private String fileContentType;<br />&nbsp;private String userName;<br />&nbsp;private String userPwd;</p>
<p>&nbsp;public String upload() throws IOException {<br />&nbsp;&nbsp;String path = ServletActionContext.getRequest().getRealPath("/upload");<br />&nbsp;&nbsp;// System.out.println(path);</p>
<p>&nbsp;&nbsp;InputStream is = new FileInputStream(file);<br />&nbsp;&nbsp;String date = DateUtil.mailDate(new java.util.Date());<br />&nbsp;&nbsp;// 截取的文件扩展名<br />&nbsp;&nbsp;String fileExtenName = fileFileName<br />&nbsp;&nbsp;&nbsp;&nbsp;.substring(fileFileName.indexOf('.'));<br />&nbsp;&nbsp;// System.out.println("截取的文件扩展名"+fileName);</p>
<p>&nbsp;&nbsp;File serverFile = new File(path, date + fileExtenName);</p>
<p>&nbsp;&nbsp;OutputStream os = new FileOutputStream(serverFile);</p>
<p>&nbsp;&nbsp;byte[] b = new byte[1024];</p>
<p>&nbsp;&nbsp;int length = 0;</p>
<p>&nbsp;&nbsp;while ((length = is.read(b)) &gt; 0) {<br />&nbsp;&nbsp;&nbsp;os.write(b);</p>
<p>&nbsp;&nbsp;}<br />&nbsp;&nbsp;os.close();<br />&nbsp;&nbsp;is.close();<br />&nbsp;&nbsp;return SUCCESS;<br />&nbsp;}</p>
<p>&nbsp;public File getFile() {<br />&nbsp;&nbsp;return file;<br />&nbsp;}</p>
<p>&nbsp;public void setFile(File file) {<br />&nbsp;&nbsp;this.file = file;<br />&nbsp;}</p>
<p>&nbsp;public String getFileFileName() {<br />&nbsp;&nbsp;return fileFileName;<br />&nbsp;}</p>
<p>&nbsp;public void setFileFileName(String fileFileName) {<br />&nbsp;&nbsp;this.fileFileName = fileFileName;<br />&nbsp;}</p>
<p>&nbsp;public String getFileContentType() {<br />&nbsp;&nbsp;return fileContentType;<br />&nbsp;}</p>
<p>&nbsp;public void setFileContentType(String fileContentType) {<br />&nbsp;&nbsp;this.fileContentType = fileContentType;<br />&nbsp;}</p>
<p>&nbsp;public String getUserName() {<br />&nbsp;&nbsp;return userName;<br />&nbsp;}</p>
<p>&nbsp;public void setUserName(String userName) {<br />&nbsp;&nbsp;this.userName = userName;<br />&nbsp;}</p>
<p>&nbsp;public String getUserPwd() {<br />&nbsp;&nbsp;return userPwd;<br />&nbsp;}</p>
<p>&nbsp;public void setUserPwd(String userPwd) {<br />&nbsp;&nbsp;this.userPwd = userPwd;<br />&nbsp;}</p>
<p>}<br /><span style="color: #ff0000">DownLoadAction </span><br /></p>
<p>&nbsp;</p>
<p>package com.hyl.action;</p>
<p>import java.io.InputStream;<br />import java.io.UnsupportedEncodingException;<br />import org.apache.struts2.ServletActionContext;<br />import com.opensymphony.xwork2.ActionSupport;</p>
<p>public class DownLoadAction extends ActionSupport {<br />//下面以中文名文件实例<br />&nbsp;//此处文件名称由用户输入，此处也是动态传参的过程<br />&nbsp;private String picName = "开始.gif";</p>
<p>&nbsp;public InputStream getDownLoad() throws UnsupportedEncodingException {<br />&nbsp;&nbsp;//此处做一个中间变量，当重新编码后就无法识别中文名了<br />&nbsp;&nbsp;String rourseName=picName;<br />&nbsp;&nbsp;//将源文件的中文名重新编码，目的值让Struts的配置文件中能识别到，呈现给用户看<br />&nbsp;&nbsp;picName=new String(picName.getBytes(),"iso-8859-1");<br />&nbsp;&nbsp;<br />&nbsp;&nbsp;System.out.println("/upload/"+rourseName);<br />&nbsp;&nbsp;<br />&nbsp;&nbsp;return ServletActionContext.getServletContext().getResourceAsStream(<br />&nbsp;&nbsp;&nbsp;&nbsp;"/upload/"+rourseName);<br />&nbsp;&nbsp;<br />&nbsp;}</p>
<p>&nbsp;public String execute() throws Exception {</p>
<p>&nbsp;&nbsp;return super.execute();<br />&nbsp;}</p>
<p>&nbsp;public String getPicName() {<br />&nbsp;&nbsp;return picName;<br />&nbsp;}</p>
<p>&nbsp;public void setPicName(String picName) {<br />&nbsp;&nbsp;this.picName = picName;<br />&nbsp;}</p>
<p>}<br /><span style="color: #ff0000">DateUtil </span><br /></p>
<p>&nbsp;</p>
<p>package com.hyl.util;</p>
<p>import java.text.SimpleDateFormat;<br />import java.util.Calendar;<br />import java.util.Date;<br />import java.util.GregorianCalendar;</p>
<p>public class DateUtil {</p>
<p>&nbsp;public static String dateTimeChange(Date source) {<br />&nbsp;&nbsp;SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");<br />&nbsp;&nbsp;String changeTime = format.format(source);<br />&nbsp;&nbsp;return changeTime;<br />&nbsp;}</p>
<p>&nbsp;public static String shortDate(Date aDate) {<br />&nbsp;&nbsp;SimpleDateFormat formatter = new SimpleDateFormat("MM/dd/yyyy");<br />&nbsp;&nbsp;return formatter.format(aDate);<br />&nbsp;}</p>
<p>&nbsp;public static String nowDate() {<br />&nbsp;&nbsp;String iDate = "";<br />&nbsp;&nbsp;SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");<br />&nbsp;&nbsp;String str = formatter.format(new Date());<br />&nbsp;&nbsp;String[] date = str.split("-");<br />&nbsp;&nbsp;if (date.length &gt;= 3) {<br />&nbsp;&nbsp;&nbsp;iDate = date[0] + "/" + date[1] + "/" + date[2] + "";<br />&nbsp;&nbsp;} else {<br />&nbsp;&nbsp;&nbsp;iDate = str;<br />&nbsp;&nbsp;}<br />&nbsp;&nbsp;return iDate;<br />&nbsp;}</p>
<p>&nbsp;public static String mailDate(Date aDate) {<br />&nbsp;&nbsp;SimpleDateFormat formatter = new SimpleDateFormat("yyyyMMddHHmmssSSS");<br />&nbsp;&nbsp;return formatter.format(aDate);<br />&nbsp;}</p>
<p>&nbsp;public static String dateParser(Date aDate) {<br />&nbsp;&nbsp;SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");<br />&nbsp;&nbsp;return formatter.format(aDate);<br />&nbsp;}</p>
<p>&nbsp;public static Date parser(String strDate) {<br />&nbsp;&nbsp;;<br />&nbsp;&nbsp;strDate = strDate.replace("/", "-");<br />&nbsp;&nbsp;SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");<br />&nbsp;&nbsp;try {<br />&nbsp;&nbsp;&nbsp;return sdf.parse(strDate);<br />&nbsp;&nbsp;} catch (Exception e) {<br />&nbsp;&nbsp;&nbsp;return null;<br />&nbsp;&nbsp;}<br />&nbsp;}</p>
<p>&nbsp;public static Date parser(String strDate, String formatter) {<br />&nbsp;&nbsp;SimpleDateFormat sdf = new SimpleDateFormat(formatter);<br />&nbsp;&nbsp;try {<br />&nbsp;&nbsp;&nbsp;return sdf.parse(strDate);<br />&nbsp;&nbsp;} catch (Exception e) {<br />&nbsp;&nbsp;&nbsp;return null;<br />&nbsp;&nbsp;}<br />&nbsp;}</p>
<p>&nbsp;public static String parser(Date date, String formatter) {<br />&nbsp;&nbsp;SimpleDateFormat sdf = new SimpleDateFormat(formatter);<br />&nbsp;&nbsp;try {<br />&nbsp;&nbsp;&nbsp;return sdf.format(date);<br />&nbsp;&nbsp;} catch (Exception e) {<br />&nbsp;&nbsp;&nbsp;return null;<br />&nbsp;&nbsp;}<br />&nbsp;}</p>
<p>&nbsp;public static Date addMonth(Date myDate, int amount) {<br />&nbsp;&nbsp;GregorianCalendar cal = new GregorianCalendar();<br />&nbsp;&nbsp;cal.setTime(myDate);<br />&nbsp;&nbsp;boolean isEndDayOfMonth_old = cal<br />&nbsp;&nbsp;&nbsp;&nbsp;.getActualMaximum(GregorianCalendar.DAY_OF_MONTH) == cal<br />&nbsp;&nbsp;&nbsp;&nbsp;.get(GregorianCalendar.DAY_OF_MONTH);<br />&nbsp;&nbsp;cal.add(GregorianCalendar.MONTH, amount);<br />&nbsp;&nbsp;boolean isEndDayOfMonth_new = cal<br />&nbsp;&nbsp;&nbsp;&nbsp;.getActualMaximum(GregorianCalendar.DAY_OF_MONTH) == cal<br />&nbsp;&nbsp;&nbsp;&nbsp;.get(GregorianCalendar.DAY_OF_MONTH);<br />&nbsp;&nbsp;if (isEndDayOfMonth_old &amp;&amp; !isEndDayOfMonth_new) {<br />&nbsp;&nbsp;&nbsp;cal.set(GregorianCalendar.DATE, cal<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.getActualMaximum(GregorianCalendar.DAY_OF_MONTH));<br />&nbsp;&nbsp;}<br />&nbsp;&nbsp;return cal.getTime();<br />&nbsp;}</p>
<p>&nbsp;public static Date addDay(Date myDate, int amount) {<br />&nbsp;&nbsp;Calendar cal = Calendar.getInstance();<br />&nbsp;&nbsp;cal.setTime(myDate);<br />&nbsp;&nbsp;cal.add(Calendar.DAY_OF_MONTH, amount);<br />&nbsp;&nbsp;return cal.getTime();<br />&nbsp;}</p>
<p>&nbsp;public static Date addMinute(Date myDate, int amount) {<br />&nbsp;&nbsp;Calendar cal = Calendar.getInstance();<br />&nbsp;&nbsp;cal.setTime(myDate);<br />&nbsp;&nbsp;int minute = 0;<br />&nbsp;&nbsp;amount = -(amount);</p>
<p>&nbsp;&nbsp;if (amount &gt; 60) {</p>
<p>&nbsp;&nbsp;&nbsp;int hour = (int) amount / 60;</p>
<p>&nbsp;&nbsp;&nbsp;if (hour * 60 &gt; amount) {<br />&nbsp;&nbsp;&nbsp;&nbsp;minute = hour * 60 - amount;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;cal.add(Calendar.HOUR_OF_DAY, -hour);<br />&nbsp;&nbsp;&nbsp;&nbsp;cal.add(Calendar.MINUTE, minute);</p>
<p>&nbsp;&nbsp;&nbsp;} else if (hour * 60 &lt; amount) {</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;minute = amount - hour * 60;<br />&nbsp;&nbsp;&nbsp;&nbsp;cal.add(Calendar.HOUR_OF_DAY, -hour);<br />&nbsp;&nbsp;&nbsp;&nbsp;cal.add(Calendar.MINUTE, -minute);</p>
<p>&nbsp;&nbsp;&nbsp;} else {<br />&nbsp;&nbsp;&nbsp;&nbsp;cal.add(Calendar.HOUR_OF_DAY, -hour);<br />&nbsp;&nbsp;&nbsp;}</p>
<p>&nbsp;&nbsp;} else {</p>
<p>&nbsp;&nbsp;&nbsp;cal.add(Calendar.MINUTE, -amount);<br />&nbsp;&nbsp;}<br />&nbsp;&nbsp;return cal.getTime();<br />&nbsp;}</p>
<p>&nbsp;public static Date addYear(Date myDate, int amount) {<br />&nbsp;&nbsp;GregorianCalendar cal = new GregorianCalendar();<br />&nbsp;&nbsp;cal.setTime(myDate);<br />&nbsp;&nbsp;boolean isEndDayOfMonth_old = cal<br />&nbsp;&nbsp;&nbsp;&nbsp;.getActualMaximum(GregorianCalendar.DAY_OF_MONTH) == cal<br />&nbsp;&nbsp;&nbsp;&nbsp;.get(GregorianCalendar.DAY_OF_MONTH);<br />&nbsp;&nbsp;cal.add(GregorianCalendar.YEAR, amount);<br />&nbsp;&nbsp;boolean isEndDayOfMonth_new = cal<br />&nbsp;&nbsp;&nbsp;&nbsp;.getActualMaximum(GregorianCalendar.DAY_OF_MONTH) == cal<br />&nbsp;&nbsp;&nbsp;&nbsp;.get(GregorianCalendar.DAY_OF_MONTH);<br />&nbsp;&nbsp;if (isEndDayOfMonth_old &amp;&amp; !isEndDayOfMonth_new) {<br />&nbsp;&nbsp;&nbsp;cal.set(GregorianCalendar.DATE, cal<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.getActualMaximum(GregorianCalendar.DAY_OF_MONTH));<br />&nbsp;&nbsp;}<br />&nbsp;&nbsp;return cal.getTime();<br />&nbsp;}</p>
<p>&nbsp;public static int getWeekDay(Date myDate) {<br />&nbsp;&nbsp;GregorianCalendar cal = new GregorianCalendar();<br />&nbsp;&nbsp;cal.setTime(myDate);<br />&nbsp;&nbsp;return cal.get(GregorianCalendar.DAY_OF_WEEK);<br />&nbsp;}</p>
<p>&nbsp;public static int getConvertWeekDay(Date myDate) {<br />&nbsp;&nbsp;int day = getWeekDay(myDate);<br />&nbsp;&nbsp;int result = day - 1;<br />&nbsp;&nbsp;if (result == 0)<br />&nbsp;&nbsp;&nbsp;result = 7;<br />&nbsp;&nbsp;return result;<br />&nbsp;}</p>
<p>&nbsp;public static int getTimeFromDate(Date myDate) {<br />&nbsp;&nbsp;SimpleDateFormat sdf = new SimpleDateFormat("hhmmss");<br />&nbsp;&nbsp;int result = Integer.parseInt(sdf.format(myDate));<br />&nbsp;&nbsp;return result;<br />&nbsp;}</p>
<p>&nbsp;public static long getDaysBetweenDate(Date startDate, Date endDate) {<br />&nbsp;&nbsp;Calendar cal = Calendar.getInstance();<br />&nbsp;&nbsp;cal.setTime(startDate);<br />&nbsp;&nbsp;cal.set(Calendar.HOUR, 0);<br />&nbsp;&nbsp;cal.set(Calendar.MINUTE, 0);<br />&nbsp;&nbsp;cal.set(Calendar.SECOND, 0);<br />&nbsp;&nbsp;cal.set(Calendar.MILLISECOND, 0);<br />&nbsp;&nbsp;startDate = cal.getTime();<br />&nbsp;&nbsp;cal.setTime(endDate);<br />&nbsp;&nbsp;cal.set(Calendar.HOUR, 0);<br />&nbsp;&nbsp;cal.set(Calendar.MINUTE, 0);<br />&nbsp;&nbsp;cal.set(Calendar.SECOND, 0);<br />&nbsp;&nbsp;cal.set(Calendar.MILLISECOND, 0);<br />&nbsp;&nbsp;return (cal.getTime().getTime() - startDate.getTime()) / 86400000;</p>
<p>&nbsp;}</p>
<p>&nbsp;public static String strDateTime(String str) {<br />&nbsp;&nbsp;String idate = "";<br />&nbsp;&nbsp;if (str != null) {<br />&nbsp;&nbsp;&nbsp;String[] date = str.split("-");<br />&nbsp;&nbsp;&nbsp;if (date.length &gt;= 3) {<br />&nbsp;&nbsp;&nbsp;&nbsp;idate = date[0] + "." + date[1] + "." + date[2];<br />&nbsp;&nbsp;&nbsp;} else {<br />&nbsp;&nbsp;&nbsp;&nbsp;idate = str;<br />&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;}<br />&nbsp;&nbsp;return idate;<br />&nbsp;}</p>
<p>&nbsp;public static String strDotDateTime(String str) {<br />&nbsp;&nbsp;String idate = "";<br />&nbsp;&nbsp;if (str != null) {<br />&nbsp;&nbsp;&nbsp;String data0 = null;<br />&nbsp;&nbsp;&nbsp;String[] date = str.split("-");<br />&nbsp;&nbsp;&nbsp;if (date.length &gt;= 3) {<br />&nbsp;&nbsp;&nbsp;&nbsp;if (date[0] != null) {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;data0 = date[0].substring(2, 4);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;idate = data0 + "." + date[1] + "." + date[2];<br />&nbsp;&nbsp;&nbsp;} else {<br />&nbsp;&nbsp;&nbsp;&nbsp;idate = str;<br />&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;}<br />&nbsp;&nbsp;return idate;<br />&nbsp;}</p>
<p>&nbsp;public static String bakDateTime(String str) {<br />&nbsp;&nbsp;String idate = "";<br />&nbsp;&nbsp;if (str != null) {<br />&nbsp;&nbsp;&nbsp;int l1 = str.indexOf(".");<br />&nbsp;&nbsp;&nbsp;String d1 = str.substring(0, l1);<br />&nbsp;&nbsp;&nbsp;String s1 = str.substring(l1 + 1);<br />&nbsp;&nbsp;&nbsp;int l2 = s1.indexOf(".");<br />&nbsp;&nbsp;&nbsp;String d2 = s1.substring(0, l2);<br />&nbsp;&nbsp;&nbsp;String d3 = s1.substring(l2 + 1);<br />&nbsp;&nbsp;&nbsp;idate = d1 + "-" + d2 + "-" + d3;<br />&nbsp;&nbsp;}<br />&nbsp;&nbsp;return idate;<br />&nbsp;}</p>
<p>&nbsp;public static String strShortDateTime(String str) {<br />&nbsp;&nbsp;String idate = "";<br />&nbsp;&nbsp;if (str != null) {<br />&nbsp;&nbsp;&nbsp;String[] date = str.split("-");<br />&nbsp;&nbsp;&nbsp;if (date.length &gt;= 3) {<br />&nbsp;&nbsp;&nbsp;&nbsp;idate = date[0] + "." + date[1] + "." + date[2];<br />&nbsp;&nbsp;&nbsp;} else {<br />&nbsp;&nbsp;&nbsp;&nbsp;idate = str;<br />&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;if (idate != null &amp;&amp; idate.length() &gt; 9) {<br />&nbsp;&nbsp;&nbsp;&nbsp;idate = idate.substring(0, 10);</p>
<p>&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;}<br />&nbsp;&nbsp;return idate;<br />&nbsp;}</p>
<p>&nbsp;public static int getBetweenDayNumber(String dateA, String dateB) {<br />&nbsp;&nbsp;long dayNumber = 0;<br />&nbsp;&nbsp;long DAY = 24L * 60L * 60L * 1000L;<br />&nbsp;&nbsp;SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");<br />&nbsp;&nbsp;try {<br />&nbsp;&nbsp;&nbsp;java.util.Date d1 = df.parse(dateA);<br />&nbsp;&nbsp;&nbsp;java.util.Date d2 = df.parse(dateB);<br />&nbsp;&nbsp;&nbsp;dayNumber = (d2.getTime() - d1.getTime()) / DAY;<br />&nbsp;&nbsp;} catch (Exception e) {<br />&nbsp;&nbsp;&nbsp;e.printStackTrace();<br />&nbsp;&nbsp;}<br />&nbsp;&nbsp;return (int) dayNumber;<br />&nbsp;}</p>
<p>&nbsp;public static void main(String[] args) {<br />&nbsp;&nbsp;System.out.println(nowDate());<br />&nbsp;}<br />}<br /><span style="color: #ff0000">messageFile.properties</span><br /></p>
<p>struts.messages.error.file.too.large=\u6587\u4EF6\u8FC7\u5927<br />struts.messages.error.content.type.not.allowed=\u6587\u4EF6\u7C7B\u578B\u4E0D\u4E00\u81F4<br /><br /><span style="color: #ff0000">struts.xml</span><br /></p>
<p>&lt;?xml version="1.0" encoding="UTF-8" ?&gt;<br />&lt;!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "<a href="http://struts.apache.org/dtds/struts-2.1.dtd">http://struts.apache.org/dtds/struts-2.1.dtd</a>"&gt;<br />&lt;struts&gt;<br />&nbsp;&lt;!--加载Struts的消息资源文件&nbsp;&nbsp; value里面指定messageFile.properties的文件名字，不写扩展名字--&gt;<br />&nbsp;&lt;constant name="struts.custom.i18n.resources" value="messageFile"&gt;&lt;/constant&gt;<br />&nbsp;&lt;package name="hyl" extends="struts-default"&gt;<br />&nbsp;&nbsp;&lt;!-- 上传的Action --&gt;<br />&nbsp;&nbsp;&lt;action name="*UploadAction" class="com.hyl.action.UploadAction"<br />&nbsp;&nbsp;&nbsp;method="{1}"&gt;<br />&nbsp;&nbsp;&nbsp;&lt;result name="success"&gt;/ok.jsp&lt;/result&gt;<br />&nbsp;&nbsp;&nbsp;&lt;result name="input"&gt;/index.jsp&lt;/result&gt;<br />&nbsp;&nbsp;&nbsp;&lt;interceptor-ref name="fileUpload"&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&lt;param name="allowedTypes"&gt;image/jpeg&lt;/param&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&lt;param name="maximumSize"&gt;102400&lt;/param&gt;<br />&nbsp;&nbsp;&nbsp;&lt;/interceptor-ref&gt;<br />&nbsp;&nbsp;&nbsp;&lt;!-- 这个默认的拦截器必须放在自定义拦截器的下面，否则自定义拦截器不能呗调用 --&gt;<br />&nbsp;&nbsp;&nbsp;&lt;interceptor-ref name="defaultStack"&gt;&lt;/interceptor-ref&gt;<br />&nbsp;&nbsp;&lt;/action&gt;<br />&nbsp;&nbsp;&lt;!-- 下载的Action --&gt;<br />&nbsp;&nbsp;&lt;action name="DownLoadAction" class="com.hyl.action.DownLoadAction"&gt;<br />&nbsp;&nbsp;&nbsp;&lt;result name="success" type="stream"&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&lt;!-- 这里显示的指定返回类型，像这种能被浏览器识别的类型会直接显示出来，<br />&nbsp;&nbsp;&nbsp;&nbsp;如果是其他类型，会以下载形式出现，<br />&nbsp;&nbsp;&nbsp;&nbsp;如果去掉这个标签，会启用默认的text/plain&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp; --&gt;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&lt;param name="contentType"&gt;image/jpeg&lt;/param&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&lt;!-- 此处的方法是Action中的getDownLoad方法， --&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&lt;param name="inputName"&gt;downLoad&lt;/param&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&lt;param name="contentDisposition"&gt;filename="${picName}"&lt;/param&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&lt;param name="bufferSize"&gt;1024&lt;/param&gt;<br />&nbsp;&nbsp;&nbsp;&lt;/result&gt;<br />&nbsp;&nbsp;&lt;/action&gt;</p>
<p>&nbsp;&lt;/package&gt;</p>
<p>&lt;/struts&gt;&nbsp;&nbsp;&nbsp; <br /></p>
<p><br /></span></p></span></div><img src ="http://www.blogjava.net/hyljava/aggbug/385254.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hyljava/" target="_blank">何云隆</a> 2012-08-10 20:12 <a href="http://www.blogjava.net/hyljava/archive/2012/08/10/385254.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Struts2登录拦截器</title><link>http://www.blogjava.net/hyljava/archive/2012/08/10/385252.html</link><dc:creator>何云隆</dc:creator><author>何云隆</author><pubDate>Fri, 10 Aug 2012 10:58:00 GMT</pubDate><guid>http://www.blogjava.net/hyljava/archive/2012/08/10/385252.html</guid><wfw:comment>http://www.blogjava.net/hyljava/comments/385252.html</wfw:comment><comments>http://www.blogjava.net/hyljava/archive/2012/08/10/385252.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/hyljava/comments/commentRss/385252.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hyljava/services/trackbacks/385252.html</trackback:ping><description><![CDATA[<p><span style="color: red">UserLoginInterceptor 拦截器类（千万不要写成abstract类，开始我就写成这样了就是加载不上去）</span><br /><br />package com.hyl.inter;</p>
<p>import java.util.Map;<br />import javax.servlet.http.HttpServletRequest;<br />import org.apache.struts2.ServletActionContext;<br />import com.hyl.action.UserInfoAction;<br />import com.opensymphony.xwork2.ActionInvocation;<br />import com.opensymphony.xwork2.interceptor.Interceptor;</p>
<p>public class UserLoginInterceptor implements Interceptor {<br />&nbsp;public void destroy() {<br />&nbsp;&nbsp;System.out.println("我是登录拦截器销毁");<br />&nbsp;}</p>
<p>&nbsp;public void init() {<br />&nbsp;&nbsp;System.out.println("我是登录验证拦截器初始化");<br />&nbsp;}</p>
<p>&nbsp;public String intercept(ActionInvocation invocation) throws Exception {<br />&nbsp;&nbsp;System.out.println("我正在进行登录拦截功能");<br />&nbsp;&nbsp;String result = "";<br />&nbsp;&nbsp;// 判断当前要调用的Action实例（对象） 是否是 登录验证的Action<br />&nbsp;&nbsp;if (invocation.getAction() instanceof UserInfoAction) {<br />&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;result = invocation.invoke();<br />&nbsp;&nbsp;} else {<br />&nbsp;&nbsp;&nbsp;//当前要调用的不是登录的Action<br />&nbsp;&nbsp;&nbsp;//从session中取值，判断是否是空（登录）<br />&nbsp;&nbsp;&nbsp;//登录的Action中将登录用户信息存储到session中,key值是当前的sessionID<br />&nbsp;&nbsp;&nbsp;HttpServletRequest request = ServletActionContext.getRequest();<br />&nbsp;&nbsp;&nbsp;Map session = invocation.getInvocationContext().getSession();<br />&nbsp;&nbsp;&nbsp;if (session.get(request.getSession().getId()) != null) {<br />&nbsp;&nbsp;&nbsp;&nbsp;result = invocation.invoke();<br />&nbsp;&nbsp;&nbsp;} else {<br />&nbsp;&nbsp;&nbsp;&nbsp;//session中如果不存在就跳到登录页面<br />&nbsp;&nbsp;&nbsp;&nbsp;return "error";<br />&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;}<br />&nbsp;&nbsp;return result;<br />&nbsp;}<br />}<br /><br /><span style="color: red">Struts配置文件内容</span><br /></p>
<p>&lt;?xml version="1.0" encoding="UTF-8" ?&gt;<br />&lt;!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "<a href="http://struts.apache.org/dtds/struts-2.1.dtd">http://struts.apache.org/dtds/struts-2.1.dtd</a>"&gt;<br />&lt;struts&gt;<br />&nbsp;&lt;package name="userInfo" namespace="/userInfo"&nbsp; extends="struts-default"&gt;<br />&nbsp;&nbsp;&lt;interceptors&gt;<br />&nbsp;&nbsp;&nbsp;&lt;interceptor name="userInter" class="com.hyl.inter.UserLoginInterceptor"&gt;&lt;/interceptor&gt;<br />&nbsp;&nbsp;&nbsp;&lt;interceptor-stack name="myStack"&gt;<br />&lt;!--加载Struts默认拦截器--&gt;<br />&nbsp;&nbsp;&nbsp;&lt;interceptor-ref name="defaultStack"&gt;&lt;/interceptor-ref&gt;<br />&nbsp;&nbsp;&nbsp;&lt;interceptor-ref name="userInter"&gt;&lt;/interceptor-ref&gt;<br />&nbsp;&nbsp;&nbsp;&lt;/interceptor-stack&gt;<br />&nbsp;&nbsp;&lt;/interceptors&gt;<br />&nbsp;&nbsp;<br />&nbsp;&nbsp;&lt;default-interceptor-ref name="myStack"&gt;&lt;/default-interceptor-ref&gt;</p>
<p>&nbsp;&nbsp;&lt;action name="*userInfoMan" class="com.hyl.action.UserInfoAction" method="{1}"&gt;<br />&nbsp;&nbsp;&nbsp;&lt;result name="success1" type="redirect"&gt;/menu.jsp&lt;/result&gt;<br />&nbsp;&nbsp;&nbsp;&lt;result name="error" type="redirect"&gt;/user_login.jsp&lt;/result&gt;<br />&nbsp;&nbsp;&lt;/action&gt;</p>
<p>&nbsp;&lt;/package&gt;</p>
<p>&lt;/struts&gt;&nbsp;&nbsp;&nbsp; <br /></p>
<p><br />&nbsp;</p><img src ="http://www.blogjava.net/hyljava/aggbug/385252.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hyljava/" target="_blank">何云隆</a> 2012-08-10 18:58 <a href="http://www.blogjava.net/hyljava/archive/2012/08/10/385252.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>自定义Struts2中全局转换器</title><link>http://www.blogjava.net/hyljava/archive/2012/07/20/383604.html</link><dc:creator>何云隆</dc:creator><author>何云隆</author><pubDate>Fri, 20 Jul 2012 07:52:00 GMT</pubDate><guid>http://www.blogjava.net/hyljava/archive/2012/07/20/383604.html</guid><wfw:comment>http://www.blogjava.net/hyljava/comments/383604.html</wfw:comment><comments>http://www.blogjava.net/hyljava/archive/2012/07/20/383604.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/hyljava/comments/commentRss/383604.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hyljava/services/trackbacks/383604.html</trackback:ping><description><![CDATA[<br /><br /><img border="0" alt="" src="http://www.blogjava.net/images/blogjava_net/hyljava/989.jpg" width="643" height="200" /><br /><br /><br /><img border="0" alt="" src="http://www.blogjava.net/images/blogjava_net/hyljava/4905.jpg" /><img src ="http://www.blogjava.net/hyljava/aggbug/383604.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hyljava/" target="_blank">何云隆</a> 2012-07-20 15:52 <a href="http://www.blogjava.net/hyljava/archive/2012/07/20/383604.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Struts2自定义局部类型转换器</title><link>http://www.blogjava.net/hyljava/archive/2012/07/20/383596.html</link><dc:creator>何云隆</dc:creator><author>何云隆</author><pubDate>Fri, 20 Jul 2012 06:38:00 GMT</pubDate><guid>http://www.blogjava.net/hyljava/archive/2012/07/20/383596.html</guid><wfw:comment>http://www.blogjava.net/hyljava/comments/383596.html</wfw:comment><comments>http://www.blogjava.net/hyljava/archive/2012/07/20/383596.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/hyljava/comments/commentRss/383596.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hyljava/services/trackbacks/383596.html</trackback:ping><description><![CDATA[一、AddUAction <br />package com;<br />import java.util.Date;<br />public class AddUAction {<br />&nbsp;private Date birdate;<br />&nbsp;public Date getBirdate() {<br />&nbsp;&nbsp;return birdate;<br />&nbsp;}<br />&nbsp;public void setBirdate(Date birdate) {<br />&nbsp;&nbsp;this.birdate = birdate;<br />&nbsp;}<br />&nbsp;public String addU(){<br />&nbsp;&nbsp;System.out.println(birdate);<br />&nbsp;&nbsp;return&nbsp; "ok";<br />&nbsp;}<br />}<br />二、struts.xml<br />&lt;?xml version="1.0" encoding="UTF-8" ?&gt;<br />&lt;!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "<a href="http://struts.apache.org/dtds/struts-2.1.dtd">http://struts.apache.org/dtds/struts-2.1.dtd</a>"&gt;<br />&lt;struts&gt;<br />&lt;package name="te" namespace="/te" extends="struts-default"&gt;<br />&nbsp;&lt;action name="teMan" class="com.AddUAction" method="addU"&gt;<br />&nbsp;&lt;result name="ok"&gt;/index.jsp&lt;/result&gt;<br />&nbsp;&lt;/action&gt;<br />&lt;/package&gt;<br />&lt;/struts&gt;&nbsp;&nbsp;&nbsp; <br /><br />三、DateConverter <br />package com;<br />import java.util.Date;<br />import java.text.SimpleDateFormat;<br />import java.util.Map;<br />import com.opensymphony.xwork2.conversion.impl.DefaultTypeConverter;<br />public class DateConverter extends DefaultTypeConverter {<br />&nbsp;@Override<br />&nbsp;public Object convertValue(Map&lt;String, Object&gt; context, Object value,<br />&nbsp;&nbsp;&nbsp;Class toType) {<br />&nbsp;&nbsp;SimpleDateFormat dateFormat=new SimpleDateFormat("yyyyMMdd");<br />&nbsp;&nbsp;try{<br />&nbsp;&nbsp;&nbsp;if(toType==Date.class){<br />&nbsp;&nbsp;&nbsp;&nbsp;String[] params=(String[]) value;<br />&nbsp;&nbsp;&nbsp;&nbsp;return dateFormat.parse(params[0]);<br />&nbsp;&nbsp;&nbsp;}else{<br />&nbsp;&nbsp;&nbsp;&nbsp;Date date=(Date) value;<br />&nbsp;&nbsp;&nbsp;&nbsp;return dateFormat.format(date);<br />&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;}catch (Exception e) {<br />&nbsp;&nbsp;&nbsp;return null;<br />&nbsp;&nbsp;}<br />&nbsp;}<br />}<br /><br />四、AddUAction-conversion.properties<br />birdate=com.DateConverter<br />五、包结构<br /><img border="0" alt="" src="http://www.blogjava.net/images/blogjava_net/hyljava/331.jpg" /><br /><br /><br />六、在地址栏输入<br /><a href="http://localhost:8080/test/te/teMan!addU?birdate=20010205">http://localhost:8080/test/te/teMan!addU?birdate=20010205</a><br /><br />七、结果会在jsp页面显示出来<br />This is my JSP page. <br />Mon Feb 05 00:00:00 CST 2001 <br /><br /><br /><img src ="http://www.blogjava.net/hyljava/aggbug/383596.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hyljava/" target="_blank">何云隆</a> 2012-07-20 14:38 <a href="http://www.blogjava.net/hyljava/archive/2012/07/20/383596.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>