我有一个问题。在此示例中,我尝试制作一个包含模板客户端代码的模板。这是一个代码。
这是 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 输出,例如beans的名称、标签等。有没有办法阻止直接访问template-client.xhtml?
最佳答案
默认情况下,.xhtml
页面不会映射到 FacesServlet 。您必须在 web.xml 中显式定义 url 映射。当未映射到 FacesServlet 时,它们只是返回而不进行任何处理(因此您会看到 Facelet 代码)。
如果您不希望其他人能够直接访问 Web 应用程序中的资源,您还必须将其移动到 WEB-INF
文件夹下的某个位置。我通常将所有模板放在这个文件夹下(例如 /WEB-INF/templates/
)。
关于JSF。限制直接访问模板客户端页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21908661/