ChatGPT解决这个技术问题 Extra ChatGPT

JSTL if tag for equal strings

I've got a variable from an object on my JSP page:

<%= ansokanInfo.getPSystem() %>

The value of the variable is NAT which is correct and I want to apply certain page elements for this value. How do I use a tag to know the case? I tried something like

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

But the above doesn't display anything. How should I do it? Or can I just as well use scriptlets i.e.

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

Thanks for any answer or comment.

Can you please elaborate getPSystem() and ansokanInfo ? do you set them in the request or accessing them through import ?
IIRC I was setting them in the request and the solution (workaround) was to upgrade websphere as told by BalusC and then a newer version can invoke bean methods by tags. I was using standard websphere in the question and some version before jsp and jstl could run methods. Please find my other question where BalusC tells us that I was using a websphere version that needed a newer version to be able to invoke the methods.
So now have you upgraded your app server to was 8 ? and does that solution fail ?
@SanKrish I don't use JSP now. I hope it works for you and that it was updated for newer versions of the app server.

N
Niklas Rosencrantz

Try:

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

JSP/Servlet 2.4 (I think that's the version number) doesn't support method calls in EL and only support properties. The latest servlet containers do support method calls (ie Tomcat 7).


I updated my answer based on Jorn's answer. Tip of the hat to him.
I have given up on JSP(X). I either use Mustache (github.com/samskivert/jmustache) or my own templating language JATL (code.google.com/p/jatl).
How would you do multiple strings? There's got to be a better way than <c:if test = "${ansokanInfo.PSystem == 'NAT' || ansokanInfo.PSystem == 'CAT'}">
P
Phani
<c:if test="${ansokanInfo.pSystem eq 'NAT'}">

C
Community

I think the other answers miss one important detail regarding the property name to use in the EL expression. The rules for converting from the method names to property names are specified in 'Introspector.decpitalize` which is part of the java bean standard:

This normally means converting the first character from upper case to lower case, but in the (unusual) special case when there is more than one character and both the first and second characters are upper case, we leave it alone. Thus "FooBah" becomes "fooBah" and "X" becomes "x", but "URL" stays as "URL".

So in your case the JSTL code should look like the following, note the capital 'P':

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

Getters and setters with a naming convention are pretty much the definition of a java bean. I guess we need some more information regarding where the variable is passed to the jsp. In order to be available to EL it has to be in some scope, for example as a request or pageContext attribute. A local variable created by a script block would not be available to EL.
B
Bombe

You can use scriptlets, however, this is not the way to go. Nowdays inline scriplets or JAVA code in your JSP files is considered a bad habit.

You should read up on JSTL a bit more. If the ansokanInfo object is in your request or session scope, printing the object (toString() method) like this: ${ansokanInfo} can give you some base information. ${ansokanInfo.pSystem} should call the object getter method. If this all works, you can use this:

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