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

时间:2011-06-14 20:59:53

标签: jsf-2 spring-security

我是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,这也没有帮助。

1 个答案:

答案 0 :(得分:1)

Facelets是一种基于XML的视图技术。将标记嵌套为另一个标记的属性是无效的XML。所有<spring:url>实际上都是在上下文路径之前,你也可以自己做:

<a href="#{request.contextPath}/j_spring_security_logout">Logout</a>

HTML转义不相关,因为您没有通过它传递任何参数。