JSTL if etiketi eşit dizeler için


91

JSP sayfamdaki bir nesneden bir değişken var:

<%= ansokanInfo.getPSystem() %>

Değişkenin değeri, doğru olan NAT ve bu değer için belirli sayfa öğelerini uygulamak istiyorum. Vakayı bilmek için bir etiketi nasıl kullanırım? Gibi bir şey denedim

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

Ancak yukarıdakiler hiçbir şey göstermiyor. Nasıl yapmalıyım Ya da komut dizilerini de kullanabilir miyim?

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

Herhangi bir cevap veya yorum için teşekkürler.


1
Eğer ayrıntılı misiniz getPSystem()ve ansokanInfo? Bunları istekte mi ayarlıyorsunuz yoksa bunlara erişiyor importmusunuz?
Santhosh

1
IIRC, bunları istekte ayarlıyordum ve çözüm (geçici çözüm), BalusC tarafından söylendiği gibi websphere'i yükseltmekti ve ardından daha yeni bir sürüm, etiketlere göre fasulye yöntemlerini çağırabilir. Soruda standart websphere kullanıyordum ve jsp ve jstl'nin yöntemleri çalıştırabilmesinden önceki bazı sürümler. Lütfen BalusC'nin yöntemleri çalıştırabilmek için daha yeni bir sürüme ihtiyaç duyan bir websphere sürümü kullandığımı söylediği diğer sorumu bulun .
Niklas R.

1
Peki şimdi uygulama sunucunuzu 8'e yükselttiniz mi? ve bu çözüm başarısız mı?
Santhosh

@SanKrish Şu anda JSP kullanmıyorum. Umarım sizin için çalışır ve uygulama sunucusunun daha yeni sürümleri için güncellendi.
Niklas R.

Yanıtlar:


147

Deneyin:

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

JSP / Servlet 2.4 (bunun sürüm numarası olduğunu düşünüyorum) EL'de yöntem çağrılarını desteklemiyor ve yalnızca özellikleri destekliyor. En son sunucu uygulaması kapsayıcıları yöntem çağrılarını destekler (yani Tomcat 7).


1
Cevabımı Jorn'un cevabına göre güncelledim. Şapkanın ucu ona.
Adam Gent

3
JSP (X) 'den vazgeçtim. Bıyık ( github.com/samskivert/jmustache ) veya kendi şablon dilim JATL ( code.google.com/p/jatl ) kullanıyorum.
Adam Gent

1
Birden çok dizeyi nasıl yaparsınız? Bundan daha iyi bir yol olmalı<c:if test = "${ansokanInfo.PSystem == 'NAT' || ansokanInfo.PSystem == 'CAT'}">
Dillon

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

16

Bence diğer yanıtlarda EL ifadesinde kullanılacak mülk adıyla ilgili önemli bir ayrıntı eksik. Yöntem adlarından özellik adlarına dönüştürme kuralları , java bean standardının bir parçası olan 'Introspector.decpitalize'de belirtilmiştir :

Bu normalde ilk karakteri büyük harften küçük harfe dönüştürmek anlamına gelir, ancak (alışılmadık) özel durumda birden fazla karakter olduğunda ve hem birinci hem de ikinci karakterler büyük harf olduğunda, onu yalnız bırakıyoruz.

Böylece "FooBah", "fooBah" olur ve "X", "x" olur, ancak "URL", "URL" olarak kalır.

Bu nedenle, sizin durumunuzda JSTL kodu aşağıdaki gibi görünmelidir, büyük 'P'yi not edin:

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

2
Adlandırma kuralına sahip alıcılar ve belirleyiciler, hemen hemen bir java fasulyesinin tanımıdır. Sanırım değişkenin jsp'ye nereye aktarıldığı konusunda biraz daha bilgiye ihtiyacımız var. EL tarafından kullanılabilir olması için, örneğin bir request veya pageContext özelliği olarak bir kapsamda olması gerekir. Bir betik bloğu tarafından oluşturulan yerel bir değişken EL için mevcut olmayacaktır.
Jörn Horstmann

5

Senaryoları kullanabilirsin, ancak, yapılacak yol bu değil. Nowdays inline scriptletler veya JSP dosyalarınızdaki JAVA kodu kötü bir alışkanlık olarak kabul edilir.

JSTL'de biraz daha okumalısın. AnsokanInfo nesnesi isteğiniz veya oturum kapsamınızdaysa, nesneyi (toString () yöntemi) şu şekilde yazdırmak: $ {ansokanInfo} size bazı temel bilgiler verebilir. $ {ansokanInfo.pSystem}, nesne alıcı yöntemini çağırmalıdır. Bunların hepsi işe yararsa, bunu kullanabilirsiniz:

<c:if test="${ ansokanInfo.pSystem  == 'NAT'}"> tataa </c:if>
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.