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

我在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”之后,将显示相同的页面。即使我已将所有的xhtml文件放在WebContent的根目录中。

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

The ELResolvers for JSF were not registered with the JSP container.

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

我在Facelets中使用JSF。可以给我一些建议

0
额外 编辑
意见: 1

3 答案

Implicit navigation is introduced since JSF 2.0. In old JSF 1.x you'd need to define a in faces-config.xml or to explicitly call ExternalContext#redirect() on an URL.

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

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



    <!-- Config here. -->


EL解析器警告与此无关。这是因为在Tomcat 6上使用Glassfish的EL 2.2而导致的,您将无法在 .jsp 页面中使用EL(如果您仅使用Facelets,这应该不成问题)。如果您想摆脱此警告,请改为使用 JBoss EL Glassfish EL。 JBoss EL是一个增强的EL 2.1实现,而Glassfish EL是EL 2.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;
}
0
额外

我不确定,B'coz我没有看到另一个代码。

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

$ SUB-DIRECTORY1/testpage.xhtml的缺省值是$ SUB-DIRECTORY1/testpage

0
额外