Thymeleaf 3& S中的多个位置的相同形式春天4

时间:2016-11-01 23:30:55

标签: spring thymeleaf

我希望在多个页面上显示我的登录表单(例如),并且我希望使用当前用户的登录信息预先填充它(假设用户是通过cookie识别的)。但我不希望每个可能页面的每个控制器方法都必须为表单提供LoginForm bean。在提交表单时,我确实需要所有验证魔术,然后当然我希望表单的结果在用户提交时与用户所在的页面相同。

我现在无法弄清楚如何实现这一目标。它甚至可能吗?

编辑:

我有一个像这样的Thymeleaf形式:

<form action="#" data-th-action="@{/users/login}" data-th-object="${loginForm}" method="post">
    <input type="text" placeholder="Email or Username" data-th-field="${loginForm.login}">
    <input type="password" placeholder="Password" data-th-field="${loginForm.password}">
    <button type="submit" name="login">Sign in</button>
    <button type="submit" name="register">Register</button>
</form>

如果我没有创建LoginForm(我的类)bean并将其粘贴在loginForm下的模型中,那么在渲染页面时我会在GET上获得异常。

1 个答案:

答案 0 :(得分:0)

您不需要将LoginForm传递给多个控制器,而是可以通过验证所需网址的登录表单,使用http过滤器将代码集中在一个地方,如下所示:

LoginFormValidationFilter类:

let link = ['/somelocation', this.param, this.param];
    this.router.navigate(link);

<a (click)="thefunctionwheretheaboveishappening()">Some Description</a>

Web.xml过滤器映射:

@Component
public class LoginFormValidationFilter implements Filter {

@Override
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {

    HttpServletRequest request = (HttpServletRequest) req;
    HttpServletResponse response = (HttpServletResponse) res;

    String url = request.getRequestURL();
    if(url.equals(YOUR_LOGIN_URL)) {
        //validate the request here for the required urls
        //If request is invalid, send an error message back
    }

    chain.doFilter(req, res);
}

@Override
public void init(FilterConfig filterConfig) {
}

@Override
public void destroy() {
}

}