2013-02-10 59 views
2

在Java統一表達式語言有EL語法兩種基本類型:

${expression for immediate evaluation} 
#{expression for deferred evaluation} 

我理解這兩個在JaveServer的區別面孔:JSF有不同的生命週期之感,並立即表達式總是在頁面呈現時評估,而延遲表達式可以在頁面呈現,回發或兩者評估。

但是,我對JavaServer Pages的區別並不清楚。據我所知,JSP沒有JSF所具有的生命週期意義。事實上,我有些驚訝地發現,在JSP中,延遲語法甚至是合法的。不過,現在我知道這是因爲向後兼容性<jsp-config>設置是在部署描述符可用來禁用預JUEL JSP,它們使用的語法用於其他目的遞延語法檢測:

<deferred-syntax-allowed-as-literal> 

所以,問題是,有什麼區別?顯然,延遲語法在JSP中並不意味着它在JSF中的意思完全相同,但我無法在任何地方找到描述如何使用JSP的延遲語法的任何文檔。

它們只是JSP中的同義詞嗎?

回答

2

我發現這個從其他論壇,我希望它可以幫助。

查看JSP2.1規範的前言部分。 延遲表達式僅適用於您已指定該屬性被延遲的自定義標記。 大多數情況下,我不打擾他們。

基本上 如果您在模板文本中使用#{} deferredSyntax,它會觸發一個翻譯錯誤(他們是沒有意義的標籤屬性外)

如果使用#{} deferredSyntax在標籤屬性它依賴於taglib支持的JSP版本的tld聲明。 - 支持JSP版本< 2.1 ==視爲文字 - 支持JSP版本> = 2.1:視爲延遲屬性 - 只要它被標記爲這樣。

您可以設置頁面屬性:

<%@page deferredSyntaxAllowedAsLiteral="true"%> 
+0

謝謝。這確實有幫助。我之前沒有看到''聲明中''的''和''選項。然而,這個文件並不是非常明確。很顯然,它的工作方式與JSF中的不同(在JSP中沒有回傳)。這裏的「延期」是否意味着「只要寫標籤的開發者決定評估它,或者可能永遠不會?」 – 2013-02-11 05:27:40

+0

另外,您可以將鏈接發佈到您從其他論壇收集的鏈接嗎?謝謝。 – 2013-02-11 05:28:43

+0

我從這裏得到了這些信息。 http://www.coderanch.com/t/590264/JSP/java/JSP-Unified-EL – blitzen12 2013-02-11 06:28:53