2013-10-09 25 views
1

我們知道,腳本變量狀態是真實的。爲什麼我不能使用if-else語句一個scriptlet表達式中,而三元運算工作正常

爲什麼這個scriptlet表達式是錯誤的?翻譯後的代碼如何進入_jspService方法?

<%= 
if(state) { 
    "yes"; 
} else { 
    "no"; 
} 
%> 

這是正確的

<%= state ? "yes" : "no" %> 

因爲返回一個值,它會顯示成_jspService爲

public void _jspService(...){ 
    out.println("yes"); 
} 
+0

,因爲它不是有效的語法第一個也不會轉化爲在'_jspService'方法什麼。它不會編譯。 –

回答

2

if/else版本是從三元運算符語法不同。它不會「返回」任何東西。

爲了使類似的東西的工作,你就需要做到這一點

<% 
    if (state) { 
     out.print("yes"); 
    } else { 
     out.print("no"); 
    } 
%> 

如果報表需要的東西。他們不能只有一個字符串作爲他們唯一的陳述。三元運算符選擇並返回選定的值。

<%= %>語法的scriptlet塊具有爲單個表達式產生的值輸出。基本上他們必須評估一些東西。即使if語句在語法上有效,它仍然不會返回值。

+0

我知道這是正確的scriptlet,但問題是。爲什麼表達式錯誤<%= ... %> 是否因爲我們可以在裏面使用if/else? – Joe

+0

查看已更新的答案。 –

0

羅埃爾德奈斯說:

的JSP表達式<%= ...%>被放置在的out.print()

所以<%=狀態內? 「yes」:「no」%>轉換爲out.println(狀態? 「yes」:「no」);編譯時沒有任何問題。但是如果if語句使用 ,那麼生成的代碼將不能編譯。這也是爲什麼 在jsp表達式中不允許分號的原因。

相關問題