1

我在 tomcat 6 上有一个带有 mojara EL 2.2 的 JSF 2.0,并且在开发过程中它已经工作了一段时间。我最近添加了一个带有用于登录的命令按钮(基本内容)的表单,它在操作 doLogin 处检查托管 bean 中的用户名和密码。

public String doLogin(){
    FacesMessage message = null;
    if((username.equals("user"))&&(password.equals("pass")))
        return "testpage.xhtml";
    else
        message = new FacesMessage("Invalid username or password");

    FacesContext.getCurrentInstance().addMessage(null, message);

    return null;
}

问题是,在它通过 doLogin 并返回“testpage.xhtml”后,会显示相同的页面。即使我在 WebContent 的根目录中拥有所有 xhtml 文件。

在tomcat的控制台中,我得到:

JSF 的 ELResolver 未向 JSP 容器注册。

使用 EL 2.2 传递参数可以正常工作。

我将 JSF 与 Facelets 一起使用。

4

3 回答 3

0

从 JSF 2.0 开始引入隐式导航。在旧的 JSF 1.x 中,您需要定义一个<navigation-rule>infaces-config.xml或显式调用ExternalContext#redirect()一个 URL。

此问题表明您的 JSF 2.0 Web 应用程序正在 JSF 1.x 后备模式中运行。确保您faces-config.xml的声明符合 JSF 2.0 规范版本。

<?xml version="1.0" encoding="UTF-8"?>

<faces-config
    xmlns="http://java.sun.com/xml/ns/javaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_2_0.xsd"
    version="2.0">

    <!-- Config here. -->

</faces-config>

EL 解析器警告与此无关。这是由于在 Tomcat 6 上使用 Glassfish 的 EL 2.2 造成的,您将无法在.jsp页面中使用 EL(如果您只使用 Facelets,这应该不是问题)。如果您想摆脱此警告,请使用JBoss EL而不是 Glassfish EL。JBoss EL 是增强的 EL 2.1 实现,而 Glassfish EL 是 EL 2.2 实现。

于 2012-05-24T16:17:00.497 回答
0

在 JSF 2.0 中将 testpage 视图翻译成隐式导航。请在此处更改您的代码,

    public String doLogin(){
       FacesMessage message = null;
       if((username.equals("user"))&&(password.equals("pass"))) {
            return "testpage";
       } else {
            message = new FacesMessage("Invalid username or password");
            FacesContext.getCurrentInstance().addMessage(null, message);
       }
    return null;
}
于 2012-05-29T04:54:32.887 回答
0

我不确定,因为我没有看到另一个代码。

如果您没有在 faces-config.xml 中设置特定的导航规则。

$SUB-DIRECTORY1/testpage.xhtml 的默认值为 $SUB-DIRECTORY1/testpage

于 2012-05-24T16:21:47.080 回答