2011-06-14 56 views
2

我是JSF和Spring的新手。我正在尝试在JSF中使用Spring Security。我设计了如下的XHTML页面:Spring标签在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标签的注销链接。但是,首先这给出了一个错误,href属性不能包含<。要排除此问题,我删除了a标记,并使用div来测试我是否能够从spring:url标记中获得所需的值。我发现spring:url标签没有被解析,而是显示在生成页面的源代码中。

而不是使用XHTML页面,如果我使用JSP页面taglibs而不是xmlns,一切正常。我无法理解为什么它不能使用XHTML文件。

我的Faces Servlet映射到.jsfspringSecurityFilterChain映射到/*(没有之间的空间)。我试图将springSecurityFilterChain映射到*.jsf,这也无济于事。

回答

1

Facelets是基于XML的视图技术。将标签嵌套为另一个标签的属性是无效的XML。所有<spring:url>有效地不被预先考虑上下文路径,你也可以自己做:

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

的HTML转义是不相关的,因为你没有穿过它的任何参数。

+0

我试过了,但它并没有预先考虑上下文路径。作为解决方法,我删除了前导/(正斜杠)。 – Cracker 2011-06-16 00:31:27

+0

哦,男孩,你说得对。我会更新答案。我很确定它做到了。 – BalusC 2011-06-16 01:11:55