JSTL ถ้าแท็กสำหรับสตริงที่เท่ากัน


91

ฉันมีตัวแปรจากวัตถุในหน้า JSP ของฉัน:

<%= ansokanInfo.getPSystem() %>

ค่าของตัวแปรคือ NAT ซึ่งถูกต้องและฉันต้องการใช้องค์ประกอบของหน้าบางอย่างสำหรับค่านี้ ฉันจะใช้แท็กเพื่อทราบเคสได้อย่างไร? ฉันลองสิ่งที่ชอบ

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

แต่ด้านบนไม่แสดงอะไรเลย ควรทำอย่างไร? หรือฉันสามารถใช้ scriptlets เช่น

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

ขอบคุณสำหรับคำตอบหรือความคิดเห็น


1
กรุณาอธิบายgetPSystem()และansokanInfo? คุณตั้งค่าในคำขอหรือเข้าถึงผ่านimport?
Santhosh

1
IIRC ฉันตั้งค่าไว้ในคำขอและวิธีแก้ปัญหา (วิธีแก้ปัญหา) คือการอัปเกรดเว็บสเฟียร์ตามที่ BalusC บอกจากนั้นเวอร์ชันที่ใหม่กว่าสามารถเรียกใช้เมธอด bean โดยใช้แท็ก ฉันใช้เว็บสเฟียร์มาตรฐานในคำถามและบางเวอร์ชันก่อนที่ jsp และ jstl จะสามารถเรียกใช้เมธอดได้ โปรดค้นหาคำถามอื่น ๆ ของฉันที่ BalusC บอกเราว่าฉันกำลังใช้เวอร์ชันเว็บสเฟียร์ที่ต้องการเวอร์ชันใหม่กว่าเพื่อให้สามารถเรียกใช้วิธีการนี้ได้
Niklas R.

1
ตอนนี้คุณได้อัปเกรดเซิร์ฟเวอร์แอปของคุณเป็น 8 แล้วหรือยัง? และการแก้ปัญหานั้นล้มเหลวหรือไม่?
Santhosh

@SanKrish ตอนนี้ไม่ได้ใช้ JSP แล้ว ฉันหวังว่ามันจะเหมาะกับคุณและได้รับการอัปเดตสำหรับเซิร์ฟเวอร์แอปเวอร์ชันใหม่กว่า
Niklas R

คำตอบ:


148

ลอง:

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

JSP / Servlet 2.4 (ฉันคิดว่านั่นคือหมายเลขเวอร์ชัน) ไม่รองรับการเรียกเมธอดใน EL และรองรับเฉพาะคุณสมบัติเท่านั้น คอนเทนเนอร์ servlet ล่าสุดรองรับการเรียกใช้เมธอด (เช่น Tomcat 7)


1
ฉันอัปเดตคำตอบตามคำตอบของ Jorn ปลายหมวกให้เขา
Adam Gent

3
ฉันยอมแพ้กับ JSP (X) แล้ว ฉันใช้ Moustache ( github.com/samskivert/jmustache ) หรือ JATL ภาษาเทมเพลตของฉันเอง ( code.google.com/p/jatl )
Adam Gent

1
คุณจะทำหลายสตริงได้อย่างไร? จะต้องมีวิธีที่ดีกว่า<c:if test = "${ansokanInfo.PSystem == 'NAT' || ansokanInfo.PSystem == 'CAT'}">
Dillon


16

ฉันคิดว่าคำตอบอื่น ๆ ขาดรายละเอียดที่สำคัญอย่างหนึ่งเกี่ยวกับชื่อคุณสมบัติที่จะใช้ในนิพจน์ EL กฎสำหรับการแปลงจากชื่อเมธอดเป็นชื่อคุณสมบัติระบุไว้ใน"Introspector.decpitalize"ซึ่งเป็นส่วนหนึ่งของมาตรฐาน java bean:

โดยปกติหมายถึงการแปลงอักขระตัวแรกจากตัวพิมพ์ใหญ่เป็นตัวพิมพ์เล็ก แต่ในกรณีพิเศษ (ผิดปกติ) เมื่อมีอักขระมากกว่าหนึ่งตัวและทั้งอักขระตัวแรกและตัวที่สองเป็นตัวพิมพ์ใหญ่เราจะปล่อยให้มันอยู่คนเดียว

ดังนั้น "FooBah" จึงกลายเป็น "fooBah" และ "X" กลายเป็น "x" แต่ "URL" ยังคงเป็น "URL"

ดังนั้นในกรณีของคุณรหัส JSTL ควรมีลักษณะดังนี้โปรดสังเกตตัวพิมพ์ใหญ่ 'P':

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

2
ตัวรับและตัวตั้งที่มีหลักการตั้งชื่อเป็นคำจำกัดความของ java bean ฉันเดาว่าเราต้องการข้อมูลเพิ่มเติมเกี่ยวกับตำแหน่งที่ตัวแปรถูกส่งไปยัง jsp เพื่อให้ EL พร้อมใช้งานจะต้องอยู่ในขอบเขตบางอย่างเช่นแอตทริบิวต์ request หรือ pageContext ตัวแปรโลคัลที่สร้างโดยบล็อกสคริปต์จะไม่สามารถใช้ได้กับ EL
Jörn Horstmann

5

คุณสามารถใช้ scriptlets ได้ แต่นี่ไม่ใช่วิธีที่จะไป ปัจจุบัน scriplets แบบอินไลน์หรือโค้ด JAVA ในไฟล์ JSP ของคุณถือเป็นนิสัยที่ไม่ดี

คุณควรอ่านข้อมูลเกี่ยวกับ JSTL ให้มากขึ้น หากอ็อบเจ็กต์ ansokanInfo อยู่ในขอบเขตคำขอหรือเซสชันของคุณการพิมพ์อ็อบเจ็กต์ (toString () method) เช่นนี้ $ {ansokanInfo} สามารถให้ข้อมูลพื้นฐานแก่คุณได้ $ {ansokanInfo.pSystem} ควรเรียกใช้ object getter method หากทุกอย่างได้ผลคุณสามารถใช้สิ่งนี้:

<c:if test="${ ansokanInfo.pSystem  == 'NAT'}"> tataa </c:if>
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.