1. 程式人生 > >使用BeanUtils.populate方法轉化Map為Javabean時get與set方法的命名規則

使用BeanUtils.populate方法轉化Map為Javabean時get與set方法的命名規則

這兩天在學JavaWeb,看的是傳智播客網上書城的教學視訊。其中頁面提交表單時,使用了一個封裝好的CommonUtils類來將request.getParameterMap()獲取的Map轉為JavaBean物件。CommonUtils內部使用了commons-beanutils包裡的BeanUtils.populate方法。

剛開始寫的JavaBean是這樣的:

public class Domain {
	private String name;
	private String verifycode;

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getVerifyCode() {
		return verifycode;
	}

	public void setVerifyCode(String verifycode) {
		this.verifycode = verifycode;
	}

	@Override
	public String toString() {
		return "Domain [name=" + name + ", verifycode=" + verifycode + "]";
	}

}
Servlet中的doPost方法:
	public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		Map<String, String[]> map = request.getParameterMap();
		Map<String, String> output = new HashMap<String, String>();
		for(Entry<String, String[]> entry : map.entrySet()) {
			output.put(entry.getKey(), entry.getValue()[0]);
		}
		System.out.println(output.toString());
		Domain formDomain = new Domain();
		ConvertUtils.register(new DateLocaleConverter(), Date.class);
		try {
			BeanUtils.populate(formDomain, map);
		} catch (IllegalAccessException | InvocationTargetException e) {
			throw new RuntimeException(e);
		}
		System.out.println(formDomain.toString());
	}
前臺表單程式碼:
	<form action="/tools/LoginServlet" method="post">
		<input type="hidden" name="method" value="doPost"/>
		使用者名稱:<input type="text" name="name"><br /> 
		密 碼:<input type="password" name="password"><br /> 
		驗證碼:<input type="text"	name="verifycode"><br /> 
		<img alt="驗證碼"	src="/tools/VerifyCodeServlet" id="imgVerifyCode" onclick="_hyz()"> 
		<a href="javascript:_hyz()">換一張</a><br> 
		<input type="submit" name="提交">
	</form>


好了,樓主高高興興的點提交。控制檯的輸出是這樣的:
{name=liSi, verifycode=test, method=doPost, 提交=提交, password=123}
Domain [name=liSi, verifycode=null]

可以看到request中的verifycode引數是正常的,但JavaBean中的verifycode卻沒有值。這裡樓主卡了很久,後來將setVerifyCode改為setVerifycode才正常。

實驗了一下,什麼setVErifycode、setverifycode、setverifyCode之類的都不行,相信各位也知道命名規則了吧。