如何在登录页面上显示错误

时间:2017-03-22 22:46:03

标签: java html

我试图实现这一点并需要一些帮助。登录尝试失败后,我希望让用户获得反馈。如果登录尝试在服务器端失败,则在请求失败后在页面上显示错误消息。

// This is the Session Controller in UI

public class SessionsController extends Controller {

private final FormFactory formFactory;
private final ISessionService sessionsService;
private final IUserService userService;

@Inject
public SessionsController(FormFactory formFactory, ISessionService sessionsService, IUserService userService) {

    this.formFactory = formFactory;
    this.sessionsService = sessionsService;
    this.userService = userService;
}

public Result createGet() {
    CurrentUser currentUser = sessionsService.retrieveCurrentUserSession();

    final Form<CreateViewModel> createViewModelForm = formFactory.form(CreateViewModel.class);

    if (currentUser != null) {
        return redirect(routes.HomeController.index());
    }

    return ok(create.render(createViewModelForm));
}

public Result createPost() {

    final Form<CreateViewModel> createViewModelForm = formFactory.form(CreateViewModel.class);
    CreateViewModel viewModel = createViewModelForm.bindFromRequest().get();
    ServiceResponse<CurrentUser> response = sessionsService.createSession(viewModel.getEmail(), viewModel.getPassword(), request().remoteAddress());

    if (response.hasErrors()) {
        return ok(create.render(createViewModelForm));
    }else{
        IUser user = userService.retrieveById(response.getResponseObject().getId());
        user.setLastLogin(dateUtils.getCurrentDateTime());
        ServiceResponse<IUser> userResponse = userService.update(user, false);
        if (userResponse.hasErrors()){
            throw new RuntimeException();
        }

        DateTime start = new DateTime(user.getPasswordCreatedDate());
        DateTime stop = new DateTime(DateTime.now());
        int daysBetween = Days.daysBetween(start, stop).getDays();

        if(daysBetween > 60){
            user.setPasswordReset(true);
        }

        if (user.getPasswordReset() == true){
            return editPasswordGet(user);
        }
    }

    return redirect(routes.HomeController.index());

}

//这是UI视图会话

@(createForm: Form[femr.ui.models.sessions.CreateViewModel])

@import femr.ui.views.html.layouts.main
@import femr.ui.controllers.routes.SessionsController
    @styles = {
        <link rel="stylesheet" href="@routes.Assets.versioned("css/login.css")">
    }
@main("Login", styles = styles) {

    @helper.form(action = SessionsController.createPost(), 'class -> "form-signin") {
        <div id="login">
            <h1>Please sign in</h1>
            <input type="text" name="email" placeholder="Email" />
            <input type="password" name="password" placeholder="Password" />
            <input type="submit" value="Log in" />
            <img src="@routes.Assets.versioned("img/logo_color_sm.png")" />
        </div>
    }
}





@(createForm: Form[femr.ui.models.sessions.CreateViewModel])

@import femr.ui.views.html.layouts.main
@import femr.ui.controllers.routes.SessionsController
    @styles = {
        <link rel="stylesheet" href="@routes.Assets.versioned("css/login.css")">
    }
@main("Login", styles = styles) {

    @helper.form(action = SessionsController.createPost(), 'class -> "form-signin") {
        <div id="login">
            <h1>Please sign in</h1>
            <input type="text" name="email" placeholder="Email" />
            <input type="password" name="password" placeholder="Password" />
            <input type="submit" value="Log in" />
            <img src="@routes.Assets.versioned("img/logo_color_sm.png")" />
        </div>
    }
}

1 个答案:

答案 0 :(得分:0)

一种简单的技术是将消息添加到响应对象,并在登录失败时将视图指定为“Home / login”。添加这些消息应与您在响应中设置数据的方式非常相似。在UI屏幕上,在用户名,密码部分之上有一个动态div,可以检索响应消息(如果有的话)。