loginForm 登录表单
loginForm
是一个可以使用用户名和密码验证用户的表单。
-
XML 元素:
loginForm
-
Java 类:
JmixLoginForm
基本用法
默认情况下,loginForm
包含用户名和密码字段、登录按钮以及 3 个可选元素:地区语言下拉框、Remember me(记住我) 复选框以及 Forgot password(忘记密码) 按钮。可以通过配置属性显示或隐藏可选元素。
下面是一个简单用例,用户可以通过登录表单进行身份验证:
<loginForm id="loginForm"/>
@Autowired
private LoginViewSupport loginViewSupport;
@Subscribe("loginForm")
public void onLogin(AbstractLogin.LoginEvent event) {
try {
loginViewSupport.authenticate(
AuthDetails.of(event.getUsername(), event.getPassword())
.withLocale(loginForm.getSelectedLocale()) (1)
.withRememberMe(loginForm.isRememberMe()) (2)
);
} catch (BadCredentialsException | DisabledException | LockedException | AccessDeniedException e) {
event.getSource().setError(true);
}
}
1 | 使用选择的地区语言。 |
2 | 根据复选框的值检查是否在多个会话中记住用户。 |
自定义
表单支持自定义标题、字段名以及登录失败的错误消息。使用内部的 XML 元素 form
和 errorMessage
并指定属性值即可:
<loginForm id="loginForm">
<form title="Welcome"
username="Username or email"
password="Password"
rememberMe="Remember me"
submit="Log in"
forgotPassword="Forgot password"/>
<errorMessage title="Login failed"
message="Check that you have entered the correct username and password and try again"/>
</loginForm>
属性值可以是文本或者 消息包 中的键值。 |
修改应用程序的地区语言
用户可以在进入应用程序之前选择地区语言。需要 配置地区语言,然后用户可以在地区下拉框进行选择。
在登录表单中,可以使用 LocaleChangedEvent 处理器修改语言而无需重新加载页面。读取 消息包 中本地化的信息并设置:
@Autowired
private MessageBundle messageBundle;
@Subscribe("loginForm")
public void onLoginFormLocaleChanged(EnhancedLoginForm.LocaleChangedEvent event) {
UI.getCurrent().getPage().setTitle(messageBundle.getMessage("LoginView.title"));
JmixLoginI18n loginI18n = JmixLoginI18n.createDefault();
JmixLoginI18n.JmixForm form = new JmixLoginI18n.JmixForm();
form.setTitle(messageBundle.getMessage("loginForm.headerTitle"));
form.setUsername(messageBundle.getMessage("loginForm.username"));
form.setPassword(messageBundle.getMessage("loginForm.password"));
form.setSubmit(messageBundle.getMessage("loginForm.submit"));
form.setForgotPassword(messageBundle.getMessage("loginForm.forgotPassword"));
form.setRememberMe(messageBundle.getMessage("loginForm.rememberMe"));
loginI18n.setForm(form);
LoginI18n.ErrorMessage errorMessage = new LoginI18n.ErrorMessage();
errorMessage.setTitle(messageBundle.getMessage("loginForm.errorTitle"));
errorMessage.setMessage(messageBundle.getMessage("loginForm.badCredentials"));
loginI18n.setErrorMessage(errorMessage);
loginForm.setI18n(loginI18n);
}
这种方法能直接修改语言,提升用户体验。
事件和处理器
AttachEvent - DetachEvent - ForgotPasswordEvent - LocaleChangedEvent - LoginEvent - RememberMeChangedEvent
在 Jmix Studio 生成处理器桩代码时,可以使用 Jmix UI 组件面板的 Handlers 标签页或者视图类顶部面板的 Generate Handler 添加,也可以通过 Code → Generate 菜单(Alt+Insert / Cmd+N)生成。 |
本页是否有帮助?
感谢您的反馈