最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

      1. Java類(lèi)庫(kù)BeanUtils組件使用方法及實(shí)例詳解

         更新時(shí)間:2020年02月20日 14:25:35   作者:唐·吉坷德  
        這篇文章主要介紹了Java類(lèi)庫(kù)BeanUtils組件使用方法級(jí)實(shí)例詳解,需要的朋友可以參考下

        BeanUtils

        BeanUtils是Apache commens組件里面的成員,由Apache提供的一套開(kāi)源api,用于簡(jiǎn)化對(duì)javaBean的操作,能夠?qū)绢?lèi)型自動(dòng)轉(zhuǎn)換。

        JavaBean

        BeanUtils組件是用于簡(jiǎn)化javaBean的操作,那么什么是javaBean呢?簡(jiǎn)單來(lái)說(shuō),javaBean實(shí)質(zhì)就是java類(lèi),只不過(guò)是遵循了某種規(guī)范的java類(lèi)。

        javaBean的特點(diǎn):

        • 必須具有一個(gè)無(wú)參的構(gòu)造方法
        • 屬性必須私有化
        • 私有化的屬性必須通過(guò)public類(lèi)型的方法來(lái)暴露,也就是說(shuō)要出現(xiàn)setXXX()、getXXX()或者isXXX()的方法

        下載BeanUtils

        http://commons.apache.org/proper/commons-beanutils/download_beanutils.cgi,下載好組件,再到項(xiàng)目里面引入jar文件。

        導(dǎo)入核心包

        • commons-beanutils-1.9.3.jar
        • commons-logging-1.2.jar

        注意:當(dāng)缺少日志jar包,會(huì)出現(xiàn)如下的報(bào)錯(cuò)情況。

        java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory

        logging組件的下載地址:http://commons.apache.org/proper/commons-logging/download_logging.cgi 

        javaBean實(shí)例

        public class Student {
        	private String name;
        	private String id;
        	private int age;
        	private String sex;
        	private Date d;
        	public Student() {
        		super();
        	}
        	public Date getD() {
        		return d;
        	}
        	public void setD(Date d) {
        		this.d = d;
        	}
        	public String getName() {
        		return name;
        	}
        	public void setName(String name) {
        		this.name = name;
        	}
        	public String getId() {
        		return id;
        	}
        	public void setId(String id) {
        		this.id = id;
        	}
        	public int getAge() {
        		return age;
        	}
        	public void setAge(int age) {
        		this.age = age;
        	}
        	public String getSex() {
        		return sex;
        	}
        	public void setSex(String sex) {
        		this.sex = sex;
        	}
        	@Override
        	public String toString() {
        		return "Student [name=" + name + ", id=" + id + ", age=" + age
        				+ ", sex=" + sex + ", d=" + d + "]";
        	}
        }

        BeanUtils用法

        • 對(duì)象的拷貝,BeanUtils.copyProperties(Object dest,Object orig)
        • 對(duì)象屬性的拷貝,BeanUtils.copyProperties(Object bean,String name,Object value)或者BeanUtils.setProperty(Object bean,String name,Object value)
        • map數(shù)據(jù)封裝到Javabean,populate(Object bean, Map<String,? extends Object> properties)

        實(shí)例

        對(duì)象的拷貝

          @Test
        	public void test() throws Exception {
        		//創(chuàng)建對(duì)象
        		Student s=new Student();
        		/**
        		 * 組件對(duì)JavaBean的操作
        		 * bean:javaBean對(duì)象
        		 * name:對(duì)象的屬性名稱(chēng)
        		 * value:對(duì)象的屬性值
        		 */
        		//1.實(shí)現(xiàn)對(duì)象的屬性拷貝, 對(duì)于基本數(shù)據(jù)類(lèi)型,會(huì)自動(dòng)進(jìn)行類(lèi)型轉(zhuǎn)換
        		BeanUtils.copyProperty(s, "id","2018100712");
        		
        		//2.實(shí)現(xiàn)對(duì)象之間的拷貝:Object dest<---Object orig
        		Student s2=new Student();
        		BeanUtils.copyProperties(s2, s);
        		System.out.println(s2);
          }

        對(duì)象屬性的拷貝

        @Test
        	public void test() throws Exception {
        		//創(chuàng)建對(duì)象
        		Student s=new Student();
        		/*一般的操作
        		s.setId("1221212");
        		s.setName("老王");
        		System.out.println(s);
        		*/
        		//1.實(shí)現(xiàn)對(duì)象的屬性拷貝, 對(duì)于基本數(shù)據(jù)類(lèi)型,會(huì)自動(dòng)進(jìn)行類(lèi)型轉(zhuǎn)換
        		BeanUtils.copyProperty(s, "id","2018100712");
            System.out.println(s)
        }

        map數(shù)據(jù)封裝到j(luò)avaBean

        注意:要map中的數(shù)據(jù)封裝到JavaBean中去,需要map中的key與JavaBean里面的私有化的屬性要相匹配

        @Test
        	public void test() throws Exception {
        		//創(chuàng)建對(duì)象
        		Student s2=new Student();
        		//1.map的數(shù)據(jù)拷貝到對(duì)象中去
        		Map<String,Object> map = new HashMap<String,Object>();
        		map.put("id","12233");
        		map.put("name","老王");
        		map.put("sex","男");
        		BeanUtils.populate(s2, map);
        		System.out.println(s2);
        	}

        類(lèi)型轉(zhuǎn)換器

        當(dāng)javaBean中出現(xiàn)非基本類(lèi)型數(shù)據(jù)的私有化屬性,并且需要對(duì)該數(shù)據(jù)進(jìn)行封裝時(shí),就要去注冊(cè)該數(shù)據(jù)類(lèi)型的類(lèi)型轉(zhuǎn)換器了,不如就會(huì)出現(xiàn)錯(cuò)誤,比如該Student對(duì)象中的日期類(lèi)型。

        日期類(lèi)型轉(zhuǎn)換出錯(cuò):org.apache.commons.beanutils.converters.DateConverter toDate 警告:  DateConverter does not support default String to 'Date' conversion,可以看出工具類(lèi)converters在轉(zhuǎn)換的時(shí)候出現(xiàn)了錯(cuò)誤,為此我們可以去查看該類(lèi),以便我們接下來(lái)去實(shí)現(xiàn)類(lèi)型轉(zhuǎn)換。

        converter

        在解壓出來(lái)的BeanUtils文件下的apidoc目錄中的index.html里面可以找到該類(lèi)的說(shuō)明,會(huì)發(fā)現(xiàn)它是一個(gè)接口,有很多的實(shí)現(xiàn)類(lèi),我們可以使用里面的實(shí)現(xiàn)類(lèi)來(lái)做日期類(lèi)型的轉(zhuǎn)換或者說(shuō)我們可以自己去注冊(cè)個(gè)類(lèi)型轉(zhuǎn)換器。

        自定義類(lèi)型轉(zhuǎn)換器

        去復(fù)寫(xiě)ConvertUtils里面的register(Converter converter, Class<?> clazz)方法

        @Test
        	public void test2() throws Exception {
        		//假設(shè)網(wǎng)頁(yè)表單提交過(guò)來(lái)的數(shù)據(jù)
        		String name="老王";
        		String id="121212";
        		String date="2018-10-11";
        		Student s=new Student();
        		//1.自定義:注冊(cè)日期類(lèi)型轉(zhuǎn)換器去復(fù)寫(xiě)ConvertUtils里面的register(Converter converter, Class<?> clazz)方法
        		ConvertUtils.register(new Converter() {
        			//修改第三方j(luò)ar引入方法的參數(shù)時(shí)候,可以關(guān)聯(lián)源碼,ctrl選擇該類(lèi),點(diǎn)進(jìn)去,選擇Attach source--->external file
        			@Override
        			public Object convert(Class type, Object value) {
        				//判斷
        				if (value ==null ||"".equals(value.toString().trim())){
        					return null;	
        				}
        				if (type !=Date.class){
        					return null;
        				}
        				try {
        					//字符串轉(zhuǎn)換為日期
        					SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
        					return sdf.parse(value.toString());
        				} catch (Exception e) {
        					throw new RuntimeException(e);
        				}
        			}
        		},Date.class);
        		//把表單的數(shù)據(jù)封裝到對(duì)象中去
        		BeanUtils.copyProperty(s, "name",name);
        		BeanUtils.copyProperty(s, "id",id);
        		BeanUtils.copyProperty(s, "d",date);
        		System.out.println(s);
        	}

        使用工具類(lèi)提供的類(lèi)型轉(zhuǎn)換器

        @Test
        	public void test3() throws Exception {
        		//利用組件提供的日期類(lèi)型轉(zhuǎn)換器,提供一個(gè)實(shí)現(xiàn)類(lèi)
        		//假設(shè)表單的數(shù)據(jù)
        		String name="老王";
        		String id="121212";
        		//當(dāng)日期字符串出現(xiàn)空字符串或者出現(xiàn)空格的情況,會(huì)報(bào)錯(cuò)org.apache.commons.beanutils.ConversionException
        		String date="2018-09-12";
        		Student s=new Student();
        		ConvertUtils.register(new DateLocaleConverter(), Date.class);
        		//把表單的數(shù)據(jù)封裝到對(duì)象中去
        		BeanUtils.copyProperty(s, "name",name);
        		BeanUtils.copyProperty(s, "id",id);
        		BeanUtils.copyProperty(s, "d",date);
        		System.out.println(s);
        	}

        注意:當(dāng)日期字符串是空字符串或者存在空格的時(shí)候,會(huì)報(bào)錯(cuò)!

        BeanUtils在servlet的使用

        獲取表單提交的數(shù)據(jù)并封裝到j(luò)avabean中去,request.getParameterMap()獲取所有的參數(shù)并存儲(chǔ)到Map中去,并利用BeanUtils里面的populate(Object bean, Map<String,? extends Object> properties),封裝到對(duì)象中去,簡(jiǎn)化了很多的操作!

        1.jsp

        <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
        <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
        <html>
         <head>
          <title>注冊(cè)</title>
         </head>
         <body>
         	<form action="registe.do" method="post">
         		用戶名稱(chēng):<input type="text" name="name"><br>
         		密&nbsp;&nbsp;碼:<input type="password" name="password"><br>
         		聯(lián)系方式:<input type="text" name="phone"><br>
         		<input type="submit" value="提交">
         	</form>
         </body>
        </html>

        jsp顯示的結(jié)果:

         

        2.servlet

        package cn.tan.servlet;
        import java.io.IOException;
        import java.lang.reflect.InvocationTargetException;
        import java.util.Map;
        import javax.servlet.ServletException;
        import javax.servlet.http.HttpServlet;
        import javax.servlet.http.HttpServletRequest;
        import javax.servlet.http.HttpServletResponse;
        import org.apache.commons.beanutils.BeanUtils;
        import cn.tan.entry.Student;
         
        public class GetDataServlet extends HttpServlet {
        	public void doGet(HttpServletRequest request, HttpServletResponse response)
        			throws ServletException, IOException {
        		doPost(request, response);
        	}
        	public void doPost(HttpServletRequest request, HttpServletResponse response)
        			throws ServletException, IOException {
        		request.setCharacterEncoding("utf-8");
        		//獲取所有參數(shù)
        		Map<String, String[]> map = request.getParameterMap();
        		Student s=new Student();
        		try {
        			BeanUtils.populate(s, map);
        			//測(cè)試,輸出封裝的結(jié)果
        			System.out.println(s);
        		} catch (Exception e) {
        			throw new RuntimeException(e);
        		}
        	}
         
        }

        輸出結(jié)果:Student [name=老王, age=0, password=11111, phone=13232174361]

        更多關(guān)于Java類(lèi)庫(kù)BeanUtils組件使用方法級(jí)實(shí)例請(qǐng)查看下面的相關(guān)鏈接

        相關(guān)文章

        最新評(píng)論

        白水县| 龙里县| 凯里市| 克什克腾旗| 吉水县| 礼泉县| 清涧县| 马尔康县| 荆州市| 绥滨县| 辽宁省| 始兴县| 玉龙| 马鞍山市| 凌源市| 平度市| 弥渡县| 井冈山市| 德惠市| 方正县| 宝应县| 新巴尔虎右旗| 东台市| 泉州市| 余干县| 张家港市| 志丹县| 塔城市| 扎囊县| 南丰县| 阿克苏市| 保德县| 大姚县| 成武县| 扎囊县| 五大连池市| 斗六市| 平顺县| 郁南县| 大港区| 扬中市|