JSF。限制对模板客户端页面的直接访问

时间:2014-02-20 13:04:06

标签: jsf jsf-2 jsf-2.2

我有一个问题。在这个例子中,我正在尝试制作一个包含模板客户端代码的模板。这是一个代码。

这是template.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"
      xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
      xmlns:c="http://xmlns.jcp.org/jsp/jstl/core">
    <head>
        <title></title>
    </head>
    <body>
        <h:form>
            <ui:include src="template-client.xhtml"/>
        </h:form>
    </body>
</html>

这是template-client.xhtml。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
                xmlns:ui="http://java.sun.com/jsf/facelets"
                xmlns:h="http://java.sun.com/jsf/html"
                xmlns:f="http://java.sun.com/jsf/core">
    <h:panelGrid columns="1">
        <f:facet name="row">
            <h:commandButton value="template" action="template.xhtml"  />                    
        </f:facet>
    </h:panelGrid>
</ui:composition>

我的问题是:为什么当我尝试打开直接指定template-client.xhtml名称的URL时,我的XML输出包含我的所有源代码,例如:豆的名称,标签等。有没有办法阻止直接访问template-client.xhtml?

1 个答案:

答案 0 :(得分:2)

默认情况下,.xhtml页面未映射到FacesServlet。您必须在web.xml中显式定义url映射。如果没有映射到FacesServlet,只需返回它们而不进行任何处理(因此您会看到facelet代码)。

如果您不希望某人能够直接访问Web应用程序中的资源,您还必须将其移动到WEB-INF文件夹下的某个位置。我通常会将所有模板放在此文件夹下(例如/WEB-INF/templates/)。