真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

怎么在Java中使用BeanUtils組件

怎么在Java中使用BeanUtils組件?很多新手對(duì)此不是很清楚,為了幫助大家解決這個(gè)難題,下面小編將為大家詳細(xì)講解,有這方面需求的人可以來(lái)學(xué)習(xí)下,希望你能有所收獲。

創(chuàng)新互聯(lián)是網(wǎng)站建設(shè)專(zhuān)家,致力于互聯(lián)網(wǎng)品牌建設(shè)與網(wǎng)絡(luò)營(yíng)銷(xiāo),專(zhuān)業(yè)領(lǐng)域包括成都網(wǎng)站建設(shè)、做網(wǎng)站、電商網(wǎng)站制作開(kāi)發(fā)、小程序定制開(kāi)發(fā)、微信營(yíng)銷(xiāo)、系統(tǒng)平臺(tái)開(kāi)發(fā),與其他網(wǎng)站設(shè)計(jì)及系統(tǒng)開(kāi)發(fā)公司不同,我們的整合解決方案結(jié)合了恒基網(wǎng)絡(luò)品牌建設(shè)經(jīng)驗(yàn)和互聯(lián)網(wǎng)整合營(yíng)銷(xiāo)的理念,并將策略和執(zhí)行緊密結(jié)合,且不斷評(píng)估并優(yōu)化我們的方案,為客戶提供全方位的互聯(lián)網(wǎng)品牌整合方案!

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 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 map = new HashMap();
		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)換器。

怎么在Java中使用BeanUtils組件

自定義類(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 properties),封裝到對(duì)象中去,簡(jiǎn)化了很多的操作!

1.jsp

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>


 
  注冊(cè)
 
 
 	
 		用戶名稱(chēng):
  密  碼:
  聯(lián)系方式:
     

jsp顯示的結(jié)果:

怎么在Java中使用BeanUtils組件 

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 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]

看完上述內(nèi)容是否對(duì)您有幫助呢?如果還想對(duì)相關(guān)知識(shí)有進(jìn)一步的了解或閱讀更多相關(guān)文章,請(qǐng)關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝您對(duì)創(chuàng)新互聯(lián)的支持。


網(wǎng)頁(yè)題目:怎么在Java中使用BeanUtils組件
當(dāng)前網(wǎng)址:http://weahome.cn/article/pgdehj.html

其他資訊

在線咨詢(xún)

微信咨詢(xún)

電話咨詢(xún)

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部