2011-06-14 29 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