W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗(yàn)值獎勵
通常一個表單在遞交到后臺之后我們在處理表單內(nèi)容之前會做一些參數(shù)合法性校驗(yàn)。比如:年齡大于1,性別必須是:男或女,帳號密碼輸入不能為空。最后還要把驗(yàn)證的信息反饋到頁面上。
Hasor 在設(shè)計表單驗(yàn)證功能時候參考了大量具有類似功能的框架,也做了大量 API 上面的設(shè)計優(yōu)化。
我們以登錄場景為例進(jìn)行說明,首先把各種登錄請求參數(shù)傳遞進(jìn)來。下面是處理登錄請求的代碼。
public class LoginForm {
@ReqParam("account")
private String account;
@ReqParam("password")
private String password;
...
}
@MappingTo("/login.htm")
public class Longin {
public void execute(@Params LoginForm loginForm,
RenderInvoker invoker) {
...
}
}
第一步:編寫表單驗(yàn)證器
public class LoginFormValidation implements Validation<LoginForm> {
@Override
public void doValidation(String validType,
LoginForm dataForm,
ValidInvoker errors) {
if (StringUtils.isBlank(dataForm.getLogin())) {
errors.addError("login", "帳號不能為空!");
return;
}
if (StringUtils.isBlank(dataForm.getPassword())) {
errors.addError("password", "密碼不能為空!");
return;
}
}
}
第二步:建立表單對象 LoginForm 和驗(yàn)證器 LoginFormValidation 之間的關(guān)系
@ValidBy(LoginFormValidation.class)
public class LoginForm {
...
}
第三步:通過 @Valid 注解告訴 Controller 這個參數(shù)需要進(jìn)行表單驗(yàn)證。
@MappingTo("/login.do")
public class Longin {
public void execute(@Valid() @Params LoginForm loginForm) {
System.out.println("login data is " + JSON.toString(loginForm));
}
}
接下來我們接著改造 Login,讓它實(shí)現(xiàn)如果表單驗(yàn)證成功我們就跳轉(zhuǎn)到用戶詳情頁。如果驗(yàn)證失敗就回到登陸頁并提示錯誤。
@MappingTo("/login.htm")
public class Longin {
public void execute(@Valid() @Params LoginForm loginForm,
RenderInvoker invoker,
ValidInvoker valid) {
if (valid.isValid()) {
invoker.renderTo("/userInfo.htm");
} else {
invoker.put("loginForm", loginForm);
invoker.renderTo("/login.htm");
}
}
}
剩下的就是login頁面處理驗(yàn)證信息回顯(freemarker 模板語法)
<form action="/login.do" method="post">
<!-- 帳號的驗(yàn)證結(jié)果 -->
帳號:<input name="account" type="text" value="${loginForm.account}">
<#if validData["account"]?? >
${validData["account"]?join(",")}
</#if>
<!-- 密碼的驗(yàn)證結(jié)果 -->
密碼:<input name="password" type="password" value="${loginForm.password}">
<#if validData["password"]?? >
${validData["password"]?join(",")}
</#if>
<input type="submit" value="遞交"/>
</form>
有些校驗(yàn)邏輯比較通用,我們可以提取成公共的校驗(yàn)邏輯。這樣一個表單的校驗(yàn)就可以是 公共 + 制定兩部分組成。表單驗(yàn)證器可以同配置多個,如下:
@ValidBy({LoginFormValidation.class, DataBaseValidation.class})
public class LoginForm {
...
}
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: