2013-10-14 64 views
2

文件我用JSF 2一個用戶界面:包括如果沒有找到

工作對於頁面的一個不拋出一個錯誤,它需要包括的線沿線的一個頁面:

domain/subdomain/cms/[userspecified_code].html 

我用ui:include標籤來獲取這個文件。它適用於存在的文件,但對於不存在的文件,它引發FileNotFoundException,將整個頁面渲染爲錯誤頁面。

是否有替代解決方案ui:include標記跳過/記錄文件錯誤,並只顯示一個空白部分?這樣可以最大限度地減少對用戶的干擾(包含的文件只是頁面的一小部分,如果沒有匹配的文件,我寧願不顯示任何內容)。 我能想到的一種方法是加載ajax部分,所以如果出現錯誤,它將是一個JavaScript錯誤而不是服務器錯誤,但是有沒有更優雅/更簡單的方法呢?

在這裏,XHTML,我目前有:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" 
    xmlns:ui="http://java.sun.com/jsf/facelets" 
    xmlns:h="http://java.sun.com/jsf/html"> 

Lots of other html.... 

<ui:include src="domain/subdomain/cms/#{userspecified_code}.html"/> 

Lots of other html.... 

</html> 

編輯

嗨,大家好,感謝所有的答案。我正在尋找一種解決方案,不需要我自己添加所有的文件檢查邏輯。

+0

感謝您的答案到目前爲止,我正在尋找一個在那裏它與自動完成我不得不編寫代碼邏輯來檢查我自己。 – JackDev

回答

-1

您可以在面板(primefaces)中編寫ui:include
只有當您的fileName不爲空時,纔會呈現(呈現爲面板的屬性)。

+0

有些事情是這樣的:<!DOCTYPE html PUBLIC「 - // W3C // DTD XHTML 1.0 Transitional // EN」「http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd」> 很多其他html .... 許多其他的HTML .... –

+0

文件名不是空的並不能保證文件用那個名字存在 – Vrushank

+0

如果文件不存在,這也會失敗。由於JSF UIComponents和JSTL標籤的週期不同,''ui:include' [總是在之前評估](http://stackoverflow.com/a/14394963/1199132)'render'屬性。'c:if'應該用來代替它。 –

4

在呈現頁面之前,您可以在服務器端使用的解決方法是checking if destination files exist。假如你正在使用EL-2.2 which allows parameters的觀點方法,你可以做這樣的事情:

public boolean fileExists(String fileName) 
    File file = new File(servletContext.getRealPath("domain/subdomain/cms/"+fileName+".html")); 
    return file.exists(); 
} 

而且使用JSTL條件標記動態包含目標頁面:

<c:if test="#{bean.fileExists(userspecified_code)}"> 
    <ui:include src="domain/subdomain/cms/#{userspecified_code}.html" /> 
</c:if> 

此外,爲了避免重複代碼,你可以使用fn:join標籤只有一次評價道:

<c:if test="#{bean.fileExists(userspecified_code)}"> 
    <ui:include src="#{fn:join('domain/subdomain/cms/',fn:join(userspecified_code,'.html')}" /> 
</c:if> 
+0

看起來像ui:include會拋出FileNofFound,事件如果c:if validate to false ...:/ –

相關問題