Spring标记在JSF xhtml文件中不起作用

问题描述

| 我是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转义不相关,因为您没有通过它传递任何参数。