快速业务通道

Struts2中的参数传递 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-19
s FileComponent implements Serializable {    private static final long serialVersionUID = 4594003082271182188L;    private File upload;    private String fileName;    /**    * The default constructor    */    public FileComponent() {    }    /**    * @return Returns the upload.    */    public File getUpload() {      return upload;    }    /**    * @return Returns the fileName.    */    public String getFileName() {      return fileName;    }    /**    * @param upload    *      The upload to set.    */    public void setUpload(File upload) {      this.upload = upload;    }    /**    * @param fileName    *      The fileName to set.    */    public void setFileName(String fileName) {      this.fileName = fileName;    }    /**    * @param fileName    *      The fileName to set.    */    public void setUploadFileName(String uploadFileName) {      this.fileName = uploadFileName;    } }

Struts2中的参数传递(7)

时间:2011-02-04

在这个类中,我定义了upload表示上传的文件,fileName表示上传文件的文件名。请注意我整个文件中的最后一个方法:setUploadFileName。这个方法将保证FileUploadInterceptor在运行时,能够正确设置上传的文件名。

Java代码

/** * @param fileName *      The fileName to set. */ public void setUploadFileName(String uploadFileName) {    this.fileName = uploadFileName; }

这样,在Action中,我们将面对一个个完整的fileComponent对象,其中包括文件的引用、文件名称和其他文件信息。这样就不会因为上传多个文件而手足无措,你只需要使用fileComponent数组,就能轻松对上传的文件进行管理,而避免了在Action中书写许多个文件、文件名等属性了。

对于第二个问题,目前我也没有找到很好的方法。我所采用的方式与Yulimin是一致的:

Yulimin 写道

我现在的做法是表单中增加了一个隐藏域,当用户文件选择后,利用JS截取到用户选择的文件名,然后一起提交上去。

不知道有没有最终的解决方法?

自定义的类型转化实现 

Struts2在处理参数传递的过程中,需要完成类型转化,保证页面上的字符串能够转化成各式各样的Java对象。而这一点,其实也是由OGNL完成的。还记得我们在讲述OGNL的基础知识的时候列出来过的一个接口嘛?

Java代码

/** * Appends the standard naming context for evaluating an OGNL expression * into the context given so that cached maps can be used as a context. * * @param root the root of the object graph * @param context the context to which OGNL context will be added. * @return Context Map with the keys <CODE>root</CODE> and <CODE>context</CODE> *     set appropriately */ public static Map addDefaultContext( Object root, ClassResolver classResolver, TypeConverter converter, MemberAccess memberAccess, Map context );

在这个接口中,我们可以在使用OGNL的时候,注册针对某个Class级别的自己实现的TypeConverter,这样,OGNL就会在进行设值计算和取值计算的时候,使用自定义的类型转化方式了。让我们来看看TypeConverter的接口定义:

Java代码

/** * context - OGNL context under which the conversion is being done * target - target object in which the property is being set * 

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号