ELF表达式不在JSF的JSP页面中计算

时间:2011-06-06 11:32:43

标签: jsp jsf el

我的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> 

我的faces-config文件

<?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世界!

我在做错了什么 请帮忙 克尚

2 个答案:

答案 0 :(得分:4)

在JSP上使用JSF 1.2需要最少的Servlet 2.5容器,因为EL中的更改(EL已经从JSF 1.1迁移到JSP 2.1,它是Servlet 2.5的一部分)。您需要确保在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 is one of the WORST learning resources for Java EE。你应该把那个网站放在你的黑名单中。寻找不同的学习资源。查看https://stackoverflow.com/tags/jsf/info

的“资源”部分

答案 1 :(得分:0)

在web.xml中添加正确的版本

<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_4.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_4.xsd" id="WebApp_ID" version="2.4">