public boolean validateFileType(String propertyName) throws Exception{
PropertyDescriptor[] propertydesc = Introspector.getBeanInfo(this.getClass()).getPropertyDescriptors();
boolean exsit = false;
for(PropertyDescriptor property : propertydesc){
if(property.getName().equals(propertyName)){
exsit = true;
Method method = property.getReadMethod();
if(method!=null){
FormFile formfile = (FormFile) method.invoke(this);
if(formfile!=null && formfile.getFileSize()>0){
List<String> arrowType = Arrays.asList("image/bmp","image/png","image/gif","image/jpeg","image/pjpeg");
return arrowType.contains(formfile.getContentType().toLowerCase());
}
}else{
new RuntimeException(propertyName+"属性的getter方法不存在");
}
}
}
if(!exsit) new RuntimeException(propertyName+"属性不存在");
return true;
}
这个方法其实有点过于复杂化了,因为要实现的功能就是判断上传的文件的类型,因为上传的文件在Struts中都是用FormFile来保存的,所以可以有以下的解决方案:
1:在每一个模块的formbean当中都提供一个方法,该方法只要接受FormFile类型的属性,就可以判断该上传文件是什么类型的了。
2:为了实现封装,可以在BaseForm当中提供一个方法,就是上面的这个方法,这个方法使用的是反射机制,就是你只需要传递一个属性的名称,就可以通过反射机制来得到该属性所引用的对象,然后就可以判断该属性的类型,所以在验证的时候,不同的formbean(都继承自BaseForm)就都可以调用上面的这个方法(只要传递的参数不同就可以,比如参数可以是logofile,uploadfile),但是由于反射机制以及上面这个方法的代码决定,logofile,uploadfile都必须是FormFile类型的)
3:以可以有一个简便的方法,就是:
public boolean validateFileType(FormFile formfile) throws Exception{
if(formfile!=null && formfile.getFileSize()>0){
List<String> arrowType = Arrays.asList("image/bmp","image/png","image/gif","image/jpeg","image/pjpeg");
return arrowType.contains(formfile.getContentType().toLowerCase());
}
return true;
}
这样看来的话,第一个用反射机制的方法确实是多此一举,因为完全可以使用上面的这个简单方法来实现该功能,只需要在调用的时候传入不同的FormFile类型的对象就可以了(反射机制的那个方法也是得传入不同的参数,传递的是属性名,即简单方法的传递的参数可能是formfile ,反射机制的方法可能传递的参数是“formfile”)
分享到:
相关推荐
通过这个例子,新手可以学习到如何使用Java反射机制来增强代码的动态性,以及如何设计可扩展的系统。反射在很多场景下都很有用,例如在插件系统、序列化、动态代理等领域都有广泛应用。然而,需要注意的是,反射也...
利用java反射机制读取XML文档,省去了花费很多时间浪费在判断元素名词上面。
在这个项目中,我们利用DOM4J来解析XML文件,并通过Java的反射机制将解析出的信息存储到特定的类中。 首先,我们需要了解XML的基本概念。XML(Extensible Markup Language)是一种标记语言,常用于数据交换和结构化...
综上所述,C++的反射机制实现需要考虑到语言的特性,如静态类型、性能要求等,并且需要选择合适的方法来添加反射能力。这些实现方式中,利用宏定义、模板和泛型编程技术是较为常见和有效的选择。通过这些技术,C++...
2. **验证**:确保类文件符合JVM规范,不会给JVM带来危害。 3. **准备**:为类的静态变量分配内存,并设置初始值。 4. **解析**:将符号引用转换成直接引用。 5. **初始化**:执行类构造器`()`。 #### 七、类加载器...
2. 通过Java反射机制,获取用户选择的数据列信息,并将其转换为Excel文件的格式。 3. 将转换后的数据写入到Excel文件中,并保存到指定的文件路径中。 该方法可以实现用户自行选择数据列的Excel导出,提高了导出文件...
反射是指程序在运行时动态获取对象属性与方法的一种机制,即编译器需要将类型信息(属性类型与偏移地址以及成员函数的地址等信息)编译到程序文件中,当程序运行时将这些信息加载到内存中去,做到运行时只根据对象的...
在处理Excel文件时,反射机制可以动态地根据Excel文件中数据的格式和内容,来决定执行哪些操作。这种机制有助于实现程序的灵活性和可扩展性,因为它可以避免硬编码和固定的数据结构依赖。 3. Excel文件操作的改进...
java反射机制java反射机制.zipjava反射机制.zipjava反射机制.zipjava反射机制.zipjava反射机制.zipjava反射机制.zipjava反射机制.zipjava反射机制.zipjava反射机制.zipjava反射机制.zipjava反射机制.zipjava反射机制...
在本文中,我们将探讨如何利用反射和动态代理机制来实现自定义拦截器Interceptor。拦截器Interceptor是一种常见的设计模式,用于在方法调用前后执行某些操作,以实现日志记录、安全检查、性能监控等功能。下面我们将...
- **框架开发**:许多框架(如Spring、Hibernate)都大量使用反射机制来实现其功能。 - **代码解析**:在开发IDE时,可以通过反射来获取类的信息进行代码提示和分析。 #### 四、Class对象 `Class`对象是反射的核心...
3. 测试框架:反射机制可以用于实现测试框架,测试框架可以使用反射机制来动态地加载和使用类、方法、变量等。 在这个例子中,我们可以看到反射机制的强大之处,它可以使我们的程序更加灵活和可扩展。但是,反射...
反射不仅限于编程语言领域,近年来也被广泛应用于视窗系统、操作系统以及文件系统中。尽管“反射”一词在计算机科学中有着全新的含义,但它与物理学中的反射原理在某些方面存在相似之处,这有助于我们理解其概念。 ...
总结来说,利用宏实现反射机制是一种创新的编程技巧,它可以为不支持或限制反射的语言提供类似的功能。通过宏,程序员可以在编译期间生成必要的代码,实现运行时对类和方法的动态操作,增强了代码的灵活性。在实际...
Java反射机制是Java语言提供的一种强大的能力,它允许我们在运行时检查类的信息并动态地创建和操作对象。这种机制使得程序具有更高的灵活性和扩展性,尤其是在框架开发中有着广泛的应用。 首先,我们要理解反射的...
### Java反射机制详解 #### 一、引言 在Java面试中,经常会出现与反射机制相关的题目。这是因为Java反射机制不仅是Java语言的一项重要特性,也是理解Java动态特性的关键所在。通过本文,我们将深入探讨Java反射...
综上所述,这个代码示例展示了如何利用Qt的QMetaObject系统实现反射机制,使程序在运行时能够动态地了解和操作类的成员。这在编写高度动态和灵活的代码,或者需要进行元编程的应用场景中非常有用。通过理解并应用...
Java反射机制是Java编程语言中的一个核心特性,它允许运行中的Java程序对自身进行检查并且可以直接操作程序的内部属性。这一机制使得Java具备了高度的灵活性和动态性,尤其是在处理元数据、创建对象、调用方法和访问...