我是JSF和Spring的新手。我正在尝试使用JSF的Spring Security。我设计了一个XHTML页面如下:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:spring="http://www.springframework.org/tags"
xmlns:form="http://www.springframework.org/tags/form">
<head>
<title>JSF Test</title>
</head>
<body>
<f:view>
<p>This page should be authenticated!</p>
<a href="<spring:url value="/j_spring_security_logout" htmlEscape="true" />">Logout</a>
<div>Test: <spring:url value="/j_spring_security_logout" htmlEscape="true" /></div>
</f:view>
</body>
</html>
我正在尝试使用spring:url
标记添加注销链接。但是,首先这会给出href
属性不能包含的错误&lt;。要解决此问题,我删除了a
标记,并使用div
来测试我是否能够从spring:url
标记中获取所需的值。我发现spring:url
标记没有被解析,并且显示在生成页面的源代码中。
如果我使用带有taglib而不是xmlns的JSP页面,而不是使用XHTML页面,一切正常。我无法理解它为什么不能使用XHTML文件。
我的Faces Servlet
已映射到.jsf
,而springSecurityFilterChain
已映射到/
*
(中间没有空格) 。我尝试将springSecurityFilterChain
映射到*.jsf
,这也没有帮助。
答案 0 :(得分:1)
Facelets是一种基于XML的视图技术。将标记嵌套为另一个标记的属性是无效的XML。所有<spring:url>
实际上都是在上下文路径之前,你也可以自己做:
<a href="#{request.contextPath}/j_spring_security_logout">Logout</a>
HTML转义不相关,因为您没有通过它传递任何参数。