【问题标题】:Basic JSF 2 and tomcat 6 action result navigation issue基本 JSF 2 和 tomcat 6 操作结果导航问题
【发布时间】:2012-05-24 15:59:46
【问题描述】:

我在 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 一起使用。

【问题讨论】:

    标签: java jsf tomcat6


    【解决方案1】:

    从 JSF 2.0 开始引入隐式导航。在旧的 JSF 1.x 中,您需要在 faces-config.xml 中定义 <navigation-rule> 或在 URL 上显式调用 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 实现。

    【讨论】:

      【解决方案2】:

      我不确定,因为我没有看到其他代码。

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

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

      【讨论】:

        【解决方案3】:

        在 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;
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-02-16
          • 2011-09-29
          相关资源
          最近更新 更多