我在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。
自JSF 2.0以来引入了隐式导航。在旧的JSF 1.x中,您需要在<navigation-rule>
中定义faces-config.xml
或在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实现。
我不确定,B'coz我没有看到另一个代码。
如果未在faces-config.xml中设置特定的导航规则。
$ SUB-DIRECTORY 1 / test page.xhtml的默认值是$ SUB-DIRECTORY 1 /测试页面
在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;
}