前言:終于來了一篇有品質的文章,我個人感覺非常不錯,《jfinal與bootstrap之間的登入跳轉實戰》。具體内容包含有點選登入彈出模态框、點選登入确認按鈕後的validate、jfinal的validate、jfinal的session管理、ajax請求與傳回資訊處理、頁面間智能跳轉。
彈出模态框以及jquery validate可以參照jquery weebox總結、彈出視窗不居中顯示?、jquery validate初上手系列文章。
從jfinal的validate說起
當然你可以參考jfinal提供的幫助文檔,我當然也必須是參照了官方文檔,當然對于這種開源技術每個人在使用的過程中肯定有千奇百态的問題,那麼依據我的實戰結果,我想再贅述一遍也是非常有必要的。
1.指定config中的路由
me.add("/login", MembersController.class, "/pages/login");
2.編寫conroller類
public class MembersController extends BaseController {
@Before(MembersValidator.class)
@ActionKey("/login")
public void login() {
// 擷取使用者名
String name = getPara("username");
// 擷取密碼
String password = getPara("password");
Members mem = Members.me.getMemByNamePasswd(name, CipherUtils.generatePassword(password));
if (mem != null) {
// 儲存session
getSession().setAttribute("username", name);
// 最後登入ip
mem.set("lastip", getRequest().getRemoteHost());
mem.set("lastvisit", DateUtils.getCurrentTime());
mem.update();
ajaxDoneSuccess("登入成功!");
} else {
ajaxDoneError("使用者不存在!");
}
// 跳轉到前台發起請求的路徑
renderJson();
}
}
注意:
使用before綁定validate
使用actionkey綁定前端請求action名
使用getSession().setAttribute來操作session,同時前端稍後介紹如何使用
封裝ajaxDone系列方法進行資料格式綁定,前端稍後介紹
使用renderJson方法對ajax請求傳回結果資料進行json格式輸出
接下來你需要看看我封裝的baseController
3.BaseController
package com.hc.jf.controller;
import com.jfinal.core.Controller;
public class BaseController extends Controller {
protected void ajaxDone(int statusCode, String message) {
setAttr("statusCode", statusCode);
setAttr("message", message);
// 跳轉路徑
String forwardUrl = getPara("forwardUrl");
if (forwardUrl == null || forwardUrl.equals("")) {
forwardUrl = getRequest().getRequestURL().toString();
}
setAttr("forwardUrl", forwardUrl);
setAttr("callbackType", getPara("callbackType"));
}
protected void ajaxDoneSuccess(String message) {
ajaxDone(200, message);
}
protected void ajaxDoneInfo(String message) {
ajaxDone(201, message);
}
protected void ajaxDoneSuccess(String message, String forwarUrl) {
ajaxDone(200, message);
}
protected void ajaxDoneError(String message) {
ajaxDone(300, message);
}
protected void ajaxDoneError(String message, String forwarUrl) {
ajaxDone(300, message);
}
}
分别封裝成功、錯誤、info級别的資訊
增加了statusCode、message、forwardUrl、callbackType四個屬性。
以上兩個屬性和前端也有對應,稍後介紹。
4.MembersValidator
package com.hc.jf.validator;
import com.hc.jf.entity.Members;
import com.jfinal.core.Controller;
import com.jfinal.validate.Validator;
public class MembersValidator extends Validator {
@Override
protected void validate(Controller controller) {
validateRequiredString("username", "usernameMsg", "請輸入使用者名!");
validateRequiredString("password", "passwordMsg", "請輸入密碼!");
}
@Override
protected void handleError(Controller controller) {
controller.keepModel(Members.class);
controller.render("login.jsp");
}
}
這個validate确實沒什麼屌用,因為前端已經使用jquery validate進行了check,然而請注意,如果你沒有使用jquery的或者為了網絡安全等等,有這個也不錯。
好吧,我其實不想加入這個validate,但是我覺得可以我還沒有想到用處,但是心有戚戚焉,覺得它還是有用的。