標籤:lock isa strong ams 後台 esc app font 通過
頁面效果
滑鼠失去焦點時,不需要重新整理頁面進行校正,判斷登入名稱是否重複。
實現步驟1.引入struts2-json-plugin-2.5.10.1外掛程式包
2.頁面使用jquery的ajax實現後台校正js
/**校正登入名稱是否出現重複*/ function checkUser(o){ //alert(o.value);//dom的寫法 //alert($(o).val());//jquery的寫法 var logonName = $(o).val(); //以登入名稱作為查詢條件,查詢該登入名稱是否在資料庫表中存在記錄 $.post("elecUserAction_checkUser.do",{"logonName":logonName},function(data){ //如果棧頂是模型驅動的對象,取值的時候應該使用data.message的方式 //如果棧頂是模型驅動的對象的某個屬性,取值的時候應該使用data即可 if(data==1){ $("#check").html("<font color=‘red‘>登入名稱不可為空</font>"); $(o)[0].focus(); $("#BT_Submit").attr("disabled","none"); } else if(data==2){ $("#check").html("<font color=‘red‘>登入名稱已經存在</font>"); $(o)[0].focus(); $("#BT_Submit").attr("disabled","none"); } else{ $("#check").html("<font color=‘green‘>登入名稱可以使用</font>"); $("#BT_Submit").attr("disabled",""); } }); }
可以看到data作為標識符來判斷登入名稱是否重複,所以在實體類ElecUser.java中加入非持久化javabean屬性
//檢查登入名稱是否重複標識符private String message;public String getMessage() { return message;}public void setMessage(String message) { this.message = message;}
3.在Action類的代碼中定義checkUser():將String類型的message放置到棧頂
/** * @Name: checkUser * @Description: 使用jquery的ajax完成登入名稱的後台校正,判斷是否資料庫中存在,保證登入名稱惟一 * @Parameters: 無 * @Return: 使用struts2的json外掛程式包 */ public String checkUser(){ //1:擷取登入名稱 String logonName = elecUser.getLogonName(); //2:判斷登入名稱是否出現重複 String message = elecUserService.checkUser(logonName); //放置到棧頂 elecUser.setMessage(message);//棧頂對象是ElecUser對象 //ValueUtils.putValueStack(message);//棧頂對象是String類型的屬性 return "checkUser"; }
這裡面調用了service類的checkUser(logonName)方法,得到標識符的值,然後放入棧頂
4.在Service類的代碼中查詢message標識的值
/** * @Name: checkUser * @Description: 判斷登入名稱是否存在 * @Parameters: logonName 登入名稱 * @Return: String:判斷登入名稱是否出現重複,返回一個標識message屬性 * message=1 表示登入名稱為空白,不可以儲存 * message=2 表示登入名稱存在,不可以儲存 * message=3 表示登入名稱不存在,可以儲存 */ @Override public String checkUser(String logonName) { String message=""; if(StringUtils.isNotBlank(logonName)){ //以登入名稱作為查詢條件,查詢資料庫 String condition=" and o.logonName = ?"; Object[] params={logonName}; List<ElecUser> list = elecUserDao.findCollectionByConditionNoPage(condition, params, null); //表示登入名稱存在,不可以儲存 if(list!=null&&list.size()>0){ message="2"; } //表示登入名稱不存在,可以儲存 else{ message="3"; } } //登入名稱為空白 else{ message="1"; } return message; }
5.在struts.xml中添加
<result name="checkUser" type="json"> <!-- root指定message表示尋找棧頂是否有message屬性,如果有,直接通過message的get方法,擷取值放入棧頂 --> <param name="root">message</param> <!--對象的某個屬性被json化--> <param name="includeProperties">message</param></result>
這裡參數名root表示的是如果標識符message是放入elecUser對象中,棧頂是ElecUser對象時,直接通過message的get方法獲得message屬性值放入棧頂,頁面Js中就不需要使用data.message來取值。具體可以看struts外掛程式包原始碼:
protected Object findRootObject(ActionInvocation invocation) { Object rootObject;//尋找棧頂是否有message屬性 if (this.root != null) {//如果對象有message屬性,直接通過message的get方法,擷取值放入棧頂 ValueStack stack = invocation.getStack(); rootObject = stack.findValue(root); } else { rootObject = invocation.getStack().peek(); // model overrides action } return rootObject; } protected String createJSONString(HttpServletRequest request, Object rootObject) throws JSONException { String json = JSONUtil.serialize(rootObject, excludeProperties, includeProperties, ignoreHierarchy, enumAsBean, excludeNullProperties, defaultDateFormat); json = addCallbackIfApplicable(request, json); return json; }
使用者管理的設計--4.jquery的ajax實現登入名稱的校正