JSTL jika tag untuk string yang sama

91

Saya mendapat variabel dari objek di halaman JSP saya:

<%= ansokanInfo.getPSystem() %>

Nilai variabelnya adalah NAT yang benar dan saya ingin menerapkan elemen halaman tertentu untuk nilai ini. Bagaimana cara menggunakan tag untuk mengetahui kasusnya? Saya mencoba sesuatu seperti

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

Tapi di atas tidak menampilkan apapun. Bagaimana saya harus melakukannya? Atau bisakah saya menggunakan scriptlets yaitu

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

Terima kasih atas jawaban atau komentar apa pun.

Niklas R.
sumber
1
Bisakah Anda menjelaskan getPSystem()dan ansokanInfo? apakah Anda menetapkannya dalam permintaan atau mengaksesnya import?
Santhosh
1
IIRC Saya mengaturnya dalam permintaan dan solusinya (solusi) adalah meningkatkan websphere seperti yang diceritakan oleh BalusC dan kemudian versi yang lebih baru dapat memanggil metode kacang dengan tag. Saya menggunakan websphere standar dalam pertanyaan dan beberapa versi sebelum jsp dan jstl dapat menjalankan metode. Temukan pertanyaan saya yang lain di mana BalusC memberi tahu kami bahwa saya menggunakan versi websphere yang membutuhkan versi yang lebih baru untuk dapat menjalankan metode tersebut.
Niklas R.
1
Jadi sekarang sudahkah Anda meningkatkan server aplikasi Anda menjadi 8? dan apakah solusi itu gagal?
Santhosh
@SanKrish Saya tidak menggunakan JSP sekarang. Saya harap ini berfungsi untuk Anda dan telah diperbarui untuk versi server aplikasi yang lebih baru.
Niklas R.

Jawaban:

147

Mencoba:

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

JSP / Servlet 2.4 (saya pikir itu nomor versi) tidak mendukung panggilan metode di EL dan hanya mendukung properti. Kontainer servlet terbaru melakukan panggilan metode dukungan (yaitu Tomcat 7).

Adam Gent
sumber
1
Saya memperbarui jawaban saya berdasarkan jawaban Jorn. Ujung topi untuknya.
Adam Gent
3
Saya sudah menyerah pada JSP (X). Saya menggunakan Moustache ( github.com/samskivert/jmustache ) atau bahasa template saya sendiri JATL ( code.google.com/p/jatl ).
Adam Gent
1
Bagaimana Anda melakukan banyak string? Pasti ada cara yang lebih baik daripada<c:if test = "${ansokanInfo.PSystem == 'NAT' || ansokanInfo.PSystem == 'CAT'}">
Dillon
37
<c:if test="${ansokanInfo.pSystem eq 'NAT'}">
Phani
sumber
16

Saya pikir jawaban lain kehilangan satu detail penting terkait nama properti yang akan digunakan dalam ekspresi EL. Aturan untuk mengubah dari nama metode menjadi nama properti ditentukan di 'Introspector.decpitalize` yang merupakan bagian dari standar kacang java:

Ini biasanya berarti mengonversi karakter pertama dari huruf besar ke huruf kecil, tetapi dalam kasus khusus (tidak biasa) ketika ada lebih dari satu karakter dan karakter pertama dan kedua adalah huruf besar, kita biarkan saja.

Jadi "FooBah" menjadi "fooBah" dan "X" menjadi "x", tetapi "URL" tetap sebagai "URL".

Jadi dalam kasus Anda kode JSTL akan terlihat seperti berikut, perhatikan huruf kapital 'P':

<c:if test = "${ansokanInfo.PSystem == 'NAT'}">
Jörn Horstmann
sumber
2
Getter dan setter dengan konvensi penamaan adalah definisi dari java bean. Saya kira kita memerlukan informasi lebih lanjut tentang di mana variabel diteruskan ke jsp. Agar tersedia untuk EL, itu harus dalam beberapa cakupan, misalnya sebagai permintaan atau atribut pageContext. Variabel lokal yang dibuat oleh blok skrip tidak akan tersedia untuk EL.
Jörn Horstmann
5

Anda dapat menggunakan scriptlet, namun ini bukanlah cara yang tepat. Sekarang skrip inline atau kode JAVA dalam file JSP Anda dianggap sebagai kebiasaan buruk.

Anda harus membaca lebih lanjut tentang JSTL. Jika objek ansokanInfo ada dalam permintaan atau cakupan sesi Anda, mencetak objek (metode toString ()) seperti ini: $ {ansokanInfo} dapat memberi Anda beberapa informasi dasar. $ {ansokanInfo.pSystem} harus memanggil metode pengambil objek. Jika ini semua berhasil, Anda dapat menggunakan ini:

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