如何通过faces-config实现JSF登录失败时同页显示错误提示
实现方案
1. 修改Login.java托管Bean
首先导入JSF消息相关依赖包,调整checkuser方法,在登录失败时注入错误提示,同时配置重定向时保留消息:
// 新增导入 import javax.faces.application.FacesMessage; import javax.faces.context.FacesContext; // 原有类结构不变,仅修改checkuser方法 public boolean checkuser(){ try { System.out.println("user name" +user_name); System.out.println("password" +password); // 注意:SessionFactory建议提取为单例全局初始化,不要每次验证都新建,此处为兼容你现有代码保留 SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory(); Session session = sessionFactory.openSession(); session.beginTransaction(); Query query= session.createQuery("from Login where user_name=:user_name and password=:password"); query.setString("user_name", user_name); query.setString("password", password); List list= query.list(); System.out.println("list size" +list.size()); if(list.size()==1){ // 登录成功,清空残留错误消息 FacesContext.getCurrentInstance().getExternalContext().getFlash().setKeepMessages(true); return true; }else{ // 登录失败,注入错误消息 FacesMessage errorMsg = new FacesMessage(FacesMessage.SEVERITY_ERROR, "账号或密码错误,请重试", null); FacesContext.getCurrentInstance().addMessage(null, errorMsg); // 配置重定向时保留消息 FacesContext.getCurrentInstance().getExternalContext().getFlash().setKeepMessages(true); return false; } } catch (Exception e) { System.out.println(e); // 系统异常时也注入错误提示 FacesMessage errorMsg = new FacesMessage(FacesMessage.SEVERITY_ERROR, "系统异常,请稍后重试", null); FacesContext.getCurrentInstance().addMessage(null, errorMsg); FacesContext.getCurrentInstance().getExternalContext().getFlash().setKeepMessages(true); } return false; }
2. 修改index.xhtml页面,添加错误提示展示位
在页面的登录表单内部,加入JSF消息展示组件,仅在有错误消息时渲染,不影响页面正常访问:
<h:form> <!-- 新增错误提示组件,放在表单最上方即可 --> <h:messages globalOnly="true" styleClass="fail" rendered="#{not empty facesContext.messageList}" /> <!-- 原有账号、密码输入框、提交按钮代码不变 --> </h:form>
你可以自行给fail类添加CSS样式,比如:
.fail { color: #dc3545; padding: 8px 12px; margin: 10px 0; background: #f8d7da; border: 1px solid #f5c6cb; border-radius: 4px; }
3. 现有faces-config.xml无需修改
你当前的导航规则配置完全符合要求,不需要调整,登录失败时会自动重定向回index.xhtml并展示错误提示。
内容的提问来源于stack exchange,提问作者user023835
相关产品推荐
相关产品推荐

