﻿<?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-jimingminlovefly-文章分类-struts</title><link>http://www.blogjava.net/jimingminlovefly/category/50069.html</link><description /><language>zh-cn</language><lastBuildDate>Fri, 20 Jul 2012 12:41:01 GMT</lastBuildDate><pubDate>Fri, 20 Jul 2012 12:41:01 GMT</pubDate><ttl>60</ttl><item><title>struts2.0-json对象配置</title><link>http://www.blogjava.net/jimingminlovefly/articles/377936.html</link><dc:creator>计明敏</dc:creator><author>计明敏</author><pubDate>Fri, 11 May 2012 10:22:00 GMT</pubDate><guid>http://www.blogjava.net/jimingminlovefly/articles/377936.html</guid><wfw:comment>http://www.blogjava.net/jimingminlovefly/comments/377936.html</wfw:comment><comments>http://www.blogjava.net/jimingminlovefly/articles/377936.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jimingminlovefly/comments/commentRss/377936.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jimingminlovefly/services/trackbacks/377936.html</trackback:ping><description><![CDATA[struts2.0-json对象配置 <br /><a href="http://wenku.baidu.com/view/173d38b465ce050876321342.html">http://wenku.baidu.com/view/173d38b465ce050876321342.html</a><img src ="http://www.blogjava.net/jimingminlovefly/aggbug/377936.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jimingminlovefly/" target="_blank">计明敏</a> 2012-05-11 18:22 <a href="http://www.blogjava.net/jimingminlovefly/articles/377936.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>struts2 的标签s:property value='' escape 属性</title><link>http://www.blogjava.net/jimingminlovefly/articles/377791.html</link><dc:creator>计明敏</dc:creator><author>计明敏</author><pubDate>Thu, 10 May 2012 06:40:00 GMT</pubDate><guid>http://www.blogjava.net/jimingminlovefly/articles/377791.html</guid><wfw:comment>http://www.blogjava.net/jimingminlovefly/comments/377791.html</wfw:comment><comments>http://www.blogjava.net/jimingminlovefly/articles/377791.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jimingminlovefly/comments/commentRss/377791.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jimingminlovefly/services/trackbacks/377791.html</trackback:ping><description><![CDATA[&lt;s:property&gt;标签的<span style="color: red">escape</span>属性默认值为true，即不解析html代码，直接将其输出。<span style="color: red">若想要输出html的效果，则要改为false.</span>  <img src ="http://www.blogjava.net/jimingminlovefly/aggbug/377791.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jimingminlovefly/" target="_blank">计明敏</a> 2012-05-10 14:40 <a href="http://www.blogjava.net/jimingminlovefly/articles/377791.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>struts2的上传功能(解决struts2项目中不能用jspsmart上传)</title><link>http://www.blogjava.net/jimingminlovefly/articles/371958.html</link><dc:creator>计明敏</dc:creator><author>计明敏</author><pubDate>Thu, 15 Mar 2012 08:49:00 GMT</pubDate><guid>http://www.blogjava.net/jimingminlovefly/articles/371958.html</guid><wfw:comment>http://www.blogjava.net/jimingminlovefly/comments/371958.html</wfw:comment><comments>http://www.blogjava.net/jimingminlovefly/articles/371958.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jimingminlovefly/comments/commentRss/371958.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jimingminlovefly/services/trackbacks/371958.html</trackback:ping><description><![CDATA[<span style="font-size: 24pt; color: #ff0000">struts2的上传功能(解决struts2项目中不能用jspsmart上传)</span><span style="font-size: 12pt"><br /><br />1.<br />&lt;tr&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&lt;td align="right"&gt;广告图片&lt;font color="red"&gt;*&lt;/font&gt;：&lt;/td&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&lt;td align="left"&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&lt;input type="button" id="show_upload_pic_but" name="show_upload_pic_but" value="上传图片" onclick="showUploadWin('ad_upload','callbackFun')"/&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&lt;div id="pic_content"&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&lt;/div&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&lt;/td&gt;<br />&lt;/tr&gt;<br /><br />2.<br />function showUploadWin(imagePath,callbackName){<br />&nbsp;try{<br />&nbsp;&nbsp;&nbsp; var content=[];<br />&nbsp;&nbsp;content.push("&lt;table id='upload_tabel'&gt;");<br />&nbsp;&nbsp;content.push("&lt;tr&gt;");<br />&nbsp;&nbsp;content.push("&lt;td align='center' style='padding: 10px;'&gt;");<br />&nbsp;&nbsp;content.push('&lt;form name="upload_pic_form" id="upload_pic_form" enctype="multipart/form-data" method="post" action="imgUpload.action"&nbsp; target="upload_frame" onsubmit="return checkUploadPic();"&gt;' );&nbsp;&nbsp;<br />&nbsp;&nbsp;content.push('&lt;input type="hidden" name="imagePath" value="'+imagePath+'" /&gt;');&nbsp;<br />&nbsp;&nbsp;content.push('&lt;input type="hidden" name="callbackName" value="'+callbackName+'" /&gt;');&nbsp;<br />&nbsp;&nbsp;content.push('&lt;div style="margin-top:20px;"&gt;');<br />&nbsp;&nbsp;content.push('&lt;input id="picFile" name="upload" type="file" style="width:260px;"/&gt;');<br />&nbsp;&nbsp;content.push('&lt;/div&gt;');<br />&nbsp;&nbsp;content.push('&lt;div style="padding-left:20px; padding-top:10px;"&gt;');<br />&nbsp;&nbsp;content.push('&lt;input type="submit" name="Submit" value=" 上 传 " /&gt;&amp;nbsp;&amp;nbsp;');<br />&nbsp;&nbsp;content.push('&lt;input type="reset" name="reset" value=" 重 置 " /&gt;');<br />&nbsp;&nbsp;content.push('&lt;/div&gt;');<br />&nbsp;&nbsp;content.push('&lt;/form&gt;');<br />&nbsp;&nbsp;content.push("&lt;iframe name='upload_frame' id='upload_frame' style='display:none' &gt;&lt;/iframe&gt;");<br />&nbsp;&nbsp;content.push("&lt;/td&gt;&lt;/tr&gt;");<br />&nbsp;&nbsp;content.push("&lt;/table&gt;");<br />&nbsp;&nbsp;&nbsp;&nbsp; //弹窗口<br />&nbsp;&nbsp;ymPrompt.win(content.join(''),300,200,'上传文件');<br />&nbsp;}<br />&nbsp;catch(e){<br />&nbsp;&nbsp;alert(e.message);&nbsp;&nbsp;<br />&nbsp;}<br />}<br /><br />function callbackFun(flg,filepath){<br />&nbsp;if(flg=='success'){<br />&nbsp;&nbsp;var content=[];<br />&nbsp;&nbsp;content.push("&lt;span&gt;&lt;img src='"+showPicpath+"/"+filepath+"' width='150' height='150' /&gt;");<br />&nbsp;&nbsp;content.push("&lt;input type='text' name='ad.file_path' value='"+filepath+"' readonly='true'/&gt;");<br />&nbsp;&nbsp;content.push("&lt;/span&gt;");<br />&nbsp;&nbsp;$("#pic_content").html(content.join(''));<br />&nbsp;&nbsp;closeUploadPicWin();<br />&nbsp;}<br />&nbsp;else{<br />&nbsp;&nbsp;&nbsp; alert("上传图片失败");<br />&nbsp;}<br />}<br /><br />3<br />&lt;action name="imgUpload" class="imgAciton" method="execute"&gt;<br />&nbsp;&nbsp;&nbsp;&lt;interceptor-ref name ="fileUploadStack" /&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;result name="showUpload"&gt;/jsp/advertisement/return.jsp&lt;/result&gt;<br />&nbsp;&nbsp;&lt;/action&gt;<br /><br />
<p>4return.jsp<br /></p>
<p>&lt;%@ page language="java"&nbsp; pageEncoding="utf-8"%&gt;<br />&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"&gt;<br />&lt;html&gt;<br />&nbsp; &lt;head&gt;&nbsp; <br />&nbsp;&nbsp;&nbsp; &lt;title&gt;上传成功&lt;/title&gt;<br />&nbsp; &lt;/head&gt;<br />&nbsp; <br />&nbsp; &lt;body&gt;<br />&nbsp; <br />&nbsp; &lt;% <br />out.print("&lt;script type='text/javascript'&gt;parent.");<br />&nbsp; %&gt;&lt;s:property value='callbackName'/&gt;&lt;% <br />out.print("('success','");&nbsp; <br />&nbsp; %&gt;&lt;s:property value='imgFileName'/&gt;&lt;% <br />out.print("')&lt;/script&gt;");&nbsp; <br />&nbsp; %&gt;</p>
<p>&nbsp; &lt;/body&gt;<br />&lt;/html&gt;</p>
<p><br />5<br />package com.gwtravel.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.util.Date;<br />import java.util.Map;</p>
<p>import javax.servlet.ServletConfig;<br />import javax.servlet.http.HttpServletRequest;<br />import javax.servlet.http.HttpServletResponse;</p>
<p>import org.apache.commons.io.FileUtils;<br />import org.apache.log4j.Logger;<br />import org.apache.struts2.ServletActionContext;<br />import org.apache.struts2.interceptor.ServletRequestAware;<br />import org.apache.struts2.interceptor.ServletResponseAware;<br />import org.apache.struts2.interceptor.SessionAware;<br />import org.springframework.context.annotation.Scope;<br />import org.springframework.stereotype.Controller;<br />import org.springframework.web.context.ServletConfigAware;</p>
<p>import com.opensymphony.xwork2.ActionSupport;</p>
<p>@Controller("imgAciton")<br />@Scope("prototype")<br />public class UplaodImg extends ActionSupport implements ServletConfigAware,<br />&nbsp;&nbsp;ServletRequestAware, ServletResponseAware, SessionAware {<br />&nbsp;static Logger logger = Logger.getLogger(UplaodImg.class);<br />&nbsp;protected HttpServletRequest request;<br />&nbsp;protected HttpServletResponse response;<br />&nbsp;private ServletConfig servletConfig;<br />&nbsp;Map sessionMap;<br />&nbsp;private File upload;&nbsp;<br />&nbsp;private String uploadContextType;<br />&nbsp;private String uploadFileName;<br />&nbsp;<br />&nbsp;private String imagePath;<br />&nbsp;private String callbackName;<br />&nbsp;private String imgFileName;//最后生成的文件名</p>
<p>&nbsp;public File getUpload() {<br />&nbsp;&nbsp;return upload;<br />&nbsp;}</p>
<p>&nbsp;public void setUpload(File upload) {<br />&nbsp;&nbsp;this.upload = upload;<br />&nbsp;}</p>
<p>&nbsp;public String getUploadContextType() {<br />&nbsp;&nbsp;return uploadContextType;<br />&nbsp;}</p>
<p>&nbsp;public void setUploadContextType(String uploadContextType) {<br />&nbsp;&nbsp;this.uploadContextType = uploadContextType;<br />&nbsp;}</p>
<p>&nbsp;public String getUploadFileName() {<br />&nbsp;&nbsp;return uploadFileName;<br />&nbsp;}</p>
<p>&nbsp;public void setUploadFileName(String uploadFileName) {<br />&nbsp;&nbsp;this.uploadFileName = uploadFileName;<br />&nbsp;}</p>
<p>&nbsp;public String getImgFileName() {<br />&nbsp;&nbsp;return imgFileName;<br />&nbsp;}</p>
<p>&nbsp;public void setImgFileName(String imgFileName) {<br />&nbsp;&nbsp;this.imgFileName = imgFileName;<br />&nbsp;}</p>
<p>&nbsp;// 通过struts2的配置文件得到上传目录，这个是很重要的<br />&nbsp;public String getImagePath() throws IOException {<br />&nbsp;&nbsp;//判断目录是否存在，不存在则创建<br />&nbsp;&nbsp;FileUtils.forceMkdir(new File(ServletActionContext.getRequest().getRealPath("/"+imagePath)));<br />&nbsp;&nbsp;return ServletActionContext.getRequest().getRealPath("/"+imagePath);<br />&nbsp;}</p>
<p>&nbsp;public void setImagePath(String imagePath) {<br />&nbsp;&nbsp;this.imagePath = imagePath;<br />&nbsp;}</p>
<p>&nbsp;public String getCallbackName() {<br />&nbsp;&nbsp;return callbackName;<br />&nbsp;}</p>
<p>&nbsp;public void setCallbackName(String callbackName) {<br />&nbsp;&nbsp;this.callbackName = callbackName;<br />&nbsp;}</p>
<p>&nbsp;private String getExtention(String fileName) {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int pos = fileName.lastIndexOf(".");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return fileName.substring(pos);<br />&nbsp;}</p>
<p>&nbsp;<br />&nbsp;@Override<br />&nbsp;public String execute() throws Exception {<br />&nbsp;&nbsp;String imgName = new Date().getTime() + getExtention(uploadFileName);<br />//&nbsp;&nbsp;logger.error(getImagePath() + "/"+ imgName);<br />&nbsp;&nbsp;System.out.println("test imgName: "+imgName);<br />&nbsp;&nbsp;this.imgFileName = imgName;<br />&nbsp;&nbsp;FileOutputStream fos = new FileOutputStream(getImagePath() + "/"+ imgName);<br />&nbsp;&nbsp;FileInputStream fis = new FileInputStream(getUpload());<br />&nbsp;&nbsp;byte[] buffer = new byte[1024];<br />&nbsp;&nbsp;int len = 0;<br />&nbsp;&nbsp;while ((len = fis.read(buffer)) &gt; 0) {<br />&nbsp;&nbsp;&nbsp;fos.write(buffer, 0, len);<br />&nbsp;&nbsp;}<br />&nbsp;&nbsp;return "showUpload";<br />&nbsp;}<br />&nbsp;<br />&nbsp;public String imgLogin1(){<br />&nbsp;&nbsp; String imguser=request.getParameter("username");<br />&nbsp;&nbsp; String imgpassword=request.getParameter("password");<br />&nbsp;&nbsp; sessionMap.put("imguser", imguser);<br />&nbsp;&nbsp; sessionMap.put("imgpassword", imgpassword);&nbsp;&nbsp; <br />&nbsp;&nbsp; return SUCCESS;<br />&nbsp;}</p>
<p>&nbsp;@Override<br />&nbsp;public void setServletRequest(HttpServletRequest arg0) {<br />&nbsp;&nbsp;this.request = arg0;</p>
<p>&nbsp;}</p>
<p>&nbsp;@Override<br />&nbsp;public void setServletResponse(HttpServletResponse arg0) {<br />&nbsp;&nbsp;// TODO Auto-generated method stub<br />&nbsp;&nbsp;this.response = arg0;<br />&nbsp;}</p>
<p>&nbsp;@Override<br />&nbsp;public void setSession(Map arg0) {<br />&nbsp;&nbsp;this.sessionMap=arg0;</p>
<p>&nbsp;}</p>
<p>&nbsp;@Override<br />&nbsp;public void setServletConfig(ServletConfig arg0) {<br />&nbsp;&nbsp;// TODO Auto-generated method stub<br />&nbsp;&nbsp;this.servletConfig = arg0;<br />&nbsp;}<br />}<br /></p><br /></span> <img src ="http://www.blogjava.net/jimingminlovefly/aggbug/371958.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jimingminlovefly/" target="_blank">计明敏</a> 2012-03-15 16:49 <a href="http://www.blogjava.net/jimingminlovefly/articles/371958.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Struts2的s:generator和s:iterator的合用</title><link>http://www.blogjava.net/jimingminlovefly/articles/365838.html</link><dc:creator>计明敏</dc:creator><author>计明敏</author><pubDate>Thu, 08 Dec 2011 02:20:00 GMT</pubDate><guid>http://www.blogjava.net/jimingminlovefly/articles/365838.html</guid><wfw:comment>http://www.blogjava.net/jimingminlovefly/comments/365838.html</wfw:comment><comments>http://www.blogjava.net/jimingminlovefly/articles/365838.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jimingminlovefly/comments/commentRss/365838.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jimingminlovefly/services/trackbacks/365838.html</trackback:ping><description><![CDATA[<p><span style="font-size: small"><span style="color: #0000ff; font-family: Times New Roman">经验1&lt;select name="rooms"&nbsp;&gt;<br /></span><span style="color: #0000ff; font-family: Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;</span><span style="color: #ff0000; font-family: Times New Roman">s:generator</span><span style="color: #0000ff; font-family: Times New Roman"> val="1,2,3,4,5,6" separator="," id="</span><span style="color: red; font-family: Times New Roman">numbers</span><span style="color: #0000ff; font-family: Times New Roman">"&gt;</span><span style="color: #0000ff; font-family: Times New Roman"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;</span><span style="color: #ff0000; font-family: Times New Roman">s:iterator</span><span style="color: #0000ff; font-family: Times New Roman"> value="#</span><span style="color: red; font-family: Times New Roman">numbers</span><span style="color: #0000ff; font-family: Times New Roman">" id="number"&gt;<br /></span><span style="color: #0000ff; font-family: Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&lt;option value='&lt;s:property value="number"/&gt;'&gt;&lt;s:property value="number"/&gt;间&lt;/option&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;<br /></span><span style="color: #0000ff; font-family: Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&lt;/s:iterator&gt;&nbsp;<br /></span><span style="color: #0000ff; font-family: Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&lt;/s:generator&gt;&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;<br /></span><span style="color: #0000ff; font-family: Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&lt;/select&gt;<br /><br /><span style="font-size: small"><span style="color: #0000ff; font-family: Times New Roman">经验2</span></span>&lt;s:generator val="%{'a,b,c,d,e,f,g,h,i,j'}" count="#request.hotel.star" separator=","&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&lt;s:iterator&gt;&lt;img src="images/star.gif" /&gt;&lt;/s:iterator&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&lt;/s:generator&gt;<br /><br /></span><span style="color: #ff0000; font-family: Times New Roman">generator</span><span style="font-family: 宋体">标签，该标签可以将指定字符串按指定分隔符分割成多个字串。生成的多个字串可以用</span><span style="font-family: Times New Roman">iterator</span><span style="font-family: 宋体">标签进行迭代输出。</span><span style="color: red; font-family: 宋体">可以这么理解：</span><span style="color: red; font-family: Times New Roman">generator</span><span style="color: red; font-family: 宋体">标签将一个字符串转换成一个</span><span style="color: red; font-family: Times New Roman">List</span><span style="color: red; font-family: 宋体">集合</span><span style="font-family: 宋体">。在该标签体内，整个临时生成的集合将为</span><span style="font-family: Times New Roman">Valuestack</span><span style="font-family: 宋体">的顶端，但一旦该标签结束，生成的集合将被移除</span><span style="font-family: Times New Roman">Valuestack</span><span style="font-family: 宋体">。</span><span style="font-family: Times New Roman">generator</span><span style="font-family: 宋体">标签有如下几个属性：</span></span></p>
<p><span style="font-size: small"><span style="font-family: Times New Roman">1</span><span style="font-family: 宋体">、</span><span style="font-family: Times New Roman">count</span><span style="font-family: 宋体">属性：指定生成集合中元素的总数。可选属性。</span></span></p>
<p><span style="font-size: small"><span style="font-family: Times New Roman">2</span><span style="font-family: 宋体">、</span><span style="font-family: Times New Roman">val</span><span style="font-family: 宋体">属性：必填属性，指定被解析的字符串。</span></span></p>
<p><span style="font-size: small"><span style="font-family: Times New Roman">3</span><span style="font-family: 宋体">、</span><span style="font-family: Times New Roman">separator</span><span style="font-family: 宋体">属性：这是一个必填属性，指定用于分割字符串的分隔符。</span></span></p>
<p><span style="font-size: small"><span style="font-family: Times New Roman">4</span><span style="font-family: 宋体">、</span><span style="font-family: Times New Roman">converter</span><span style="font-family: 宋体">属性：可选属性，指定一个转换器，转换器负责将生成的集合中的每个字符串转换成对象，通过这个转换器可以将一个含有分隔符的字符串解析成对象的集合。转换器必须一个继承</span><span style="font-family: Times New Roman">org.apache.struts2.util.IteratorGenerator.Converter</span><span style="font-family: 宋体">的对象。</span></span></p>
<p><span style="font-size: small"><span style="font-family: Times New Roman">5</span><span style="font-family: 宋体">、</span><span style="color: red; font-family: 宋体">var</span><span style="font-family: 宋体">属性，可选属性。如果指定了该属性，则将生成的集合保存在</span><span style="font-family: Times New Roman">Stack Context</span><span style="font-family: 宋体">中。如果不指定该属性，则将生成的集合放入</span><span style="font-family: Times New Roman">ValueStack</span><span style="font-family: 宋体">的顶端，该标签一结束，生成的集合就被移除。该属性也可替换成</span><span style="color: red; font-family: Times New Roman">id</span><span style="font-family: 宋体">。<br /><br /><br /></span><span style="color: #0000ff; font-family: 宋体">jsp实例：</span><span style="font-family: 宋体"><br /></p>
<p class="alt"><span>&nbsp;</p>
<ol class="dp-j"><li class="alt"><span>&lt;%@&nbsp;page&nbsp;contentType=</span><span class="string">"text/html;&nbsp;charset=GBK"</span><span>&nbsp;language=</span><span class="string">"java"</span><span>&nbsp;errorPage=</span><span class="string">""</span><span>&nbsp;%&gt;&nbsp;&nbsp;</span></li><li class=""><span>&lt;%<span class="annotation">@taglib</span><span>&nbsp;prefix=</span><span class="string">"s"</span><span>&nbsp;uri=</span><span class="string">"/struts-tags"</span><span>%&gt;&nbsp;&nbsp;</span></span></li><li class="alt"><span>&lt;head&gt;&nbsp;&nbsp;</span></li><li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&lt;title&gt;使用s:generator生成集合&lt;/title&gt;&nbsp;&nbsp;</span></li><li class="alt"><span>&lt;/head&gt;&nbsp;&nbsp;</span></li><li class=""><span>&lt;body&gt;&nbsp;&nbsp;</span></li><li class="alt"><span>&lt;s:debug/&gt;&nbsp;&nbsp;</span></li><li class=""><span>&nbsp;&nbsp;</span></li><li class="alt"><span>&lt;s:generator&nbsp;val=<span class="string">"'a,b,&nbsp;c'"</span><span>&nbsp;separator=</span><span class="string">","</span><span>&nbsp;id=</span><span class="string">"iter1"</span><span>&gt;&nbsp;&nbsp;</span></span></li><li class=""><span>&lt;/s:generator&gt;&nbsp;&nbsp;</span></li><li class="alt"><span>使用generator标签将指定字符串解析成List集合<span class="number">0</span><span>&nbsp;&nbsp;</span></span></li><li class=""><span>&lt;table&nbsp;border=<span class="string">"1"</span><span>&nbsp;width=</span><span class="string">"240"</span><span>&gt;&nbsp;&nbsp;</span></span></li><li class="alt"><span>&lt;!--&nbsp;在generator标签内，得到的List集合位于ValueStack顶端&nbsp;--&gt;&nbsp;&nbsp;</span></li><li class=""><span>&lt;s:generator&nbsp;val="'Struts&nbsp;<span class="number">2</span><span>权威指南,轻量级Java&nbsp;EE企业应用实战,&nbsp;&nbsp;</span></span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;疯狂Ajax讲义'<span class="string">"&nbsp;separator="</span><span>,</span><span class="string">"&nbsp;id="</span><span>iter"&gt;&nbsp;&nbsp;</span></span></li><li class=""><span>&lt;!--&nbsp;没有指定迭代哪个集合，直接迭代ValueStack顶端的集合&nbsp;--&gt;&nbsp;&nbsp;</span></li><li class="alt"><span>&lt;s:iterator&nbsp;status=<span class="string">"st"</span><span>&gt;&nbsp;&nbsp;</span></span></li><li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&lt;tr&nbsp;&lt;s:<span class="keyword">if</span><span>&nbsp;test=</span><span class="string">"#st.odd"</span><span>&gt;style=</span><span class="string">"background-color:#bbbbbb"</span><span>&lt;/s:</span><span class="keyword">if</span><span>&gt;&gt;&nbsp;&nbsp;</span></span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;td&gt;&lt;s:property/&gt;&lt;/td&gt;&nbsp;&nbsp;</span></li><li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&lt;/tr&gt;&nbsp;&nbsp;</span></li><li class="alt"><span>&lt;/s:iterator&gt;&nbsp;&nbsp;</span></li><li class=""><span>&lt;/s:generator&gt;&nbsp;&nbsp;</span></li><li class="alt"><span>&lt;/table&gt;&nbsp;&nbsp;</span></li><li class=""><span>&nbsp;&nbsp;</span></li><li class="alt"><span>&lt;BR&gt;&lt;BR&gt;&lt;BR&gt;&lt;BR&gt;&nbsp;&nbsp;</span></li><li class=""><span>使用generator标签将指定字符串解析成List集合<span class="number">1</span><span>&nbsp;&nbsp;</span></span></li><li class="alt"><span>&lt;table&nbsp;border=<span class="string">"1"</span><span>&nbsp;width=</span><span class="string">"240"</span><span>&gt;&nbsp;&nbsp;</span></span></li><li class=""><span>&lt;s:iterator&nbsp;status=<span class="string">"st"</span><span>&nbsp;value=</span><span class="string">"#request.iter1"</span><span>&nbsp;id=</span><span class="string">"name"</span><span>&gt;&nbsp;&nbsp;</span></span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&lt;tr&nbsp;&lt;s:<span class="keyword">if</span><span>&nbsp;test=</span><span class="string">"#st.odd"</span><span>&gt;style=</span><span class="string">"background-color:#bbbbbb"</span><span>&lt;/s:</span><span class="keyword">if</span><span>&gt;&gt;&nbsp;&nbsp;</span></span></li><li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;td&gt;&lt;s:property&nbsp;value=<span class="string">"name"</span><span>/&gt;&lt;/td&gt;&nbsp;&nbsp;</span></span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&lt;/tr&gt;&nbsp;&nbsp;</span></li><li class=""><span>&lt;/s:iterator&gt;&nbsp;&nbsp;</span></li><li class="alt"><span>&lt;/table&gt;&nbsp;&nbsp;</span></li><li class=""><span>&nbsp;&nbsp;</span></li><li class="alt"><span>&lt;BR&gt;&lt;BR&gt;&lt;BR&gt;&lt;BR&gt;&nbsp;&nbsp;</span></li><li class=""><span>使用generator标签将指定字符串解析成List集合<span class="number">2</span><span>&nbsp;&nbsp;</span></span></li><li class="alt"><span>&lt;table&nbsp;border=<span class="string">"1"</span><span>&nbsp;width=</span><span class="string">"240"</span><span>&gt;&nbsp;&nbsp;</span></span></li><li class=""><span>&lt;s:iterator&nbsp;status=<span class="string">"st"</span><span>&nbsp;value=</span><span class="string">"#iter1"</span><span>&nbsp;id=</span><span class="string">"name"</span><span>&gt;&nbsp;&nbsp;</span></span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&lt;tr&nbsp;&lt;s:<span class="keyword">if</span><span>&nbsp;test=</span><span class="string">"#st.odd"</span><span>&gt;style=</span><span class="string">"background-color:#bbbbbb"</span><span>&lt;/s:</span><span class="keyword">if</span><span>&gt;&gt;&nbsp;&nbsp;</span></span></li><li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;td&gt;&lt;s:property&nbsp;value=<span class="string">"name"</span><span>/&gt;&lt;/td&gt;&nbsp;&nbsp;</span></span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&lt;/tr&gt;&nbsp;&nbsp;</span></li><li class=""><span>&lt;/s:iterator&gt;&nbsp;&nbsp;</span></li><li class="alt"><span>&lt;/table&gt;&nbsp;&nbsp;</span></li><li class=""><span>&lt;s:property&nbsp;value=<span class="string">"#attr"</span><span>/&gt;&nbsp;&nbsp;</span></span></li><li class="alt"><span>&lt;BR&gt;&nbsp;&nbsp;</span></li><li class=""><span>&lt;s:property&nbsp;value=<span class="string">"#iter"</span><span>/&gt;&nbsp;&nbsp;</span></span></li><li class="alt"><span>&lt;BR&gt;&lt;BR&gt;&lt;BR&gt;&nbsp;&nbsp;</span></li><li class=""><span>&lt;a&nbsp;href=<span class="string">"s-generator-count.jsp"</span><span>&nbsp;mce_href=</span><span class="string">"s-generator-count.jsp"</span><span>&gt;s-generator-count.jsp&lt;/a&gt;&nbsp;&nbsp;</span></span></li><li class="alt"><span>&lt;/body&gt;&nbsp;&nbsp;</span></li><li class=""><span>&lt;/html&gt;&nbsp;&nbsp;</span></li></ol>
<p class="alt"></span>&nbsp;</p>
<p></span></span></p> <img src ="http://www.blogjava.net/jimingminlovefly/aggbug/365838.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jimingminlovefly/" target="_blank">计明敏</a> 2011-12-08 10:20 <a href="http://www.blogjava.net/jimingminlovefly/articles/365838.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>struts-全局的类型转换</title><link>http://www.blogjava.net/jimingminlovefly/articles/364817.html</link><dc:creator>计明敏</dc:creator><author>计明敏</author><pubDate>Fri, 25 Nov 2011 06:14:00 GMT</pubDate><guid>http://www.blogjava.net/jimingminlovefly/articles/364817.html</guid><wfw:comment>http://www.blogjava.net/jimingminlovefly/comments/364817.html</wfw:comment><comments>http://www.blogjava.net/jimingminlovefly/articles/364817.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jimingminlovefly/comments/commentRss/364817.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jimingminlovefly/services/trackbacks/364817.html</trackback:ping><description><![CDATA[<div>
<div><span style="font-size: medium"><strong><span style="font-size: 14px; color: red">配置文件：</span></strong></span> </div>
<div>配置文件名：xwork-conversion.properties（固定的）<br />应在classes目录下，也就是struts.xml相同的目录<br />放在src下就可以了 <br /><br /></div>
<div><strong style="color: red">内容：</strong><span style="color: red"> </span></div>
<div>要转化那个类的全称类名=使用哪个类进行转换 </div>
<div>java.util.Date=com.members.converter.DateYyyyMmDdConverter<br /><br /><span style="font-size: medium"><span style="font-size: 14px; color: red"><strong>建立一个新的转换类，继承StrutsTypeConverter<br /></strong>
<p><span style="color: #000000">package com.members.converter;</span></p>
<p><span style="color: #000000">import java.util.Date;</span><br /><span style="color: #000000">import java.util.Map;</span></p>
<p><span style="color: #000000">import org.apache.log4j.Logger;</span><br /><span style="color: #000000">import org.apache.struts2.util.StrutsTypeConverter;</span></p>
<p><span style="color: #000000">import com.members.util.DateUtil;</span></p>
<p><span style="color: #0000ff">public class DateYyyyMmDdConverter extends StrutsTypeConverter{</span><br /><span style="color: #000000">&nbsp;static Logger logger = Logger.getLogger(DateYyyyMmDdConverter.class);</span></p>
<p><span style="color: #000000">&nbsp;@Override</span><br /><span style="color: #000000">&nbsp;public Object convertFromString(Map context, String[] values, Class toClass) {</span><br /><span style="color: #000000">&nbsp;&nbsp;if (values!= null &amp;&amp;</span><br /><span style="color: #000000">&nbsp;&nbsp;&nbsp;values.length &gt; 0){</span><br /><span style="color: #000000">&nbsp;&nbsp;&nbsp;return DateUtil.getYyyyMmDd(values[0]);</span><br /><span style="color: #000000">&nbsp;&nbsp;}</span><br /><span style="color: #000000">&nbsp;&nbsp;else</span><br /><span style="color: #000000">&nbsp;&nbsp;&nbsp;return null;</span><br /><span style="color: #000000">&nbsp;}</span></p>
<p><span style="color: #000000">&nbsp;@Override</span><br /><span style="color: #000000">&nbsp;public String convertToString(Map context, Object arg1) {</span><br /><span style="color: #000000">&nbsp;&nbsp;// TODO Auto-generated method stub</span><br /><span style="color: #000000">&nbsp;&nbsp;Date aDate = (Date)arg1;</span><br /><span style="color: #000000">&nbsp;&nbsp;return DateUtil.toHyphenatedYyyyMmdd(aDate);</span><br /><span style="color: #000000">&nbsp;}</span></p>
<p><span style="color: #000000">}</span></p></span></span></div></div><img src ="http://www.blogjava.net/jimingminlovefly/aggbug/364817.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jimingminlovefly/" target="_blank">计明敏</a> 2011-11-25 14:14 <a href="http://www.blogjava.net/jimingminlovefly/articles/364817.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>struts2.0的list、listKey和listValue属性</title><link>http://www.blogjava.net/jimingminlovefly/articles/363262.html</link><dc:creator>计明敏</dc:creator><author>计明敏</author><pubDate>Wed, 09 Nov 2011 01:46:00 GMT</pubDate><guid>http://www.blogjava.net/jimingminlovefly/articles/363262.html</guid><wfw:comment>http://www.blogjava.net/jimingminlovefly/comments/363262.html</wfw:comment><comments>http://www.blogjava.net/jimingminlovefly/articles/363262.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jimingminlovefly/comments/commentRss/363262.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jimingminlovefly/services/trackbacks/363262.html</trackback:ping><description><![CDATA[<p style="text-indent: 17.8pt">list、listKey和listValue属性对radio、combobox、select、checklist、doubleselect等标签来说非常重要。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 我们可以用一组radio标签来提供一组选项。例如，下面这些HTML输入标签将呈现为如图5-5所示的一组单选按钮。</p>
<p style="margin: 4.65pt 0cm"><span><img class="blogimg" src="http://hiphotos.baidu.com/128icool/pic/item/48896c34d5bdab7e241f141a.jpg" border="0" small="0"  alt="" /><br />
</span></p>
<p style="text-indent: 20pt"><span><img class="blogimg" src="http://hiphotos.baidu.com/128icool/pic/item/7c81523e2dbe520d71cf6c1a.jpg" align="left" border="0" small="0"  alt="" /><br />
</span>正如你看到的那样，这组单选按钮由一组值（1、2、3）和一组行标（Atlanta、Chicago、Detroit）构成，它们之间的键/值对应情况如下所示：</p>
<p style="margin: 4.65pt 0cm"><span><img class="blogimg" src="http://hiphotos.baidu.com/128icool/pic/item/c55916c7d18a63ecd000601a.jpg" border="0" small="0"  alt="" /></span></p>
<p style="text-indent: 17.8pt">select元素也可以用来提供一组选项。下面的select元素（如图5-6所示）能够提供与刚才那组单选按钮一样的选项。</p>
<p style="margin: 4.65pt 0cm"><span><img class="blogimg" src="http://hiphotos.baidu.com/128icool/pic/item/2aabd5dc81b72191cc11661a.jpg" border="0" small="0"  alt="" /><br />
</span></p>
<div style="padding-right: 0cm; border-top: rgb(153,153,153) 1pt solid; padding-left: 0cm; padding-bottom: 4pt; margin-left: 2.1pt; margin-right: 2.1pt; padding-top: 3pt; border-bottom: rgb(153,153,153) 1pt solid; border-right-style: none; border-left-style: none">
<p style="margin: 7.8pt 0cm 7.8pt 30pt; text-indent: -30pt">注意&nbsp;&nbsp;&nbsp;&nbsp; 在select元素里，value属性是可选的。如果没有给出这个属性，在某个选项被选中时，该选项的行标将作为select元素的值被发送到服务器。从理论上讲，radio元素的value属性也是可选的。可是，如果不给出value属性，单选按钮被选中时的值将是&#8220;on&#8221;而不是相应的radio元素的 label属性值，这无疑会让同一个表单里的多个radio元素难以区别。因此，在使用radio元素的时候往往必须给出它们的value属性。</p>
</div>
<p style="text-indent: 20pt">本节解释了list、listKey和listValue属性在radio、select 和其他用来提供一组选项的标签里的使用方法。在使用这些标签时，你们需要提供一些键/值对作为那些选项的来源。在这3个属性当中，list属性是必不可少的，另外两个属性是可选的。我们可以把一个String、一个数组、一个java.util.Enumeration、一个 java.util.Iterator、一个java.util.Map或一个Collection赋值给list属性，这个值对象既可以放在一个动作对象里，也可以放在当前会话对象或当前ServletContext对象里。</p>
<div style="padding-right: 0cm; border-top: rgb(153,153,153) 1pt solid; padding-left: 0cm; padding-bottom: 4pt; margin-left: 2.1pt; margin-right: 2.1pt; padding-top: 3pt; border-bottom: rgb(153,153,153) 1pt solid; border-right-style: none; border-left-style: none">
<p style="margin: 7.8pt 0cm 7.8pt 30pt; text-indent: -30pt">注意&nbsp;&nbsp;&nbsp;&nbsp; 如果你动态赋给list属性的对象没有任何选项，你必须返回一个空的数组/Collection/Map，而不是返回一个空值（null）。</p>
</div>
<p style="margin: 5.45pt 0cm">5.11.1 赋值一个String</p>
<p style="text-indent: 20pt">你可以将一个数组赋值为String表示形式。例如，下面把一个字符串赋值给select标签：</p>
<p style="margin: 4.65pt 0cm"><span><img class="blogimg" src="http://hiphotos.baidu.com/128icool/pic/item/78875f8b13a72222c9fc7a1a.jpg" border="0" small="0"  alt="" /></span></p>
<p style="text-indent: 20pt">这个select标签将呈现为：</p>
<p style="margin: 4.65pt 0cm"><span><img class="blogimg" src="http://hiphotos.baidu.com/128icool/pic/item/f28694129e4b58fec2fd781a.jpg" border="0" small="0"  alt="" /></span></p>
<p style="text-indent: 20pt">请注意，每个选项的值和行标使用的是同一个字符串元素。</p>
<p style="text-indent: 20pt">在绝大多数Struts应用程序里，选项的值和行标应该不同，这需要使用如下所示的语法：</p>
<p style="margin: 4.65pt 0cm"><span><img class="blogimg" src="http://hiphotos.baidu.com/128icool/pic/item/ce6227d1d06069e3562c84e5.jpg" border="0" small="0"  alt="" /></span></p>
<p style="text-indent: 20pt">例如，下面这个select标签</p>
<p style="margin: 4.65pt 0cm"><span><img class="blogimg" src="http://hiphotos.baidu.com/128icool/pic/item/e2ba3cdf1f551123622798e5.jpg" border="0" small="0"  alt="" /></span></p>
<p style="text-indent: 20pt">将呈现为：</p>
<p style="margin: 4.65pt 0cm"><span><img class="blogimg" src="http://hiphotos.baidu.com/128icool/pic/item/1c7aa713db9ef9e0f6039ee5.jpg" border="0" small="0"  alt="" /><br />
</span></p>
<p style="margin: 5.45pt 0cm">5.11.2 赋值一个Map</p>
<p style="text-indent: 20pt">如果你想让各个选项的值与它的行标不同，你可以使用一个Map作为选项的来源。使用Map作为选项的来源很简单：把选项的值用作Map的键、把选项的行标用作Map的键值即可。例如，以下代码将创建一个名为cities的Map，它包含3个城市的名字：</p>
<p style="margin: 4.65pt 0cm"><span><img class="blogimg" src="http://hiphotos.baidu.com/128icool/pic/item/4295bc8f1c5593ca503d92e5.jpg" border="0" small="0"  alt="" /></span></p>
<p style="text-indent: 20pt">如果cities是一个动作属性，你可以像下面这样把它赋值给list属性：</p>
<p style="margin: 4.65pt 0cm"><span><img class="blogimg" src="http://hiphotos.baidu.com/128icool/pic/item/e06d9ffb87aff6124e4aeae5.jpg" border="0" small="0"  alt="" /></span></p>
<p style="text-indent: 20pt">或者，如果cities是一个应用程序属性，你可以使用如下所示的代码：</p>
<p style="margin: 4.65pt 0cm"><span><img class="blogimg" src="http://hiphotos.baidu.com/128icool/pic/item/f3b524f75aeb0312730eece5.jpg" border="0" small="0"  alt="" /><br />
</span></p>
<p style="margin: 5.45pt 0cm">5.11.3 赋值一个Collection或一个对象数组</p>
<p style="text-indent: 20pt">你还可以使用一个对象数组或一个对象Collection来作为选项的来源。此时，你将需要用到list、listKey和listValue属性。具体做法是：把那个数组或Collection赋值给list属性，把用来提供选项值的对象属性赋值给listKey属性，把用来提供选项行标的对象属性赋值给listValue属性。</p>
<p style="text-indent: 20pt">例如，假设某个动作对象的getCities方法将返回一个以City对象为元素的List，而City对象有一个id和一个name属性，你就可以用如下所示的代码把这个List赋值给一个select标签：</p>
<p style="margin: 4.65pt 0cm"><span><img class="blogimg" src="http://hiphotos.baidu.com/128icool/pic/item/138885d3bda5da04960a16e5.jpg" border="0" small="0"  alt="" /></span></p>  <img src ="http://www.blogjava.net/jimingminlovefly/aggbug/363262.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jimingminlovefly/" target="_blank">计明敏</a> 2011-11-09 09:46 <a href="http://www.blogjava.net/jimingminlovefly/articles/363262.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>