jakarta-ee - 托管 Bean 隐式路由不起作用?
问题描述
我无法从托管 bean 隐式导航,该页面是一个包含用户名和密码字段的登录页面,用于检查 phpmyadmin 数据库;
我的托管 bean 定义如下:
package backManagedBean;
import java.io.Serializable;
import javax.ejb.EJB;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
import javax.faces.bean.SessionScoped;
import com.esprit.entities.Users;
import com.esprit.service.AuthenticationService;
@SuppressWarnings({ "serial", "unused" })
@RequestScoped
@ManagedBean(name="loginManagedBean", eager=true )
public class loginManagedBean implements Serializable {
/**
*
*/
private static Users connectedUser;
private String emailField;
private String passwordField;
@EJB
AuthenticationService authService;
public String getEmailField() {
return emailField;
}
public void setEmailField(String emailField) {
this.emailField = emailField;
}
public String getPassworField() {
return passwordField;
}
public void setPassworField(String passwordField) {
this.passwordField = passwordField;
}
public AuthenticationService getAuthService() {
return authService;
}
public void setAuthService(AuthenticationService authService) {
this.authService = authService;
}
public String login(){
//connectedUser = authService.authenticate(emailField, passwordField);
return "/Back/index?faces-redirect=true";
}
}
页面刷新和查询正常执行,您可以看到在 hibernate.show_sql 的持久性中定义的 Wildfly 服务器日志。然而返回登录页面,因为 login() 函数没有返回任何内容。
登录.xhtml:
<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://xmlns.jcp.org/jsf/html">
<ui:composition template="../template/facesTemplate.xhtml">
<ui:define name="head">
<title>Welcome To Petroca</title>
</ui:define>
<ui:define name="body">
<div class="accountbg">
<div class="content-center">
<div class="content-desc-center">
<div class="container">
<div class="row justify-content-center">
<div class="col-lg-5 col-md-8">
<div class="card">
<div class="card-body">
<h3 class="text-center mt-0 m-b-15"><a href="index.html"
class="logo logo-admin"><img src="../assets/images/logo-dark.png" height="30"
alt="logo" /></a></h3>
<h4 class="text-muted text-center font-18"><b>Sign In</b></h4>
<div class="p-2">
<h:form class="form-horizontal m-t-20" >
<div class="form-group row">
<div class="col-12"><h:inputText class="form-control" type="text" required="" value="#{loginManagedBean.emailField}" placeholder="Username" /></div>
</div>
<div class="form-group row">
<div class="col-12">
<h:inputSecret class="form-control" required="" value="#{loginManagedBean.passworField}" placeholder="Password" /></div>
</div>
<div class="form-group text-center row m-t-20">
<div class="col-12">
<h:button class="btn btn-primary btn-block waves-effect waves-light" action="#{loginManagedBean.login()}">
Log In
</h:button>
</div>
</div>
<div class="form-group m-t-10 mb-0 row">
<div class="col-sm-7 m-t-20"><a href="passwordRecovery.jsf"
class="text-muted"><i class="mdi mdi-lock"></i> Forgot your
password?</a></div>
</div>
</h:form>
</div>
</div>
</div>
</div>
</div><!-- end row -->
</div>
</div>
</div>
</div>
</ui:define>
</ui:composition>
</html>
解决方案
我可能会使用这个:
<h:commandButton ... action="#{loginManagedBean.login}" />
您的按钮实际上应该做什么,是带有一些数据(登录名/密码)的表单提交,如果它没问题 - 重定向到其他页面,或者如果身份验证失败 - 假设是某个错误页面。因此commandButton
,这是一个更好的选择。
<h:commandButton>
生成一个类似 HTML 的按钮<input type="submit">
,默认情况下使用 POST 方法提交父<h:form>
级并调用附加到 action 或 actionListener 的操作。
您还可以尝试使用outcome
属性来查看它是否有任何区别:
<h:button ... outcome="#{loginManagedBean.login()}" />
但在你的情况下 commandButton 是一个更好的选择。
推荐阅读
- c - 当使用大于其大小的数据初始化字符数组时,究竟会发生什么?
- orocrm - OroCommerce 问题,OroContactBundle 中的 AttachmentExtension 迁移
- javascript - Nuxt:如何在 fetch() 方法中访问 axios?
- c - 如何正确找到 off_t 大小
- java - 动态操作应用程序属性 - 保险库设置(或任何其他值)
- node.js - 一个返回类型为 undefined 的 Promise 会感染 Promise.all 中带有 undefined 的其他 Promise
- node.js - 我目前正在使用 Google OAuth2.0 构建一个 React 应用程序,完成登录后它不会重定向
- c# - 最好的扩展方法重载需要 List 类型的接收器
- javascript - 如何在 Safari iOS 的新窗口中打开 pdf
- c# - Winform webBrowser 的事件不会触发