一尘不染

EL表达式不在JSF的JSP页面中求值

jsp

我的inputname.jsp文件

<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %> 
<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>

<html> 
<head> 
<title>enter your name page</title> 
</head> 
<body> 
<f:view> 
<h1> 
<h: outputText value="JSF 1.2 Tutorial"/> 
</h1> 
<h:form id="UserEntryForm"> 
<h: outputText value="Enter Your Name:"/> 
<h:inputText value="#{UserBean.userName}" /> 
<h:commandButton action="welcome" value="OK" /> 
</h:form> 
</f:view> 
</body> 
</html>

My welcome.jsp file 
<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %> 
<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %> 
<html> 
<head> 
<title>Welcome</title> 
</head> 
<body> 
<f:view> 
<h3> 
<h: outputText value="Welcome" />, 
<hutputText value="#{UserBean.userName}" /> to JSF 1.2 World! 
</h3> 
</f:view> 
</body> 
</html>

我的web.xml文件

<?xml version='1.0' encoding='UTF-8'?> 
<!DOCTYPE web-app PUBLIC 
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" 
"http://java.sun.com/dtd/web-app_2_3.dtd">


<web-app>

<!-- Faces Servlet --> 
<servlet> 
<servlet-name>Faces Servlet</servlet-name> 
<servlet-class>javax.faces.webapp.FacesServlet</servlet-class> 
<load-on-startup> 1 </load-on-startup> 
</servlet>

<!-- Faces Servlet Mapping --> 
<servlet-mapping> 
<servlet-name>Faces Servlet</servlet-name> 
<url-pattern>*.jsf</url-pattern> 
</servlet-mapping>

</web-app>

我的面孔配置文件

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

<!DOCTYPE faces-config PUBLIC 
"-//Sun Microsystems, Inc.//DTD JavaServer Faces Config 1.1//EN" 
"http://java.sun.com/dtd/web-facesconfig_1_1.dtd">

<faces-config>

<navigation-rule> 
<from-view-id>/user/inputname.jsp</from-view-id> 
<navigation-case> 
<from-outcome>welcome</from-outcome> 
<to-view-id>/user/welcome.jsp</to-view-id> 
</navigation-case> 
</navigation-rule> 
<managed-bean> 
<managed-bean-name>UserBean</managed-bean-name> 
<managed-bean-class>net.roseindia.UserNameBean</managed-bean-class> 
<managed-bean-scope>request</managed-bean-scope> 
</managed-bean>

</faces-config>

我的UserNameBean.java文件

package net.roseindia;

public class UserNameBean {

String userName;

/** 
* @return User Name 
*/ 
public String getUserName() { 
return userName; 
}

/** 
* @param User Name 
*/ 
public void setUserName(String name) { 
userName = name; 
} 
}

当我打开inputname.jsf时

Enter your name: #{UserBean.userName}

而不是评估userbean.username,它只是打印它,与在welcome.jsf上发生的情况相同。我得到欢迎,#{UserBean.userName}到JSF
1.2 World!

我做错了什么请帮助克里山


阅读 244

收藏
2020-06-08

共1个答案

一尘不染

在JSP上使用JSF 1.2至少需要Servlet 2.5容器,因为EL发生了变化(EL已从Servlet 2.5的JSF 1.1迁移到JSP
2.1)。您需要确保在Servlet 2.5兼容的容器上运行JSF 1.2 webapp,该容器web.xml声明为符合Servlet
2.5规范(或者更好的是,容器支持的最大值)。您web.xml是根据Servlet 2.3声明的,这暗示了不同的EL版本,因此将不评估EL表达式。

<?xml version="1.0" encoding="UTF-8"?>
<web-app 
    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-app_2_5.xsd"
    version="2.5">

    <!-- Config here. -->

</web-app>

注意,您将您faces-config.xml错误地声明为JSF 1.1。您想将其重新声明为JSF 1.2,以充分利用JSF 1.2的功能。

<?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_1_2.xsd"
    version="1.2">

    <!-- Config here. -->

</faces-config>

最后,但并非最不重要,Roseindia.net是一个 最糟糕的 学习资源的JavaEE。您应该将该站点真正列入黑名单。

2020-06-08