2、类型转换
1、文件上传:
1.1、 jsp页面代码:
<body> <form action="upload.action" method="post" enctype="multipart/form-data"> <input type="file" name="photo"> <input type="submit" value="上传"> </form> </body>
1.2、 struts.xml中的代码:
<package name="mypackage" extends="struts-default"> <action name="upload" class="cn.zhuojingxinxi.web.UploadAction"> <interceptor-ref name="fileUpload"></interceptor-ref> <interceptor-ref name="defaultStack"></interceptor-ref> <result name="success">/success.jsp</result> <result name="input">/error.jsp</result> </action> </package>
1.3、 action中的代码:
package cn.zhuojingxinxi.web; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import org.apache.struts2.ServletActionContext; import com.opensymphony.xwork2.ActionSupport; public class UploadAction extends ActionSupport{ private File photo; private String photoFileName; private String photoContentType; public File getPhoto() { return photo; } public void setPhoto(File photo) { this.photo = photo; } public String getPhotoFileName() { return photoFileName; } public void setPhotoFileName(String photoFileName) { this.photoFileName = photoFileName; } public String getPhotoContentType() { return photoContentType; } public void setPhotoContentType(String photoContentType) { this.photoContentType = photoContentType; } public String execute(){ // System.out.println(photo.length()); // System.out.println(photoFileName); // System.out.println(photoContentType); String path=ServletActionContext.getServletContext().getRealPath("/"); try { FileInputStream fis=new FileInputStream(photo); FileOutputStream fos=new FileOutputStream(path+photoFileName); byte[] b=new byte[512]; int length=-1; try { while((length=fis.read(b))!=-1){ fos.write(b, 0, length); fos.flush(); } fos.close(); fis.close(); } catch (IOException e) { e.printStackTrace(); } } catch (FileNotFoundException e) { e.printStackTrace(); } return null; } }
2、类型转换
2.1编写转换器,方式一继承DefaultTypeConverter(代码如下)
package cn.zhuojingxinxi.util; import java.util.Map; import cn.zhuojingxinxi.entity.Point; import ognl.DefaultTypeConverter; public class PointConvert extends DefaultTypeConverter{ @Override public Object convertValue(Map context, Object value, Class toType) { if(toType==Point.class){ System.out.println("转入"); String[] str=(String[])value; String[] s=str[0].split(","); Point point=new Point(); point.setPointX(Integer.parseInt(s[0])); point.setPointY(Integer.parseInt(s[1])); return point; }else{ System.out.println("转出"); Point p=(Point)value; StringBuilder sb=new StringBuilder(); sb.append(p.getPointX()+","+p.getPointY()); return sb.toString(); } } }
2.2、方式二继承StrutsTypeConverter(代码如下)
package cn.zhuojingxinxi.util; import java.util.Map; import org.apache.struts2.util.StrutsTypeConverter; import cn.zhuojingxinxi.entity.Point; import ognl.DefaultTypeConverter; public class PointConvert2 extends StrutsTypeConverter{ @Override public Object convertFromString(Map arg0, String[] arg1, Class arg2) { String[] str=arg1; String [] s= str[0].split(","); Point point=new Point(); point.setPointX(Integer.parseInt(s[0])); point.setPointY(Integer.parseInt(s[1])); return point; } @Override public String convertToString(Map arg0, Object arg1) { Point p=(Point)arg1; StringBuilder sb=new StringBuilder(); sb.append(p.getPointX()+","+p.getPointY()); return sb.toString(); } }
2.3、struts.xml中action节点的配置信息(代码如下)
<action name="convert" class="cn.zhuojingxinxi.web.ConvertAction"> <result name="success">/success.jsp</result> <result name="input">/error.jsp</result> </action>
2.4、action中的代码如下:
package cn.zhuojingxinxi.web; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import org.apache.struts2.ServletActionContext; import cn.zhuojingxinxi.entity.Point; import com.opensymphony.xwork2.ActionSupport; public class ConvertAction extends ActionSupport{ private Point point=null; public Point getPoint() { return point; } public void setPoint(Point point) { this.point = point; } public String execute(){ System.out.println(point.getPointX()+"==========="+point.getPointY()); return "success"; } }
值得注意的是:
1、文件上传的时候配置 <param name="allowedTypes">text/plain,image/jpeg,image/bmp</param>可以选择默认允许上传的文件类型。
2、错误页面必须配置 <s:fielderror></s:fielderror>才能显示错误信息
源码下载请点这里: