2013-01-21 20 views
9

在JSF中,我可以將Faces Servlet映射到各種URL模式。例如。到*.xhtml將JSF .xhtml文件映射到無擴展

但是我想要的是將Faces Servlet映射到擴展名。意思是,如果我在我的網頁根目錄中有一個頁面customers.xhtml,我想請求這個使用http://example.com/customers

我看了一下How do I configure JSF url mappings without file extensions?這個問題,這在某種程度上是有效的,但它需要我映射每個文件(每個文件都有自己的錯誤)。

如何將我所有的.xhtml文件一次性映射到Faces Servlet,而無需單獨映射它們?

回答

9

這不可能使用標準方法。你基本上需要自制一個servlet filter,它被映射到/*上,並檢查當前請求URL是否是一個無擴展請求URL,如果是,那麼在附加了文件擴展名的URL上執行RequestDispatcher#forward()調用(你知道,轉發不會修改當前的請求URL作爲重定向會做)。你還需要一個定製view handler產生所需的擴展名的URL爲JSF <h:form><h:link>

或者,你可以使用PrettyFaces或OmniFaces' FacesViews,這樣你就不需要推倒重來。在FacesViews展示頁面的底部,你可以找到一些直接鏈接到源代碼的簡單鏈接,這可能會給你一些啓發。

+0

我一直在網上搜索你正在說的話。你碰巧知道是否計劃將來的JSF版本會考慮這種功能? –

+1

@João:有[具體計劃](https://java.net/jira/browse/JAVASERVERFACES_SPEC_PUBLIC-1260)將FacesViews集成到標準JSF中。但是很多依賴於Servlet 4.0 API和可用的時間/資源。 – BalusC