我在Glassfish上使用Java EE作为企业应用程序。
我在WEB-INF中有一些xhtml文件,以防止直接访问URL。这些文件由servlet显示如下:
request.getRequestDispatcher(" /WEB-INF/HiddenFile.xhtml")。forward(request,response);
我遇到的唯一问题是那些引用某些托管bean的文件中的表达式语言没有得到评估。
非常感谢有关获取这些文件的表达式语言评估的任何帮助。
提前致谢
编辑
我没有认为这些信息很有用,但是因为它已被请求,所以它是。
要显示的页面,WEB-INF / HiddenFiles / FileA.xhtml
<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://xmlns.jcp.org/jsf/html">
<h:head>
<title>PAGE A</title>
</h:head>
<h:body>
A - #{testBean.testString}
</h:body>
</html>
负责产生响应的servlet的摘录:
public class RedirectorServlet extends HttpServlet {
/**
* Processes requests for both HTTP <code>GET</code> and <code>POST</code>
* methods.
*
* @param request servlet request
* @param response servlet response
* @throws ServletException if a servlet-specific error occurs
* @throws IOException if an I/O error occurs
*/
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
if (logic()) {
request.getRequestDispatcher("/WEB-INF/HiddenFiles/fileA.xhtml").forward(request, response);
} else {
request.getRequestDispatcher("/WEB-INF/HiddenFiles/fileB.xhtml").forward(request, response);
}
*other methods including logic()*
}
WEB-INF中的web.xml:
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.1" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd">
<context-param>
<param-name>javax.faces.PROJECT_STAGE</param-name>
<param-value>Development</param-value>
</context-param>
<servlet>
<servlet-name>Faces Servlet</servlet-name>
<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet>
<servlet-name>RedirectorServlet</servlet-name>
<servlet-class>servlet.RedirectorServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>/faces/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>RedirectorServlet</servlet-name>
<url-pattern>/RedirectorServlet</url-pattern>
</servlet-mapping>
<session-config>
<session-timeout>
30
</session-timeout>
</session-config>
<welcome-file-list>
<welcome-file>faces/index.xhtml</welcome-file>
</welcome-file-list>
</web-app>
答案 0 :(得分:1)
EL仅在Facelets文件的情况下由FacesServlet
评估,在JSP文件的情况下由JspServlet
评估。
您已在FacesServlet
上映射/faces/*
。但是,您的“重定向程序servlet”不会转发到匹配该模式的URL。因此,FacesServlet
将不会被调用,因此具有所有taglib和EL的Facelets文件将不会被解析和执行,而只是像纯文本一样返回。
您需要将FacesServlet
映射从/faces/*
更改为*.xhtml
,以便也可以在位于/WEB-INF
的XHTML文件中调用它,该文件由servlet转发或过滤。
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>*.xhtml</url-pattern>
</servlet-mapping>
无关,“重定向”一词在这里放错了位置。你实际上是在执行forward。并且,您实际上应该使用servlet filter来完成工作。