javabean
- 格式:ppt
- 大小:3.26 MB
- 文档页数:38
JSP Javabean辅助类
使用JavaBean可以处理一种特定的功能,如显示当前的时间,链接数据库等。
如果一个JavaBean编写的代码太多,就会产生不容易调试,时间长了不容易读取的情况。
这时把JavaBean的代码分成不同的类,一个类完成一个指定的功能,这样结构层次清晰,分工就明确了。
在一个JavaBean中如果存在多个类,除了主类之外的其它类,我们称它们为JavaBean的辅助类。
如果读者比较熟悉Java语言的编写,对于这种形式就比较熟悉了。
现在通过一个案例演示JavaBean的辅助类的使用,该案例主要实现显示指定目录下的文件,在前面章节中使用的是JSP页面实现的这一个功能,在这里借助于
将该文件保存在指定的位置,文件名为ListFile.java。
在JavaBean文件中,存在两个类,一个FileName类实现FilenameFilter接口,起到一个过滤文件名的作用,一个ListFile类实现是一个符合JavaBean规范的类,该类主要实现设置和获得路径
的名称,并显示指定目录下的文件。
将该文件保存,文件名为BeanExample10.jsp。
打开IE浏览器,在地址栏中输入http://localhost:8080/JSPExample/BeanExample10.jsp,单击转到,会显示如图4-11所示的窗口。
图4-11 显示指定目录下文件
在JSP页面源文件中,创建一个JavaBean的实例化对象file,通过file对象利用JSP的动作标签设置和获取JavaBean的变量的值。
最后使用listFile方法输出指定目录下的所有文件,如上图所示。
"error retrieving field value from bean" 是一个常见的错误信息,通常在使用Java 编程语言中的JavaBean 时出现。
这个错误提示可能在访问JavaBean 中的字段值时出现问题。
解决这个问题需要根据具体情况进行调查和修复。
以下是一些可能的解决方法:
检查属性命名和访问方法:确保你在JavaBean 中定义了正确的属性(字段)和相应的getter 方法。
属性命名应该遵循JavaBean 的命名规范,并且getter 方法应该以"get" 或"is" 开头,后面跟着属性名。
检查访问范围:确保属性的访问范围(即修饰符)正确设置,以便外部代码可以访问属性值。
检查参数个数:如果你在获取属性值时使用了参数,确保getter 方法的参数个数与你使用的参数个数匹配。
检查空引用:在访问属性值之前,确保JavaBean 对象不为null。
如果对象为null,访问属性值就会抛出空指针异常。
使用合适的访问方法:确保使用了正确的getter 方法来获取属性值。
如果属性是布尔类型,使用"is" 前缀的getter 方法。
检查异常处理:在访问属性值时,捕获可能抛出的异常,如空指针异常或其他相关的异常,并进行适当的错误处理。
检查数据类型匹配:确保你在获取属性值时,使用的数据类型与属性的数据类型匹配。
调试输出:在出错的地方加入调试输出语句,输出相关变量的值,以便分析问题。
mapstruct转换原理MapStruct是一种用于JavaBean之间转换的代码生成器,它能够根据自定义映射规则自动生成转换代码。
本文将深入探讨MapStruct的转换原理,以及它是如何实现JavaBean之间的转换的。
让我们来了解一下什么是JavaBean。
JavaBean是一种符合特定规范的Java类,它具有私有属性和公共getter/setter方法。
在实际开发中,我们通常会使用JavaBean来表示业务实体,比如用户、订单等。
在开发过程中,经常需要将一个JavaBean转换为另一个JavaBean,这就涉及到了对象之间的转换。
传统的方式是手动编写转换代码,逐个复制属性值,这样不仅繁琐且容易出错。
而MapStruct的出现,就是为了解决这个问题。
MapStruct的转换原理非常简单明了。
它通过注解来标记转换规则,然后在编译时根据这些规则自动生成转换代码。
这种方式不仅避免了手动编写转换代码的繁琐,还能够提高转换的效率和代码的可维护性。
在使用MapStruct进行转换时,首先需要定义一个转换接口,该接口用于描述源类型和目标类型之间的映射关系。
接口中的方法定义了如何从源类型转换为目标类型。
接口上需要使用@Mapper注解来标识该接口是一个转换接口。
接下来,需要在转换接口的方法上使用@Mapping注解来定义属性之间的映射关系。
@Mapping注解可以指定源属性和目标属性之间的对应关系,也可以指定一些转换规则,比如类型转换、格式化等。
MapStruct会根据这些注解来自动生成转换代码。
除了@Mapping注解,MapStruct还提供了一些其他的注解用于处理特殊情况。
比如,如果源类型和目标类型的属性名不一致,可以使用@Mapping注解的source属性来指定源属性名;如果存在多个源属性需要合并到目标属性中,可以使用@Mapping注解的expression属性来指定合并规则。
在编译时,MapStruct会根据转换接口和注解来生成转换代码,并将其编译到目标项目中。
MVC模式:jsp+servlet+javabean---- 网站开发模式(省去dao数据访问对象,便于理解)------ 模式一:jsp+JavaBean :适合快速开发,但是jsp于javabean之间紧密耦合,开发维护造成麻烦。
eg:美工和开发人员分工不明确,彼此依赖增强。
·jsp :会做模式二中jsp+servlet的工作·javabean:同下模式二:jsp+servlet+javabean:适合于团队开发,速度相对较慢,但可维护性高。
·jsp:开发前台界面方便,做ui开发容易·servlet:是java程序,安全性高,性能也高;但是显示不方便,也可以像jsp一样接受用户的请求参数·javabean:可重复调用,需要接受用户的请求参数,进行相应的处理如果将模式一的jsp的接受用户参数的功能部分交给servlet去做,则jsp就不用直跟javabean交流。
即:jsp -> servlet -> javabean问题?·jsp跳转到servlet可以吗?---------- 表单提交或超链接·servlet跳转到jsp可以吗?---------- response,request(当数据只希望保存1次,用request范围保存属性,则要求是服务器端跳转)/****联想到jsp中两种跳转语句的区别:·response.sendRedirect():客户端跳转,请求不保存·<jsp:forward page = "" >:服务器端跳转,请求可以继续保存jsp中属性保存的四种范围:page request session application****/request怎么跳转呢?RequestDispatcher 接口 ---------- 服务器跳转-------servlet跳转到jsp 的服务器端类似于<jsp:forward page=""/> ----------------------jsp跳转到servlet eg:RequestDispatcher rd = null;rd = req.getRequestDispatcher("url");rd.forward(req,res);或者:req.getRequestDispatcher("url").forward(req,res);--------------------------mvc例子----------------------------------- 案例描述:htm:表单servlet:接受姓名,调用javabean判断结果,显示成功/失败的页面javabean:判断姓名是否为空----------- 详细描述:mvc_login.htm中大致内容如下:<form action = "mvcdemo.mldn" method = "post">输入姓名:<input type = "text" name = "uname"><input type = "submit" value="提交"></form>封装Servletpublic class MVCServlet extends HttpServlet{public void doGet(.. req,... res)throws...{this.doPost(req,res);}public void doPost(.. req,... res)throws...{String name = req.getParameter("uname");MVCCheck mc = new MVCCheck();mc.setName(name); //请求对象设置到mc对象中去String path = "";if(mc.isValidate()){//保存名字在request范围中去req.setAttribute("name",mc.getName());path="mvc_success.jsp";}else{path = "mvc_failure.jsp";}//进行跳转req.getRequestDispatcher(path).forward(req,res);}//在Web.xml中配置Servletpublic class MVCCheck --------- 一个简单的bean{private String name;... setName(...);... getName(...);public boolean isValidate(){if( == null || "".equals()){return false;}else{return true;}}}mvc_success.jsp页面<h1>输入成功><%= request.getAttribute("name")%></h1>mvc_failure.jsp页面<h1>输入失败</h1><h2><a>回去登陆</a></h2>总结:servlet中最好只有以下几种代码:·接受参数·调用javabean ·进行跳转·有一些简单的逻辑判断。
Map与JavaBean相互转换的⼯具类下⾯就来分享⼯具类的内容:使⽤范围:JavaBean类对象的属性不能是数组、List、Set、Mappublic class MapBeanUtil {/*** JavaBean转Map* @param obj* @return*/public static Map<String, Object> bean2Map(Object obj) {Map<String, Object> map = new LinkedHashMap<>();Class<?> clazz = obj.getClass();for (Field field : clazz.getDeclaredFields()) {field.setAccessible(true);String fieldName = field.getName();Object value = null;try {value = field.get(obj);} catch (IllegalAccessException e) {e.printStackTrace();}if (value == null){value = "";}map.put(fieldName, value);}return map;}/*** Map转JavaBean* @param clazz* @param map* @param <T>* @return*/public static <T> T map2Bean(final Class<T> clazz, final Map<String, ? extends Object> map) {if (map == null) {return null;}T res = null;try {res = clazz.getDeclaredConstructor().newInstance();//获取到所有属性,不包括继承的属性Field[] fields = clazz.getDeclaredFields();for (Field field : fields) {//获取字段的修饰符int mod = field.getModifiers();if (Modifier.isStatic(mod) || Modifier.isFinal(mod)) {continue;}//设置对象的访问权限field.setAccessible(true);//根据属性名称去map获取valueif(map.containsKey(field.getName())) {//给对象赋值field.set(res, map.get(field.getName()));}}} catch (Exception e) {e.printStackTrace();}return res;}public static void main(String[] args) throws Exception {HashMap<String, Object> map = new HashMap<>();map.put("id", 1001);map.put("username", "zhangsan");map.put("password", "123456");map.put("nickname", "张三");map.put("email","****************");map.put("gender", true);map.put("birth", LocalDate.now());map.put("avatar", "/aa/bb/ab.jpg");map.put("role", "VIP");map.put("status", (byte) 1);map.put("salt", "ldfkasjghweoiq324");map.put("createTime", LocalDateTime.now());map.put("updateTime", LocalDateTime.now());User user = map2Bean(User.class, map);System.out.println(user);Map<String, Object> res = bean2Map(user);System.out.println(map);}}User类的代码:public class User {private Integer id;private String username;private String password;private String nickname;private String email;private Boolean gender;private LocalDate birth;private String avatar;private String role;private Byte status;private String salt;private LocalDateTime createTime;private LocalDateTime updateTime;}到此这篇关于Map与JavaBean相互转换的⼯具类的⽂章就介绍到这了,更多相关Map与JavaBean相互转换内容请搜索以前的⽂章或继续浏览下⾯的相关⽂章希望⼤家以后多多⽀持!。
使⽤(BeanUtils⼯具包)将JavaBean对象和Map相互转换public class ReflectBean {/*** 将⼀个 JavaBean 对象转化为⼀个 Map* @param bean 要转化的JavaBean 对象* @return 转化出来的 Map 对象*/public static Map<String, String> beanConvertMap(Object bean){Class<? extends Object> cls = bean.getClass();Map<String, String> returnMap = new HashMap<String, String>();Field[] fields = cls.getDeclaredFields();for(int i = 0 ; i < fields.length ; i++){PropertyDescriptor descriptor=BeanUtils.getPropertyDescriptor(cls, fields[i].getName());Method readMethod = descriptor.getReadMethod();try {String result = readMethod.invoke(bean, new Object[0])==null?"": readMethod.invoke(bean, new Object[0]).toString();if (!"".equals(result) && result != null) {returnMap.put(fields[i].getName(), result);}} catch (IllegalArgumentException e1) {e1.printStackTrace();} catch (IllegalAccessException e1) {e1.printStackTrace();} catch (InvocationTargetException e1) {e1.printStackTrace();}}return returnMap;}/*** 将⼀个 Map 对象转化为⼀个 JavaBean* @param obj 要转化的对象* @param map 包含属性值的 map* @return 转化出来的 JavaBean 对象*/public static Object mapConvertBean(Map<String, String> maps,Object obj){Class cls=obj.getClass();Field[] fields = cls.getDeclaredFields();for (int i = 0; i < fields.length; i++) {if (maps.containsKey(fields[i].getName())) {Object values = maps.get(fields[i].getName());Object[] argss = new Object[1];argss[0] = (String) values;PropertyDescriptor descriptor=BeanUtils.getPropertyDescriptor(cls, fields[i].getName());try {descriptor.getWriteMethod().invoke(obj, values);} catch (IllegalArgumentException e) {e.printStackTrace();} catch (IllegalAccessException e) {e.printStackTrace();} catch (InvocationTargetException e) {e.printStackTrace();}}}return obj;}/*** 将List结果集转换为Map* @param list* @return*/public static Map<String, String> listCoverMap(List<Param> list){Map<String,String> map=new HashMap<String,String>();for (int i = 0; i <list.size(); i++) {map.put(list.get(i).getName(),(list.get(i)).getValue());}return map;}BeanUtils⼯具包是由Apache公司所开发,主要是⽅便程序员对Bean类能够进⾏简便的操作。
【校验处理】⼀、JavaBeanValidation验证在真实的开发中,我们经常会遇到需要对数据进⾏校验的业务,那么本篇⽂章对此进⾏总结。
暂时总结三种⽅法,⼤家可以根据需要选择使⽤。
⼀、Java Bean Validation 验证⼆、SpringBoot Validate 统⼀处理三、Spring Validation 校验处理本篇⽂章采⽤第⼀种Java Bean Validation的验证⽅式。
话不多说,直接上代码。
1. 引⼊依赖注意:java bean validation参数验证,在使⽤的时候,有时候会报错,原因是跟spring版本不兼容,这⾥演⽰的版本如下:<dependency><groupId>org.hibernate</groupId><artifactId>hibernate-validator</artifactId><version>5.1.1.Final</version></dependency><dependency><groupId>javax.validation</groupId><artifactId>validation-api</artifactId><version>1.1.0.Final</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-dependencies</artifactId><version>2.3.1.RELEASE</version><type>pom</type><scope>import</scope></dependency>2. 测试实体类注意:将需要的校验规则直接通过注解写在实体类对应字段上即可@Data@AllArgsConstructorpublic class Test {@Length(min = 1,max = 5,message = "姓名长度应该在1-5之间")private String name;@Range(min = 1,max = 100,message = "年龄应该在1-100之间")private Integer age;@DecimalMax(value = "100.00",message = "体重有些超标哦")@DecimalMin(value = "60.00",message = "多吃点饭吧")private BigDecimal weight;@Future(message = "元素必须是⼀个将来的⽇期")@JsonFormat(pattern="yyyy-MM-dd HH:mm:ss")private Date date;@AssertTrue(message = "此值只能为true")private Boolean isuser;@Email(message = "邮箱地址⽆效")private String email;}3. 校验⼯具类注意:(1)如果想要使⽤,直接调⽤ValidationUtils.validate参数直接传实体对象即可。
hutool获取bean 方法一、什么是hutoolhutool是一个Java工具包,提供了丰富的工具方法和类,用于简化Java开发过程中的常见任务。
hutool的目标是让Java开发变得更加简单、高效和愉悦。
二、hutool的bean工具类在Java开发中,我们经常需要进行对象之间的转换和操作。
hutool提供了一套强大的bean工具类,用于方便地获取和操作JavaBean的属性。
1. BeanUtil类BeanUtil类是hutool中用于操作JavaBean的核心类之一。
它提供了一系列静态方法,用于获取和设置JavaBean的属性值。
1.1 获取属性值使用BeanUtil类可以方便地获取JavaBean的属性值。
以下是常用的获取属性值的方法:•getProperty(Object bean, String propertyName):获取指定JavaBean的指定属性的值。
•getProperty(Object bean, String propertyName, Object defaultValue):获取指定JavaBean的指定属性的值,如果属性值为null,则返回默认值。
•getPropertyDesc(Object bean, String propertyName):获取指定JavaBean的指定属性的描述符。
1.2 设置属性值使用BeanUtil类可以方便地设置JavaBean的属性值。
以下是常用的设置属性值的方法:•setProperty(Object bean, String propertyName, Object value):设置指定JavaBean的指定属性的值。
2. BeanPath类BeanPath类是hutool中用于操作JavaBean路径的类。
它提供了一系列静态方法,用于获取和设置JavaBean路径的属性值。
2.1 获取属性值使用BeanPath类可以方便地获取JavaBean路径的属性值。