Jsf 为什么浏览器会留下关于服务器重定向不完整的消息?

Jsf 为什么浏览器会留下关于服务器重定向不完整的消息?,jsf,Jsf,我目前正在尝试为我的项目使用登录和注销JSF身份验证方法 为了从数据库中获取价值,我将学习几个类并连接数据库 当我编译完我的类查询中所有必要的属性后,我运行,它向我显示错误,如下所示: 我假设我创建了一个类来加载我的JDBC驱动程序以传递URL时可能出错。以下是连接类: public class DataConnect { public static Connection getConnection() { try { Class.forName("org.hibern

我目前正在尝试为我的项目使用登录和注销JSF身份验证方法

为了从数据库中获取价值,我将学习几个类并连接数据库

当我编译完我的类查询中所有必要的属性后,我运行,它向我显示错误,如下所示:

我假设我创建了一个类来加载我的
JDBC
驱动程序以传递URL时可能出错。以下是连接类:

public class DataConnect {
public static Connection getConnection() {
    try {
        Class.forName("org.hibernate.dialect.MySQLDialect");
        Connection con = DriverManager.getConnection(
                "jdbc:mysql://localhost:3306/epda_assignment?zeroDateTimeBehavior=convertToNull", "root", "kok123");
        return con;
    } catch (ClassNotFoundException | SQLException ex) {
        System.out.println("Database.getConnection() Error -->"
                + ex.getMessage());
        return null;
    }
}

public static void close(Connection con) {
    try {
        con.close();
    } catch (SQLException ex) {
    }
}
LoginBean.java

public class LoginBean implements Serializable{

private String email2;
private String msg;
private String password2;

public String processRequest() {
    boolean valid = UserDao.validate(email2, password2);
    if (valid) {
        HttpSession session = SessionUtil.getSession();
        session.setAttribute("email2", email2);
                    session.setAttribute("password2", password2);
        return "after_login";
    } else {
        FacesContext.getCurrentInstance().addMessage(
                null,
                new FacesMessage(FacesMessage.SEVERITY_WARN,
                        "Incorrect Username and Passowrd",
                        "Please enter correct username and Password"));
        return "home";
    }
}
 //logout event, invalidate session
public String logout() {
    HttpSession session = SessionUtil.getSession();
    session.invalidate();
    return "home";
}
home.xhtml

<table>
                <tr>
                <td> <h:outputLabel for="email2">Enter your Email: </h:outputLabel></td>
                <td><h:inputText id="email2" value="#{loginBean.email2}"/></td>
            </tr>
                <tr>
                <td> <h:outputLabel for="passwrod2">Password: </h:outputLabel></td>
                <td><h:inputText id="password2" value="#{loginBean.password2}"/></td>
            </tr>
                <td><h:commandButton id="submit-button" value="Submit" action="#{loginBean.processRequest}"/></td>
                <td></td>
            </table>

输入您的电子邮件:
密码:
在_login.xhtml之后

<h:body>
    <h:form>
    <p>Welcome #{registerBean.fullName_}</p>
    <h:commandLink action="#{loginBean.logout}" value="Logout"></h:commandLink>
</h:form>    
</h:body>

欢迎{registerBean.fullName}

请帮我找出我没发现的错误。如果问题不在上述课程中,问题在哪里?

问题 由于无限重定向,浏览器(firefox)无法加载站点。不知何故,您一次又一次地重定向到同一页面,因此firefox会终止请求以节省性能

因此,由于您没有对问题进行更精确的编辑,我只能提供一个与您类似的示例问题

假设您在站点
test
上,在此站点上执行一些操作,并根据一些结果转到
test
(刷新)或
abc
。 不知何故,结果总是一样的,所以你永远重定向,firefox会停止重定向,以免浪费性能

或 与上一个示例类似:假设您必须访问站点,其中一个重定向到另一个站点,因此您从
test
转到
abc
,然后永远返回。(我认为firefox不会意识到并阻止这一点)


解决方案 这个问题的解决方案非常简单:只需在重定向之前添加一个
if
-语句,这样您就可以只在不在该站点时重定向

或 传递操作不应重定向的信息


例1:

HttpServletRequest request = (HttpServletRequest) FacesContext.getCurrentInstance().getExternalContext().getRequest();

if (!"yourSite".equals(request.getRequestURI()) {
    return "/yourSite.xhtml";
} else {
    return null;
}
例2:


编辑 在您的情况下,我还将添加一个
if
-语句来检查您是否不在要重定向的当前站点上

像这样:

HttpServletRequest request = (HttpServletRequest) FacesContext.getCurrentInstance().getExternalContext().getRequest();

if (!"home".equals(request.getRequestURI()) {
    return "home";
} else {
    return null;
}
登录后的
也一样。用它来代替家。那么它应该会起作用


一些相关问题:

请显示JSF Bean代码我已对LoginBean类进行了更改,包括您在“主页”和“登录后”中正在做什么?浏览器不会重定向,因为这是一个无限循环。例如,您在页面
test
上执行一个操作,以便重定向或刷新页面,但不超过一次。不知何故,您总是刷新/重定向到
test
,因此您陷入了一个无限循环。只需添加一条if语句,检查您是否不在该网站上。您还可以添加一些与前面评论中要求的内容类似的信息吗?您好,谢谢您的回答。我已根据先前的评论要求添加了有关我的案件的新信息。