﻿<?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-心情小站-随笔分类-表现层相关</title><link>http://www.blogjava.net/ronghao/category/5763.html</link><description>心有多大，舞台就有多大</description><language>zh-cn</language><lastBuildDate>Tue, 27 Feb 2007 17:05:06 GMT</lastBuildDate><pubDate>Tue, 27 Feb 2007 17:05:06 GMT</pubDate><ttl>60</ttl><item><title>使用freemarker给cms生成静态html</title><link>http://www.blogjava.net/RongHao/archive/2006/11/27/83858.html</link><dc:creator>ronghao</dc:creator><author>ronghao</author><pubDate>Mon, 27 Nov 2006 10:51:00 GMT</pubDate><guid>http://www.blogjava.net/RongHao/archive/2006/11/27/83858.html</guid><wfw:comment>http://www.blogjava.net/RongHao/comments/83858.html</wfw:comment><comments>http://www.blogjava.net/RongHao/archive/2006/11/27/83858.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/RongHao/comments/commentRss/83858.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/RongHao/services/trackbacks/83858.html</trackback:ping><description><![CDATA[作为CMS内容发布来说，将要显示的内容html化无疑是一个很基本的要求，这样可以提高整个系统的效率。<br />考虑一个内容节点Content,其中节点有个pagecontent的属性，这个属性用来存储用户在后台输入的内容，<br />内容+模板=显示，这里是：<br />内容+模板--&gt;显示静态html<br />内容用FCK来编辑，模板也同样用FCK编辑，这里用freemarker无疑是一个好的选择。这里是个最简单的例子。<br />首先定义一个最简单的模板content.ftl<br /><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">html</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br /><img id="Codehighlighter1_8_16_Open_Image" onclick="this.style.display='none'; Codehighlighter1_8_16_Open_Text.style.display='none'; Codehighlighter1_8_16_Closed_Image.style.display='inline'; Codehighlighter1_8_16_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_8_16_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_8_16_Closed_Text.style.display='none'; Codehighlighter1_8_16_Open_Image.style.display='inline'; Codehighlighter1_8_16_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" />$</span><span id="Codehighlighter1_8_16_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_8_16_Open_Text"><span style="COLOR: #000000">{content}</span></span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #000000">&lt;/</span><span style="COLOR: #000000">html</span><span style="COLOR: #000000">&gt;</span></div>然后就是把内容填充进去：<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" /><span style="COLOR: #000000"> Configuration cfg </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> Configuration();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /> </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">模板存储的目录</span><span style="COLOR: #008000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #000000"> cfg.setDirectoryForTemplateLoading(Path.getTemplateDirectory());<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /> </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">默认</span><span style="COLOR: #008000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #000000"> cfg.setObjectWrapper(</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> DefaultObjectWrapper());<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">填充数据        </span><span style="COLOR: #008000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #000000">Map root </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> HashMap();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />root.put(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">content</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">, c.getPageContent());<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />     Template temp </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> cfg.getTemplate(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">content.ftl</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">发布日期</span><span style="COLOR: #008000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #000000">String date</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">c.getActivedate();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />String filename </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> c.getId()</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">.html</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">创建目录</span><span style="COLOR: #008000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #000000">Path.createFold(Path.getWebCmsHtmlDirPath(),date);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />Writer out </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> OutputStreamWriter(</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> FileOutputStream(Path.getWebCmsHtmlDirPath()</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">date</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">filename));<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />temp.process(root, out);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />out.flush();</span></div>其实就是这么简单！对html的管理就很容易了，基本的FILE操作<img src ="http://www.blogjava.net/RongHao/aggbug/83858.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/RongHao/" target="_blank">ronghao</a> 2006-11-27 18:51 <a href="http://www.blogjava.net/RongHao/archive/2006/11/27/83858.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>页面标签tld位置</title><link>http://www.blogjava.net/RongHao/archive/2006/10/12/74798.html</link><dc:creator>ronghao</dc:creator><author>ronghao</author><pubDate>Thu, 12 Oct 2006 07:50:00 GMT</pubDate><guid>http://www.blogjava.net/RongHao/archive/2006/10/12/74798.html</guid><wfw:comment>http://www.blogjava.net/RongHao/comments/74798.html</wfw:comment><comments>http://www.blogjava.net/RongHao/archive/2006/10/12/74798.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/RongHao/comments/commentRss/74798.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/RongHao/services/trackbacks/74798.html</trackback:ping><description><![CDATA[今天对acegi的页面标签做扩展，突然发现找不到tld文件了<br />Jsp中非常简单：<br />&lt;%@ taglib prefix="authz" uri="<a href="http://acegisecurity.org/authz">http://acegisecurity.org/authz</a>" %&gt;<br />但记得自己没有在web.xml中声明这个标签，咋就跑起来了呢？google一下，原来authz.tld被打入jar包的META-INF下<br />呵呵，记录一下<img src ="http://www.blogjava.net/RongHao/aggbug/74798.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/RongHao/" target="_blank">ronghao</a> 2006-10-12 15:50 <a href="http://www.blogjava.net/RongHao/archive/2006/10/12/74798.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>webwork保存图片到数据库</title><link>http://www.blogjava.net/RongHao/archive/2006/06/15/53030.html</link><dc:creator>ronghao</dc:creator><author>ronghao</author><pubDate>Thu, 15 Jun 2006 09:14:00 GMT</pubDate><guid>http://www.blogjava.net/RongHao/archive/2006/06/15/53030.html</guid><wfw:comment>http://www.blogjava.net/RongHao/comments/53030.html</wfw:comment><comments>http://www.blogjava.net/RongHao/archive/2006/06/15/53030.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/RongHao/comments/commentRss/53030.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/RongHao/services/trackbacks/53030.html</trackback:ping><description><![CDATA[
		<p>
		</p>
		<p>开发中遇到这么一个要求，用户USER这个PO里需要保存用户的照片。一般情况下有两种处理方法：一是直接保存图片到数据库；二是保存图片到服务器端，PO字段保存一个联接。考虑到用户照片一般较小，采用第一种方法。<br /></p>
		<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee">
				<span style="COLOR: #008080"> 1</span>
				<img id="Codehighlighter1_36_235_Open_Image" onclick="this.style.display='none'; Codehighlighter1_36_235_Open_Text.style.display='none'; Codehighlighter1_36_235_Closed_Image.style.display='inline'; Codehighlighter1_36_235_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" />
				<img id="Codehighlighter1_36_235_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_36_235_Closed_Text.style.display='none'; Codehighlighter1_36_235_Open_Image.style.display='inline'; Codehighlighter1_36_235_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" />
				<span style="COLOR: #0000ff">public</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #0000ff">class</span>
				<span style="COLOR: #000000"> User </span>
				<span style="COLOR: #0000ff">extends</span>
				<span style="COLOR: #000000"> Principal </span>
				<span id="Codehighlighter1_36_235_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
						<img src="http://www.blogjava.net/images/dot.gif" />
				</span>
				<span id="Codehighlighter1_36_235_Open_Text">
						<span style="COLOR: #000000">{<br /></span>
						<span style="COLOR: #008080"> 2</span>
						<span style="COLOR: #000000">
								<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    </span>
						<span style="COLOR: #0000ff">private</span>
						<span style="COLOR: #000000"> </span>
						<span style="COLOR: #0000ff">byte</span>
						<span style="COLOR: #000000">[] photo;   </span>
						<span style="COLOR: #008000">//</span>
						<span style="COLOR: #008000">考虑与各种数据库兼容问题</span>
						<span style="COLOR: #008000">
								<br />
						</span>
						<span style="COLOR: #008080"> 3</span>
						<span style="COLOR: #008000">
								<img id="Codehighlighter1_110_138_Open_Image" onclick="this.style.display='none'; Codehighlighter1_110_138_Open_Text.style.display='none'; Codehighlighter1_110_138_Closed_Image.style.display='inline'; Codehighlighter1_110_138_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" />
								<img id="Codehighlighter1_110_138_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_110_138_Closed_Text.style.display='none'; Codehighlighter1_110_138_Open_Image.style.display='inline'; Codehighlighter1_110_138_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />
						</span>
						<span style="COLOR: #000000">    </span>
						<span style="COLOR: #0000ff">public</span>
						<span style="COLOR: #000000"> </span>
						<span style="COLOR: #0000ff">byte</span>
						<span style="COLOR: #000000">[] getPhoto() </span>
						<span id="Codehighlighter1_110_138_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
								<img src="http://www.blogjava.net/images/dot.gif" />
						</span>
						<span id="Codehighlighter1_110_138_Open_Text">
								<span style="COLOR: #000000">{<br /></span>
								<span style="COLOR: #008080"> 4</span>
								<span style="COLOR: #000000">
										<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        </span>
								<span style="COLOR: #0000ff">return</span>
								<span style="COLOR: #000000"> photo;<br /></span>
								<span style="COLOR: #008080"> 5</span>
								<span style="COLOR: #000000">
										<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span>
						</span>
						<span style="COLOR: #000000">
								<br />
						</span>
						<span style="COLOR: #008080"> 6</span>
						<span style="COLOR: #000000">
								<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />
								<br />
						</span>
						<span style="COLOR: #008080"> 7</span>
						<span style="COLOR: #000000">
								<img id="Codehighlighter1_180_214_Open_Image" onclick="this.style.display='none'; Codehighlighter1_180_214_Open_Text.style.display='none'; Codehighlighter1_180_214_Closed_Image.style.display='inline'; Codehighlighter1_180_214_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" />
								<img id="Codehighlighter1_180_214_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_180_214_Closed_Text.style.display='none'; Codehighlighter1_180_214_Open_Image.style.display='inline'; Codehighlighter1_180_214_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span>
						<span style="COLOR: #0000ff">public</span>
						<span style="COLOR: #000000"> </span>
						<span style="COLOR: #0000ff">void</span>
						<span style="COLOR: #000000"> setPhoto(</span>
						<span style="COLOR: #0000ff">byte</span>
						<span style="COLOR: #000000">[] photo) </span>
						<span id="Codehighlighter1_180_214_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
								<img src="http://www.blogjava.net/images/dot.gif" />
						</span>
						<span id="Codehighlighter1_180_214_Open_Text">
								<span style="COLOR: #000000">{<br /></span>
								<span style="COLOR: #008080"> 8</span>
								<span style="COLOR: #000000">
										<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        </span>
								<span style="COLOR: #0000ff">this</span>
								<span style="COLOR: #000000">.photo </span>
								<span style="COLOR: #000000">=</span>
								<span style="COLOR: #000000"> photo;<br /></span>
								<span style="COLOR: #008080"> 9</span>
								<span style="COLOR: #000000">
										<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span>
						</span>
						<span style="COLOR: #000000">
								<br />
						</span>
						<span style="COLOR: #008080">10</span>
						<span style="COLOR: #000000">
								<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    <img src="http://www.blogjava.net/images/dot.gif" /><img src="http://www.blogjava.net/images/dot.gif" /><img src="http://www.blogjava.net/images/dot.gif" /><img src="http://www.blogjava.net/images/dot.gif" />..<br /></span>
						<span style="COLOR: #008080">11</span>
						<span style="COLOR: #000000">
								<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span>
				</span>
				<span style="COLOR: #000000">
						<br />
				</span>
				<span style="COLOR: #008080">12</span>
				<span style="COLOR: #000000">
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				</span>
		</div>
		<p>
				<br />页面里面，直接用webwork的FileUploadInterceptor拦截<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" />
				<span style="COLOR: #000000">&lt;</span>
				<span style="COLOR: #000000">@ww.form  enctype</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">multipart/form-data</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000"> action</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">doUpdateUser</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">  method</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">post</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				</span>
				<span style="COLOR: #000000">&lt;</span>
				<span style="COLOR: #000000">image name</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">img1</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000"> src</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">/getUserPhoto.action?userId=${user.id}</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000"> width</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000">90</span>
				<span style="COLOR: #000000"> height</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000">120</span>
				<span style="COLOR: #000000"> border</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">0</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">&gt;&lt;/</span>
				<span style="COLOR: #000000">image</span>
				<span style="COLOR: #000000">&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				</span>
				<span style="COLOR: #000000">&lt;</span>
				<span style="COLOR: #000000">@ww.file label</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">%{getText('user.photo')}</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000"> name</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">photo</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #000000">/&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				</span>
				<span style="COLOR: #000000">&lt;/</span>
				<span style="COLOR: #000000">@ww.form</span>
				<span style="COLOR: #000000">&gt;</span>
		</div>
		<p>
				<br />xwork.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" />
				<span style="COLOR: #000000">       </span>
				<span style="COLOR: #000000">&lt;</span>
				<span style="COLOR: #000000">action name</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">doUpdateUser</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #0000ff">class</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">com.ronghao.organization.action.OrganizationAction</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000"> method</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">updateUser</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />            </span>
				<span style="COLOR: #000000">&lt;</span>
				<span style="COLOR: #000000">interceptor</span>
				<span style="COLOR: #000000">-</span>
				<span style="COLOR: #000000">ref name</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">defaultStack</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />                </span>
				<span style="COLOR: #000000">&lt;</span>
				<span style="COLOR: #000000">param name</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">fileUpload.allowedTypes</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />                     image</span>
				<span style="COLOR: #000000">/</span>
				<span style="COLOR: #000000">x</span>
				<span style="COLOR: #000000">-</span>
				<span style="COLOR: #000000">png,image</span>
				<span style="COLOR: #000000">/</span>
				<span style="COLOR: #000000">gif,image</span>
				<span style="COLOR: #000000">/</span>
				<span style="COLOR: #000000">pjpeg<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />                </span>
				<span style="COLOR: #000000">&lt;/</span>
				<span style="COLOR: #000000">param</span>
				<span style="COLOR: #000000">&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />            </span>
				<span style="COLOR: #000000">&lt;/</span>
				<span style="COLOR: #000000">interceptor</span>
				<span style="COLOR: #000000">-</span>
				<span style="COLOR: #000000">ref</span>
				<span style="COLOR: #000000">&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />            </span>
				<span style="COLOR: #000000">&lt;</span>
				<span style="COLOR: #000000">result name</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">success</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">&gt;/</span>
				<span style="COLOR: #000000">organization</span>
				<span style="COLOR: #000000">/</span>
				<span style="COLOR: #000000">user.ftl</span>
				<span style="COLOR: #000000">&lt;/</span>
				<span style="COLOR: #000000">result</span>
				<span style="COLOR: #000000">&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />        </span>
				<span style="COLOR: #000000">&lt;/</span>
				<span style="COLOR: #000000">action</span>
				<span style="COLOR: #000000">&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />        </span>
				<span style="COLOR: #000000">&lt;</span>
				<span style="COLOR: #000000">action name</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">getUserPhoto</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #0000ff">class</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">com.ronghao.organization.action.OrganizationAction</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000"> method</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">getUserPhoto</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />            </span>
				<span style="COLOR: #000000">&lt;</span>
				<span style="COLOR: #000000">result</span>
				<span style="COLOR: #000000">&gt;/</span>
				<span style="COLOR: #000000">organization</span>
				<span style="COLOR: #000000">/</span>
				<span style="COLOR: #000000">user.ftl</span>
				<span style="COLOR: #000000">&lt;/</span>
				<span style="COLOR: #000000">result</span>
				<span style="COLOR: #000000">&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />        </span>
				<span style="COLOR: #000000">&lt;/</span>
				<span style="COLOR: #000000">action</span>
				<span style="COLOR: #000000">&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				</span>
		</div>
		<p>
				<br />引用默认的拦截器栈，栈里已经包含FileUploadInterceptor拦截，这里配置FileUploadInterceptor拦截的参数，设定上传的文件为图片<br />格式<br />Action类<br /></p>
		<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee">
				<span style="COLOR: #008080"> 1</span>
				<img id="Codehighlighter1_62_1047_Open_Image" onclick="this.style.display='none'; Codehighlighter1_62_1047_Open_Text.style.display='none'; Codehighlighter1_62_1047_Closed_Image.style.display='inline'; Codehighlighter1_62_1047_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" />
				<img id="Codehighlighter1_62_1047_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_62_1047_Closed_Text.style.display='none'; Codehighlighter1_62_1047_Open_Image.style.display='inline'; Codehighlighter1_62_1047_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" />
				<span style="COLOR: #0000ff">public</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #0000ff">class</span>
				<span style="COLOR: #000000"> OrganizationAction </span>
				<span style="COLOR: #0000ff">extends</span>
				<span style="COLOR: #000000"> BaseOrganizationAction</span>
				<span id="Codehighlighter1_62_1047_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
						<img src="http://www.blogjava.net/images/dot.gif" />
				</span>
				<span id="Codehighlighter1_62_1047_Open_Text">
						<span style="COLOR: #000000">{<br /></span>
						<span style="COLOR: #008080"> 2</span>
						<span style="COLOR: #000000">
								<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    </span>
						<span style="COLOR: #0000ff">private</span>
						<span style="COLOR: #000000"> File photo;  </span>
						<span style="COLOR: #008000">//</span>
						<span style="COLOR: #008000">与页面里的上传文件字段名对应</span>
						<span style="COLOR: #008000">
								<br />
						</span>
						<span style="COLOR: #008080"> 3</span>
						<span style="COLOR: #008000">
								<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />
						</span>
						<span style="COLOR: #000000">    </span>
						<span style="COLOR: #0000ff">private</span>
						<span style="COLOR: #000000"> OutputStream outPhoto<br /></span>
						<span style="COLOR: #008080"> 4</span>
						<span style="COLOR: #000000">
								<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />
								<br />
						</span>
						<span style="COLOR: #008080"> 5</span>
						<span style="COLOR: #000000">
								<img id="Codehighlighter1_146_217_Open_Image" onclick="this.style.display='none'; Codehighlighter1_146_217_Open_Text.style.display='none'; Codehighlighter1_146_217_Closed_Image.style.display='inline'; Codehighlighter1_146_217_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" />
								<img id="Codehighlighter1_146_217_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_146_217_Closed_Text.style.display='none'; Codehighlighter1_146_217_Open_Image.style.display='inline'; Codehighlighter1_146_217_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />     </span>
						<span id="Codehighlighter1_146_217_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">/** */</span>
						<span id="Codehighlighter1_146_217_Open_Text">
								<span style="COLOR: #008000">/**</span>
								<span style="COLOR: #008000">
										<br />
								</span>
								<span style="COLOR: #008080"> 6</span>
								<span style="COLOR: #008000">
										<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />     * 更新用户信息<br /></span>
								<span style="COLOR: #008080"> 7</span>
								<span style="COLOR: #008000">
										<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />     *<br /></span>
								<span style="COLOR: #008080"> 8</span>
								<span style="COLOR: #008000">
										<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />     * </span>
								<span style="COLOR: #808080">@return</span>
								<span style="COLOR: #008000">
										<br />
								</span>
								<span style="COLOR: #008080"> 9</span>
								<span style="COLOR: #008000">
										<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />     * </span>
								<span style="COLOR: #808080">@throws</span>
								<span style="COLOR: #008000"> Exception<br /></span>
								<span style="COLOR: #008080">10</span>
								<span style="COLOR: #008000">
										<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />     </span>
								<span style="COLOR: #008000">*/</span>
						</span>
						<span style="COLOR: #000000">
								<br />
						</span>
						<span style="COLOR: #008080">11</span>
						<span style="COLOR: #000000">
								<img id="Codehighlighter1_267_674_Open_Image" onclick="this.style.display='none'; Codehighlighter1_267_674_Open_Text.style.display='none'; Codehighlighter1_267_674_Closed_Image.style.display='inline'; Codehighlighter1_267_674_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" />
								<img id="Codehighlighter1_267_674_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_267_674_Closed_Text.style.display='none'; Codehighlighter1_267_674_Open_Image.style.display='inline'; Codehighlighter1_267_674_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span>
						<span style="COLOR: #0000ff">public</span>
						<span style="COLOR: #000000"> String updateUser() </span>
						<span style="COLOR: #0000ff">throws</span>
						<span style="COLOR: #000000"> Exception </span>
						<span id="Codehighlighter1_267_674_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
								<img src="http://www.blogjava.net/images/dot.gif" />
						</span>
						<span id="Codehighlighter1_267_674_Open_Text">
								<span style="COLOR: #000000">{<br /></span>
								<span style="COLOR: #008080">12</span>
								<span style="COLOR: #000000">
										<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        </span>
								<span style="COLOR: #008000">//</span>
								<span style="COLOR: #008000">以下为保存图片,视情况修改</span>
								<span style="COLOR: #008000">
										<br />
								</span>
								<span style="COLOR: #008080">13</span>
								<span style="COLOR: #008000">
										<img id="Codehighlighter1_320_598_Open_Image" onclick="this.style.display='none'; Codehighlighter1_320_598_Open_Text.style.display='none'; Codehighlighter1_320_598_Closed_Image.style.display='inline'; Codehighlighter1_320_598_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" />
										<img id="Codehighlighter1_320_598_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_320_598_Closed_Text.style.display='none'; Codehighlighter1_320_598_Open_Image.style.display='inline'; Codehighlighter1_320_598_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />
								</span>
								<span style="COLOR: #000000">        </span>
								<span style="COLOR: #0000ff">if</span>
								<span style="COLOR: #000000"> (</span>
								<span style="COLOR: #0000ff">null</span>
								<span style="COLOR: #000000"> </span>
								<span style="COLOR: #000000">!=</span>
								<span style="COLOR: #000000"> photo) </span>
								<span id="Codehighlighter1_320_598_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
										<img src="http://www.blogjava.net/images/dot.gif" />
								</span>
								<span id="Codehighlighter1_320_598_Open_Text">
										<span style="COLOR: #000000">{<br /></span>
										<span style="COLOR: #008080">14</span>
										<span style="COLOR: #000000">
												<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />            FileInputStream file </span>
										<span style="COLOR: #000000">=</span>
										<span style="COLOR: #000000"> </span>
										<span style="COLOR: #0000ff">new</span>
										<span style="COLOR: #000000"> FileInputStream(photo);<br /></span>
										<span style="COLOR: #008080">15</span>
										<span style="COLOR: #000000">
												<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />            </span>
										<span style="COLOR: #0000ff">int</span>
										<span style="COLOR: #000000"> length </span>
										<span style="COLOR: #000000">=</span>
										<span style="COLOR: #000000"> file.available();<br /></span>
										<span style="COLOR: #008080">16</span>
										<span style="COLOR: #000000">
												<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />            </span>
										<span style="COLOR: #0000ff">byte</span>
										<span style="COLOR: #000000">[] buffer </span>
										<span style="COLOR: #000000">=</span>
										<span style="COLOR: #000000"> </span>
										<span style="COLOR: #0000ff">new</span>
										<span style="COLOR: #000000"> </span>
										<span style="COLOR: #0000ff">byte</span>
										<span style="COLOR: #000000">[length];<br /></span>
										<span style="COLOR: #008080">17</span>
										<span style="COLOR: #000000">
												<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />            file.read(buffer);<br /></span>
										<span style="COLOR: #008080">18</span>
										<span style="COLOR: #000000">
												<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />            file.close();<br /></span>
										<span style="COLOR: #008080">19</span>
										<span style="COLOR: #000000">
												<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />            user.setPhoto(buffer);   </span>
										<span style="COLOR: #008000">//</span>
										<span style="COLOR: #008000">将上传的图片转换为字节数组存储到PO中</span>
										<span style="COLOR: #008000">
												<br />
										</span>
										<span style="COLOR: #008080">20</span>
										<span style="COLOR: #008000">
												<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />
										</span>
										<span style="COLOR: #000000">        }</span>
								</span>
								<span style="COLOR: #000000">
										<br />
								</span>
								<span style="COLOR: #008080">21</span>
								<span style="COLOR: #000000">
										<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        organizationService.updateUser(user);<br /></span>
								<span style="COLOR: #008080">22</span>
								<span style="COLOR: #000000">
										<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        </span>
								<span style="COLOR: #0000ff">return</span>
								<span style="COLOR: #000000"> SUCCESS;<br /></span>
								<span style="COLOR: #008080">23</span>
								<span style="COLOR: #000000">
										<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span>
						</span>
						<span style="COLOR: #000000">
								<br />
						</span>
						<span style="COLOR: #008080">24</span>
						<span style="COLOR: #000000">
								<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />
								<br />
						</span>
						<span style="COLOR: #008080">25</span>
						<span style="COLOR: #000000">
								<img id="Codehighlighter1_727_1045_Open_Image" onclick="this.style.display='none'; Codehighlighter1_727_1045_Open_Text.style.display='none'; Codehighlighter1_727_1045_Closed_Image.style.display='inline'; Codehighlighter1_727_1045_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" />
								<img id="Codehighlighter1_727_1045_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_727_1045_Closed_Text.style.display='none'; Codehighlighter1_727_1045_Open_Image.style.display='inline'; Codehighlighter1_727_1045_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span>
						<span style="COLOR: #0000ff">public</span>
						<span style="COLOR: #000000"> String getUserPhoto() </span>
						<span style="COLOR: #0000ff">throws</span>
						<span style="COLOR: #000000"> Exception </span>
						<span id="Codehighlighter1_727_1045_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
								<img src="http://www.blogjava.net/images/dot.gif" />
						</span>
						<span id="Codehighlighter1_727_1045_Open_Text">
								<span style="COLOR: #000000">{<br /></span>
								<span style="COLOR: #008080">26</span>
								<span style="COLOR: #000000">
										<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        user </span>
								<span style="COLOR: #000000">=</span>
								<span style="COLOR: #000000"> organizationService.getUserById(userId);<br /></span>
								<span style="COLOR: #008080">27</span>
								<span style="COLOR: #000000">
										<img id="Codehighlighter1_822_1015_Open_Image" onclick="this.style.display='none'; Codehighlighter1_822_1015_Open_Text.style.display='none'; Codehighlighter1_822_1015_Closed_Image.style.display='inline'; Codehighlighter1_822_1015_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" />
										<img id="Codehighlighter1_822_1015_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_822_1015_Closed_Text.style.display='none'; Codehighlighter1_822_1015_Open_Image.style.display='inline'; Codehighlighter1_822_1015_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />        </span>
								<span style="COLOR: #0000ff">if</span>
								<span style="COLOR: #000000"> (user.getPhoto() </span>
								<span style="COLOR: #000000">!=</span>
								<span style="COLOR: #000000"> </span>
								<span style="COLOR: #0000ff">null</span>
								<span style="COLOR: #000000">) </span>
								<span id="Codehighlighter1_822_1015_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
										<img src="http://www.blogjava.net/images/dot.gif" />
								</span>
								<span id="Codehighlighter1_822_1015_Open_Text">
										<span style="COLOR: #000000">{<br /></span>
										<span style="COLOR: #008080">28</span>
										<span style="COLOR: #000000">
												<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />            outPhoto </span>
										<span style="COLOR: #000000">=</span>
										<span style="COLOR: #000000"> </span>
										<span style="COLOR: #0000ff">this</span>
										<span style="COLOR: #000000">.getResponse().getOutputStream(); </span>
										<span style="COLOR: #008000">//</span>
										<span style="COLOR: #008000">将PO中字节数组转换为输出流</span>
										<span style="COLOR: #008000">
												<br />
										</span>
										<span style="COLOR: #008080">29</span>
										<span style="COLOR: #008000">
												<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />
										</span>
										<span style="COLOR: #000000">            outPhoto.write(user.getPhoto());<br /></span>
										<span style="COLOR: #008080">30</span>
										<span style="COLOR: #000000">
												<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />            outPhoto.flush();<br /></span>
										<span style="COLOR: #008080">31</span>
										<span style="COLOR: #000000">
												<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />            outPhoto.close();<br /></span>
										<span style="COLOR: #008080">32</span>
										<span style="COLOR: #000000">
												<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />        }</span>
								</span>
								<span style="COLOR: #000000">
										<br />
								</span>
								<span style="COLOR: #008080">33</span>
								<span style="COLOR: #000000">
										<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        </span>
								<span style="COLOR: #0000ff">return</span>
								<span style="COLOR: #000000"> SUCCESS;<br /></span>
								<span style="COLOR: #008080">34</span>
								<span style="COLOR: #000000">
										<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span>
						</span>
						<span style="COLOR: #000000">
								<br />
						</span>
						<span style="COLOR: #008080">35</span>
						<span style="COLOR: #000000">
								<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span>
				</span>
				<span style="COLOR: #000000">
						<br />
				</span>
				<span style="COLOR: #008080">36</span>
				<span style="COLOR: #000000">
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				</span>
		</div>
		<p>
				<br />这样就OK了，考虑一个问题，就是action 必须要指定一个result ，实际这里的图片显示仅仅是要一个输出流<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" />
				<span style="COLOR: #000000">&lt;</span>
				<span style="COLOR: #000000">image name</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">img1</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000"> src</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">/getUserPhoto.action?userId=${user.id}</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000"> width</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000">90</span>
				<span style="COLOR: #000000"> height</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000">120</span>
				<span style="COLOR: #000000"> border</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">0</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">&gt;&lt;/</span>
				<span style="COLOR: #000000">image</span>
				<span style="COLOR: #000000">&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				</span>
		</div>
		<p>
				<br />而我的配置里面是<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" />
				<span style="COLOR: #000000">&lt;</span>
				<span style="COLOR: #000000">result</span>
				<span style="COLOR: #000000">&gt;/</span>
				<span style="COLOR: #000000">organization</span>
				<span style="COLOR: #000000">/</span>
				<span style="COLOR: #000000">user.ftl</span>
				<span style="COLOR: #000000">&lt;/</span>
				<span style="COLOR: #000000">result</span>
				<span style="COLOR: #000000">&gt;</span>
		</div>
		<p>
				<br />不知道这会不会有什么影响。或者这样？<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" />
				<span style="COLOR: #000000">&lt;</span>
				<span style="COLOR: #000000">result</span>
				<span style="COLOR: #000000">&gt;/</span>
				<span style="COLOR: #000000">organization</span>
				<span style="COLOR: #000000">/</span>
				<span style="COLOR: #000000">blank.ftl</span>
				<span style="COLOR: #000000">&lt;/</span>
				<span style="COLOR: #000000">result</span>
				<span style="COLOR: #000000">&gt;</span>
		</div>
<img src ="http://www.blogjava.net/RongHao/aggbug/53030.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/RongHao/" target="_blank">ronghao</a> 2006-06-15 17:14 <a href="http://www.blogjava.net/RongHao/archive/2006/06/15/53030.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>用Tomcat实现容器内认证</title><link>http://www.blogjava.net/RongHao/archive/2005/12/28/25714.html</link><dc:creator>ronghao</dc:creator><author>ronghao</author><pubDate>Wed, 28 Dec 2005 06:00:00 GMT</pubDate><guid>http://www.blogjava.net/RongHao/archive/2005/12/28/25714.html</guid><wfw:comment>http://www.blogjava.net/RongHao/comments/25714.html</wfw:comment><comments>http://www.blogjava.net/RongHao/archive/2005/12/28/25714.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/RongHao/comments/commentRss/25714.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/RongHao/services/trackbacks/25714.html</trackback:ping><description><![CDATA[<P><STRONG>在数据库里新建两个表</STRONG><BR>A、用户表<BR>create table users (user_name varchar(20) not null, <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; user_pass varchar(20) not null, <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PRIMARY KEY (user_name)) ;<BR>B、用户与角色关联表<BR>create table user_roles (user_name varchar(20) not null,<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; role_name varchar(20) not null, <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PRIMARY KEY (user_name)) ;<BR>C、插入数据<BR>insert into users values('user1', 'password');<BR>insert into user_roles values('user1', 'manager');</P>
<P><STRONG>在tomcat的server.xml里加入描述<BR></STRONG>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;Realm&nbsp; className="org.apache.catalina.realm.JDBCRealm"<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; driverName="org.gjt.mm.mysql.Driver"<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; connectionURL="jdbc:mysql://localhost/databaseName"<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; connectionName=yourname connectionPassword=yourpassword<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; userTable="users" userNameCol="user_name" userCredCol="user_pass"<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; userRoleTable="user_roles" roleNameCol="role_name" /&gt;</P>
<P><STRONG>在自己应用程序的web.xml里加入描述（基于表单）</STRONG><BR>&lt;security-constraint&gt;<BR>&nbsp; &lt;web-resource-collection&gt;<BR>&nbsp;&nbsp; &lt;web-resource-name&gt;My Test&lt;/web-resource-name&gt;<BR>&nbsp;&nbsp; &lt;url-pattern&gt;/get.jsp&lt;/url-pattern&gt;<BR>&nbsp; &lt;/web-resource-collection&gt;<BR>&nbsp; &lt;auth-constraint&gt;<BR>&nbsp;&nbsp;&nbsp; &lt;role-name&gt;manager&lt;/role-name&gt;&nbsp;&nbsp;&nbsp; //能够访问的角色，可以多个<BR>&nbsp; &lt;/auth-constraint&gt;<BR>&lt;/security-constraint&gt;</P>
<P>&lt;login-config&gt;<BR>　　&lt;auth-method&gt;FORM&lt;/auth-method&gt;<BR>&nbsp;&nbsp;&nbsp; &lt;realm-name&gt;My Test&lt;/realm-name&gt;<BR>　　&lt;form-login-config&gt;<BR>　　&lt;form-login-page&gt;/login.jsp&lt;/form-login-page&gt;<BR>　　&lt;form-error-page&gt;/fail_login.html&lt;/form-error-page&gt;&nbsp; //认证失败后跳转的页面<BR>　　&lt;/form-login-config&gt;<BR>&lt;/login-config&gt;</P>
<P><STRONG>登录表单必须包含输入用户姓名和口令的字段，它们必须被分别命名为j_username和j_password，表单将这二个值发送给j_security_check逻辑名字。</STRONG><BR>　　下面是一个该表单如何在HTML网页中实现的例子：<BR>&lt;form method="POST" action="j_security_check"&gt;<BR>　　&lt;input&nbsp; type="text" name="j_username"&gt;<BR>　　&lt;input&nbsp; type="password" name="j_password"&gt;<BR>&nbsp;&nbsp;&nbsp; &lt;input&nbsp; type="submit" value="确定"/&gt;<BR>&lt;/form&gt; </P>
<P>这样当对get.jsp进行访问时，tomcat就会自动转到login.jsp页面实现认证。对于简单的认证，小型系统，采用Tomcat实现容器内认证是方便的。</P><img src ="http://www.blogjava.net/RongHao/aggbug/25714.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/RongHao/" target="_blank">ronghao</a> 2005-12-28 14:00 <a href="http://www.blogjava.net/RongHao/archive/2005/12/28/25714.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>DisplayTag应用</title><link>http://www.blogjava.net/RongHao/archive/2005/12/08/22990.html</link><dc:creator>ronghao</dc:creator><author>ronghao</author><pubDate>Thu, 08 Dec 2005 08:10:00 GMT</pubDate><guid>http://www.blogjava.net/RongHao/archive/2005/12/08/22990.html</guid><wfw:comment>http://www.blogjava.net/RongHao/comments/22990.html</wfw:comment><comments>http://www.blogjava.net/RongHao/archive/2005/12/08/22990.html#Feedback</comments><slash:comments>18</slash:comments><wfw:commentRss>http://www.blogjava.net/RongHao/comments/commentRss/22990.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/RongHao/services/trackbacks/22990.html</trackback:ping><description><![CDATA[<P>&nbsp; DisplayTag是一个非常好用的表格显示标签，适合MVC模式，其主页在<A href="http://displaytag.sourceforge.net/">http://displaytag.sourceforge.net</A>&nbsp; <BR><STRONG>一、最简单的情况，未使用&lt;display:column/&gt;标签<BR></STRONG>&nbsp; &lt;%request.setAttribute( "test", new ReportList(6) );%&gt;<BR>&nbsp; &lt;display:table name="test" /&gt;<BR>&nbsp; 标签遍历List里的每一个对象，并将对象里的所有属性显示出来。一般用于开发的时候检查对象数据的完整性。<BR>&nbsp; <BR><STRONG>二、使用&lt;display:column/&gt;标签的情况</STRONG><BR>&lt;display:table name="test"&gt;<BR>&nbsp; &lt;display:column property="id" title="ID" /&gt;<BR>&nbsp; &lt;display:column property="name" /&gt;<BR>&nbsp; &lt;display:column property="email" /&gt;<BR>&nbsp; &lt;display:column property="status" /&gt;<BR>&nbsp; &lt;display:column property="description" title="Comments"/&gt;<BR>&lt;/display:table&gt;<BR>&nbsp;&nbsp; property对应List里对象的属性（用getXXX()方法取得），title则对应表格表头里的列名。定义列有两种方式：<BR>&nbsp;&nbsp; A、&lt;display:column property="email" /&gt; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 使用&lt;display:column/&gt;标签里的property属性来定义<BR>&nbsp;&nbsp; B、&lt;display:column title="email"&gt;email@it.com&lt;/display:column&gt; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在&lt;display:column/&gt;标签体里增加内容，可以是常量，也可以用其他标签等等<BR>&nbsp;&nbsp; 两种方式比较，用property属性来定义更加快速和利于排序。<BR>&nbsp;&nbsp; <BR><STRONG>三、表格显示样式的定义<BR></STRONG>&nbsp; A、在&lt;display:table/&gt;和&lt;display:column/&gt;标签里指定标准的html属性，烦琐<BR>&nbsp; B、修改样式表<BR>&lt;display:table name="test" class="mars"&gt;<BR>&nbsp; &lt;display:column property="id" title="ID" class="idcol"/&gt;<BR>&nbsp; &lt;display:column property="name" /&gt;<BR>&nbsp; &lt;display:column property="email" /&gt;<BR>&nbsp; &lt;display:column property="status" class="tableCellError" /&gt;<BR>&nbsp; &lt;display:column property="description" title="Comments"/&gt;<BR>&lt;/display:table&gt;<BR>&nbsp;&nbsp; 通过class属性来指定所要应用的样式。可以在其默认样式表里（./css/screen.css）直接修改<BR>&nbsp;&nbsp; <BR><STRONG>四、标签取得数据的数据源<BR></STRONG>&nbsp; 有四种范围<BR>&nbsp;&nbsp; pageScope <BR>&nbsp;&nbsp; requestScope (默认)&nbsp; &lt;display:table name="test2" &gt;<BR>&nbsp;&nbsp; sessionScope&nbsp; &lt;display:table name="sessionScope.holder.list" &gt; 注意，这里要指定范围，非默认<BR>&nbsp;&nbsp; applicationScope <BR>&nbsp;&nbsp; <BR><STRONG>五、通过增加id属性创建隐含的对象<BR></STRONG>&lt;display:table name="test" id="testit"&gt;<BR>&nbsp;&nbsp;&nbsp; &lt;display:column property="id" title="ID" /&gt;<BR>&nbsp;&nbsp;&nbsp; &lt;display:column property="name" /&gt;<BR>&nbsp;&nbsp;&nbsp; &lt;display:column title="static value"&gt;static&lt;/display:column&gt;<BR>&nbsp;&nbsp;&nbsp; &lt;display:column title="row number (testit_rowNum)"&gt;&lt;%=pageContext.getAttribute("testit_rowNum")%&gt;&lt;/display:column&gt;<BR>&nbsp;&nbsp;&nbsp; &lt;display:column title="((ListObject)testit).getMoney()"&gt;&lt;%=((ListObject)pageContext.getAttribute("testit")).getMoney()%&gt;&lt;/display:column&gt;<BR>&lt;/display:table&gt;<BR>&nbsp;&nbsp; 注意到在&lt;display:table/&gt;里增加了id属性，这时就在page context里创建了一个隐含对象，指向List里的当前对象，<BR>&nbsp;&nbsp; 可以通过(ListObject)pageContext.getAttribute("id")来捕获这个对象。同时还创建了一个id_rowNum对象，同样，可<BR>&nbsp;&nbsp; 通过pageContext.getAttribute("testit_rowNum")来捕获，它仅仅代表当前行的行数。<BR>&nbsp;&nbsp; 有了这两个隐含对象，就可以通过其他标签来访问，例如Jstl:<BR>&nbsp; &lt;display:table id="row" name="mylist"&gt;<BR>&nbsp;&nbsp;&nbsp; &lt;display:column title="row number" &gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;c:out value="${row_rowNum}"/&gt;<BR>&nbsp;&nbsp;&nbsp; &lt;/display:column&gt;<BR>&nbsp;&nbsp;&nbsp; &lt;display:column title="name" &gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;c:out value="${row.first_name}"/&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;c:out value="${row.last_name}"/&gt;<BR>&nbsp;&nbsp;&nbsp; &lt;/display:column&gt;<BR>&nbsp; &lt;/display:table&gt;<BR>&nbsp; <BR><STRONG>六、显示部分数据</STRONG><BR>&nbsp;&nbsp; 显示开始五条数据：通过设定length属性<BR>&lt;display:table name="test" length="5"&gt;<BR>&nbsp; &lt;display:column property="id" title="ID" /&gt;<BR>&nbsp; &lt;display:column property="email" /&gt;<BR>&nbsp; &lt;display:column property="status" /&gt;<BR>&lt;/display:table&gt;<BR>&nbsp;&nbsp; 显示第三到第八条数据：通过设定offset和length属性<BR>&lt;display:table name="test" offset="3" length="5"&gt;<BR>&nbsp; &lt;display:column property="id" title="ID" /&gt;<BR>&nbsp; &lt;display:column property="email" /&gt;<BR>&nbsp; &lt;display:column property="status" /&gt;<BR>&lt;/display:table&gt;&nbsp; </P>
<P><STRONG>七、对email和url地址的直接连接</STRONG><BR>&nbsp;&lt;display:table name="test" &gt;<BR>&nbsp; &lt;display:column property="id" title="ID" /&gt;<BR>&nbsp; &lt;display:column property="email" autolink="true" /&gt;<BR>&nbsp; &lt;display:column property="url" autolink="true" /&gt;<BR>&nbsp;&lt;/display:table&gt;<BR>&nbsp;如果要显示的对象里包含email和url地址，则可以在display:column里直接设定autolink="true"来直接连接<BR>&nbsp;<BR><STRONG>八、使用装饰模式转换数据显示（写自己的 decorator ）</STRONG><BR>&nbsp; A、对整个表格应用decorator<BR>&nbsp; &lt;display:table name="test" decorator="org.displaytag.sample.Wrapper" &gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;display:column property="id" title="ID" /&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;display:column property="email" /&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;display:column property="status" /&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;display:column property="date" /&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;display:column property="money" /&gt;<BR>&nbsp; &lt;/display:table&gt;<BR>&nbsp;&nbsp;&nbsp; org.displaytag.sample.Wrapper即自己写的decorator，它要继承TableDecorator类，看看它的一个方法：<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public String getMoney()<BR>&nbsp;&nbsp;&nbsp; {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return this.moneyFormat.format(((ListObject) this.getCurrentRowObject()).getMoney());<BR>&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp; 很明显，它通过父类的getCurrentRowObject()方法获得当前对象，然后对其getMoney()方法进行‘油漆’<BR>&nbsp; B、对单独的column应用decorator<BR>&nbsp; &lt;display:table name="test"&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp; &lt;display:column property="id" title="ID" /&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp; &lt;display:column property="email" /&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp; &lt;display:column property="status" /&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp; &lt;display:column property="date" decorator="org.displaytag.sample.LongDateWrapper" /&gt;<BR>&nbsp; &lt;/display:table&gt;<BR>&nbsp;&nbsp;&nbsp; org.displaytag.sample.LongDateWrapper要实现ColumnDecorator接口，它的方法：<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public final String decorate(Object columnValue)<BR>&nbsp;&nbsp;&nbsp; {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Date date = (Date) columnValue;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return this.dateFormat.format(date);<BR>&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp; 显然，它获得不了当前对象（因为它实现的是接口），仅仅是获得该对象的columnValue，然后‘油漆’<BR>&nbsp;&nbsp;&nbsp; <BR><STRONG>九、创建动态连接<BR></STRONG>&nbsp;&nbsp; 有两种方法创建动态连接：<BR>&nbsp;&nbsp; A、在&lt;display:column/&gt;里通过增加href、paramId、paramName、paramScope、paramProperty属性<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; href&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 基本的URL 地址<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; paramId&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 加在URL 地址后的参数名称<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; paramName&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 数据bean的名称，一般为null（即使用当前List里的对象）<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; paramScope&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 数据bean的范围，一般为null<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; paramProperty&nbsp;&nbsp;&nbsp; 数据bean的属性名称，用来填充URL 地址后的参数值<BR>&lt;display:table name="sessionScope.details"&gt;<BR>&nbsp; &lt;display:column property="id" title="ID" href="details.jsp" paramId="id" /&gt;<BR>&nbsp; &lt;display:column property="email" href="details.jsp" paramId="action" paramName="testparam" paramScope="request" /&gt;<BR>&nbsp; &lt;display:column property="status" href="details.jsp" paramId="id" paramProperty="id" /&gt;<BR>&lt;/display:table&gt;&nbsp; <BR>&nbsp;&nbsp;&nbsp; 这种方法简便直接，但缺点是无法产生类似details.jsp?id=xx&amp;action=xx的复合URL<BR>&nbsp;&nbsp; B、应用decorator 创建动态连接：<BR>&lt;display:table name="sessionScope.details" decorator="org.displaytag.sample.Wrapper" &gt;<BR>&nbsp; &lt;display:column property="link1" title="ID" /&gt;<BR>&nbsp; &lt;display:column property="email" /&gt;<BR>&nbsp; &lt;display:column property="link2" title="Actions" /&gt;<BR>&lt;/display:table&gt;<BR>&nbsp;&nbsp; org.displaytag.sample.Wrapper里的方法：<BR>&nbsp;public String getLink1()<BR>&nbsp;{<BR>&nbsp;&nbsp;ListObject lObject= (ListObject)getCurrentRowObject();<BR>&nbsp;&nbsp;int lIndex= getListIndex();<BR>&nbsp;&nbsp;return "&lt;a href=\"details.jsp?index=" + lIndex + "\"&gt;" + lObject.getId() + "&lt;/a&gt;";<BR>&nbsp;}</P>
<P><BR>&nbsp;public String getLink2()<BR>&nbsp;{<BR>&nbsp;&nbsp;ListObject lObject= (ListObject)getCurrentRowObject();<BR>&nbsp;&nbsp;int lId= lObject.getId();</P>
<P>&nbsp;&nbsp;return "&lt;a href=\"details.jsp?id=" + lId<BR>&nbsp;&nbsp;&nbsp;+ "&amp;action=view\"&gt;View&lt;/a&gt; | "<BR>&nbsp;&nbsp;&nbsp;+ "&lt;a href=\"details.jsp?id=" + lId<BR>&nbsp;&nbsp;&nbsp;+ "&amp;action=edit\"&gt;Edit&lt;/a&gt; | "<BR>&nbsp;&nbsp;&nbsp;+ "&lt;a href=\"details.jsp?id=" + lId<BR>&nbsp;&nbsp;&nbsp;+ "&amp;action=delete\"&gt;Delete&lt;/a&gt;";<BR>&nbsp;}</P>
<P><STRONG>十、分页<BR></STRONG>&nbsp;&nbsp; 实现分页非常的简单，增加一个pagesize属性指定一次想显示的行数即可<BR>&lt;display:table name="sessionScope.test" pagesize="10"&gt;<BR>&nbsp;&lt;display:column property="id" title="ID" /&gt;<BR>&nbsp;&lt;display:column property="name" /&gt;<BR>&nbsp;&lt;display:column property="email" /&gt;<BR>&nbsp;&lt;display:column property="status" /&gt;<BR>&lt;/display:table&gt;</P>
<P><STRONG>十一、排序<BR></STRONG>&nbsp;&nbsp; 排序实现也是很简单，在需要排序的column里增加sortable="true"属性，headerClass="sortable"仅仅是<BR>&nbsp;&nbsp; 指定显示的样式。column里的属性对象要实现Comparable接口，如果没有的话可以应用decorator<BR>&nbsp;&nbsp; defaultsort="1"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 默认第一个column排序<BR>&nbsp;&nbsp; defaultorder="descending"&nbsp;&nbsp;&nbsp; 默认递减排序<BR>&lt;display:table name="sessionScope.stest" defaultsort="1" defaultorder="descending"&gt;<BR>&nbsp; &lt;display:column property="id" title="ID" sortable="true" headerClass="sortable" /&gt;<BR>&nbsp; &lt;display:column property="name" sortable="true" headerClass="sortable"/&gt;<BR>&nbsp; &lt;display:column property="email" /&gt;<BR>&nbsp; &lt;display:column property="status" sortable="true" headerClass="sortable"/&gt;<BR>&lt;/display:table&gt;<BR>&nbsp; 注意的是，当同时存在分页时排序仅仅针对的是当前页面，而不是整个List都进行排序<BR>&nbsp; <BR><STRONG>十二、column 分组<BR></STRONG>&nbsp;&nbsp; 分组只是需要在column里增加group属性<BR>&lt;display:table name="test" class="simple"&gt;<BR>&nbsp; &lt;display:column property="city" title="CITY" group="1"/&gt;<BR>&nbsp; &lt;display:column property="project" title="PROJECT" group="2"/&gt;<BR>&nbsp; &lt;display:column property="amount" title="HOURS"/&gt;<BR>&nbsp; &lt;display:column property="task" title="TASK"/&gt;<BR>&lt;/display:table&gt;</P>
<P><STRONG>十三、导出数据到其他格式（页面溢出filter??）</STRONG><BR>&nbsp;&nbsp; 在&lt;display:table/&gt;里设定export="true"<BR>&nbsp;&nbsp; 在&lt;display:column/&gt;里设定media="csv excel xml pdf" 决定该字段在导出到其他格式时被包不包含，不设定则都包含<BR>&nbsp;&nbsp; &lt;display:setProperty name="export.csv" value="false" /&gt;<BR>&nbsp;&nbsp; 决定该种格式能不能在页面中导出<BR>&lt;display:table name="test" export="true" id="currentRowObject"&gt;<BR>&nbsp; &lt;display:column property="id" title="ID"/&gt;<BR>&nbsp; &lt;display:column property="email" /&gt;<BR>&nbsp; &lt;display:column property="status" /&gt;<BR>&nbsp; &lt;display:column property="longDescription" media="csv excel xml pdf" title="Not On HTML"/&gt;<BR>&nbsp; &lt;display:column media="csv excel" title="URL" property="url"/&gt;<BR>&nbsp; &lt;display:setProperty name="export.pdf" value="true" /&gt;<BR>&nbsp; &lt;display:setProperty name="export.csv" value="false" /&gt;<BR>&lt;/display:table&gt;</P>
<P><STRONG>十四、配置属性，覆盖默认<BR></STRONG>&nbsp; 两种方法：<BR>&nbsp; A、在程序classpath下新建displaytag.properties文件<BR>&nbsp; B、对于单个表格，应用&lt;display:setProperty&gt;标签<BR>&nbsp; 具体可配置的属性：<A href="http://displaytag.sourceforge.net/configuration.html">http://displaytag.sourceforge.net/configuration.html</A><BR>&nbsp; <BR><STRONG>十五、一个完整的例子</STRONG><BR>&lt;display:table name="test" export="true" sort="list" pagesize="8"&gt;<BR>&nbsp; &lt;display:column property="city" title="CITY" group="1" sortable="true"&nbsp;&nbsp;&nbsp; headerClass="sortable"/&gt;<BR>&nbsp; &lt;display:column property="project" title="PROJECT" group="2" sortable="true" headerClass="sortable"/&gt;<BR>&nbsp; &lt;display:column property="amount" title="HOURS"/&gt;<BR>&nbsp; &lt;display:column property="task" title="TASK"/&gt;<BR>&lt;/display:table&gt; <BR>&nbsp;&nbsp; sort="list" 对整个list进行排序<BR>&nbsp;&nbsp; 导出数据到其他格式时，group无效</P><img src ="http://www.blogjava.net/RongHao/aggbug/22990.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/RongHao/" target="_blank">ronghao</a> 2005-12-08 16:10 <a href="http://www.blogjava.net/RongHao/archive/2005/12/08/22990.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>