问题描述
|
我是JSF和Spring的新手。我正在尝试将Spring Security与JSF一起使用。我设计了一个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
标签添加注销链接。但是,首先这会导致错误,表示“ 2”属性不能包含<。为了解决这个问题,我删除了a
标记并使用div
测试我是否能够从spring:url
标记中获得所需的值。我发现spring:url
标记没有被解析,并按原样显示在所生成页面的源中。
如果我将JSP页面与taglibs而不是xmlns一起使用,则可以使用XHTML页面,而一切正常。我不明白为什么它不能使用XHTML文件。
我的Faces Servlet
映射到.jsf
,而springSecurityFilterChain
映射到/*
(两者之间没有空格)。我尝试将springSecurityFilterChain
映射到*.jsf
,但这也无济于事。
解决方法
Facelets是一种基于XML的视图技术。将标签嵌套为另一个标签的属性是无效的XML。
<spring:url>
所做的全部工作就是在上下文路径之前添加,您也可以自己执行以下操作:
<a href=\"#{request.contextPath}/j_spring_security_logout\">Logout</a>
HTML转义不相关,因为您没有通过它传递任何参数。