基本的JSF 2和tomcat 6动作结果导航问题

时间:2012-05-24 15:59:47

标签: java jsf tomcat6

我在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的ELResolvers未在JSP容器中注册。

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

我正在使用带有Facelets的JSF。

3 个答案:

答案 0 :(得分:0)

自JSF 2.0以来引入了隐式导航。在旧的JSF 1.x中,您需要在<navigation-rule>中定义faces-config.xml或在网址上明确调用ExternalContext#redirect()

此问题表明您的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实现。

答案 1 :(得分:0)

我不确定,B'coz我没有看到其他代码。

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

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

答案 2 :(得分: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;
}