2012-04-17 74 views
71

我得從對象的變量我的JSP頁面上:JSTL如果等於字符串標籤

<%= ansokanInfo.getPSystem() %>

變量的值是NAT這是正確的,我想申請某些頁面元素爲此值。如何使用標籤瞭解案例?我試過類似

<c:if test = "${ansokanInfo.getPSystem() == 'NAT'}">  
    process 
</c:if> 

但是上面沒有顯示任何東西。我應該怎麼做?或者,我能不能也用小腳本即

<% if (ansokanInfo.getPSystem().equals("NAT"){ %> 
process 
<% } %> 

感謝您的任何答覆或評論。

+1

能否請您詳細闡述'getPSystem()'和'ansokanInfo'?你在請求中設置它們還是通過'import'訪問它們? – 2014-10-29 05:32:06

+1

IIRC我在請求中設置了它們,解決方案(解決方法)是按照BalusC的說法升級websphere,然後更新的版本可以通過標記調用bean方法。我在問題中使用標準websphere,在jsp和jstl之前可以運行某些版本的方法。請找到[我的其他問題](http://stackoverflow.com/questions/10742174/el-equivalent-of-object-methodparameter-in-was-8)其中BalusC告訴我們,我正在使用一個websphere版本,需要一個新版本可以調用這些方法。 – 2014-10-29 10:10:18

+1

所以,現在你有升級你的應用服務器爲8?並且解決方案失敗了嗎? – 2014-10-29 10:18:52

回答

119

嘗試:

<c:if test = "${ansokanInfo.PSystem == 'NAT'}"> 

JSP/SERVET 2.4(我認爲這是版本號)不支持方法EL,只支持性能要求。最新的servlet容器支持方法調用(即Tomcat 7)。

+1

我根據Jorn的回答更新了我的答案。給他的帽子提示。 – 2012-04-17 11:57:52

+2

我放棄了JSP(X)。我使用Mustache(https://github.com/samskivert/jmustache)或我自己的模板語言JATL(http://code.google.com/p/jatl/)。 – 2012-04-18 12:12:34

+0

你會怎麼做多個字符串?有一個更好的方法比'' – Patience 2015-12-02 21:04:29

31
<c:if test="${ansokanInfo.pSystem eq 'NAT'}"> 
5

您可以使用scriptlets,但是,這不是要走的路。現在在您的JSP文件中內聯腳本或JAVA代碼被認爲是一個壞習慣。

你應該多閱讀一下JSTL。如果ansokanInfo對象位於您的請求或會話範圍內,則打印對象(toString()方法),如下所示:$ {ansokanInfo}可以爲您提供一些基本信息。 $ {ansokanInfo.pSystem}應該調用對象getter方法。如果這一切正常,你可以使用這個:

<c:if test="${ ansokanInfo.pSystem == 'NAT'}"> tataa </c:if> 
16

我認爲其他答案錯過了一個關於要在EL表達式中使用的屬性名稱的重要細節。用於從所述方法名屬性名稱轉換規則在'Introspector.decpitalize`指定它是Java豆標準的一部分:

這通常意味着從上部殼體將所述第一字符爲小寫,但在(異常)特殊情況下,當有多個字符,並且第一個和第二個字符都是大寫字母時,我們將其保留。

因此,「FooBah」變成「fooBah」,「X」變成「x」,但「URL」保持爲「URL」。

所以你的情況的JSTL代碼應該如下所示,注意是大寫的 'P':

<c:if test = "${ansokanInfo.PSystem == 'NAT'}"> 
+2

命名約定的獲取者和設置者很漂亮很多java bean的定義。我想我們需要一些關於變量傳遞給jsp的更多信息。爲了可用於EL,它必須位於某個範圍內,例如作爲請求或pageContext屬性。 EL腳本塊創建的局部變量不可用。 – 2012-04-18 08:45:32