Quantcast
Channel: OSCHINA 社区最新新闻
Viewing all articles
Browse latest Browse all 44787

Hasor-2.4.3 发布,使用表单验证

$
0
0

Hasor 2.4.3 正式发布了,Hasor 是一款基于 Java  语言的应用程序开发框架,它的核心设计目标是提供一个简单、且必要的环境给开发者。开发者可以在此基础上,通过 Hasor 强有力的粘合机制,构建出更加完善的应用场景。同时 Hasor 的各种内置插件也会帮助开发者进行快速开发。而所有内置插件,在初始化的时都做了智能加载,只有用到了它们才会被加载到框架中。否则这些内置插件在初始化期间就会放弃加载自己。基于目前 Hasor 内核上已经发展出 DB、Web、Restful 三大基础框架。

该版本更新如下:

  • 新增:

  • 01.新增 Htmlspace工具类:StringEscapeUtils、EntitiesUtils。工具来源为:apache-common

  • 改进:

  • 01.改进启动日志输出。

  • 02.WebController 增加一组 putData 方法用于输出到渲染模版中。

  • 03.JdbcOperations接口可以通过依赖注入被注入到 Service 中。

  • 04.TransactionTemplateManager 代码优化,修复潜在的 npe 异常情况。

  • 05.ValidErrors 接口继承自 RenderData 获取参数更加方便。

  • 06.WebController 类重度优化,删除了一些重复的方法,增添表单验证相关的方法。

  • 新增:

  • 01.Restful 框架整合 Validation 插件增加请求参数 @Valid 验证功能。

  • 02.注解 @Valid 支持场景化验证。

  • 改进::

  • 01.env.config 加载环境变量遇到名称冲突时的,Bug。

  • 02.DBModule 类,在声明 Aop 类匹配的时候从任意类,改为需要标记 @Transactional 注解的类。

  • 改进:

  • 01.env.config 功能的优化。

一个简单的用户登陆Demo 

/**
 * 本地登陆
 * @version : 2016年1月1日
 * @author 赵永春(zyc@hasor.net)
 */
@MappingTo("/account/login.{action}")
public class Login extends Action {
    //
    public void execute(@PathParam("action") String action, @Valid("SignIn") @Params LoginForm loginForm, RenderData data) throws IOException {
        if (StringUtils.equalsIgnoreCase("do", action)) {
            //
            // - 登录请求
            this.putData("loginForm", loginForm);
            if (!data.isValid()) {
                renderTo("htm", "/account/login.htm");//验证失败
            } else {
                renderTo("htm", "/account/login.htm");//验证通过
            }
        } else {
            //
            // - 登录页面
            data.clearValidErrors();//清空验证信息,避免瞎显示
            if (this.isLogin()) {
                String ctx_path = data.getAppContext().getServletContext().getContextPath();
                data.getHttpResponse().sendRedirect(ctx_path + "/account/my.htm");
            }
        }
    }
}

FormBean

@ValidBy(LoginFormValidation.class)
public class LoginForm {
    @ReqParam("email")
    private String email;
    @ReqParam("account")
    private String account;
    @ReqParam("password")
    private String password;
    @ReqParam("redirectURI")
    private String redirectURI;
    //
    //
    ....
    ....
}

表单验证器

public class LoginFormValidation implements Validation<LoginForm> {
    @Override
    public void doValidation(String validType, LoginForm dataForm, ValidErrors errors) {
        if (StringUtils.equalsIgnoreCase("SignIn", validType)) {
            if (!StringUtils.equalsIgnoreCase("admin", dataForm.getAccount())) {
                errors.addError("account", "帐号不是admin。");
            }
            //
            //
        } else if (StringUtils.equalsIgnoreCase("SignUp", validType)) {
            errors.addError("message", "暂不支持注册功能。");
            //
        }
    }
}

使用了 Freemarker 之后页面对于验证结果的显示

<form class="form-horizontal">
    <input type="hidden" name="redirectURI" value="${req_redirectURI}"/>
    <input name="email" type="text" value="${loginForm.email}">
    <!-- 帐号的验证结果 -->
    <#if validData["account"]?? >${escapeHtml.escapeHtml(validData["account"]?join(","))}</#if>
    <input name="password" type="password">
    <!-- 密码的验证结果 -->
    <#if validData["password"]?? >${escapeHtml.escapeHtml(validData["password"]?join(","))}</#if>
    <input type="submit">
</form>

Viewing all articles
Browse latest Browse all 44787

Trending Articles