使用BeanUtils.populate方法轉化Map為Javabean時get與set方法的命名規則
阿新 • • 發佈:2019-02-06
這兩天在學JavaWeb,看的是傳智播客網上書城的教學視訊。其中頁面提交表單時,使用了一個封裝好的CommonUtils類來將request.getParameterMap()獲取的Map轉為JavaBean物件。CommonUtils內部使用了commons-beanutils包裡的BeanUtils.populate方法。
剛開始寫的JavaBean是這樣的:
Servlet中的doPost方法: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 + "]"; } }
前臺表單程式碼: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之類的都不行,相信各位也知道命名規則了吧。