JSTL if 标记相等的字符串

Posted

技术标签:

【中文标题】JSTL if 标记相等的字符串【英文标题】:JSTL if tag for equal strings 【发布时间】:2012-04-28 17:13:39 【问题描述】:

我的 JSP 页面上的对象有一个变量:

<%= ansokanInfo.getPSystem() %>

变量的值是正确的 NAT,我想为这个值应用某些页面元素。如何使用标签来了解案例?我尝试了类似的东西

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

但上面没有显示任何内容。我该怎么做?或者我也可以使用脚本,即

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

感谢您的任何回答或评论。

【问题讨论】:

您能详细说明getPSystem()ansokanInfo 吗?您是在请求中设置它们还是通过import 访问它们? IIRC 我在请求中设置它们,解决方案(解决方法)是按照 BalusC 的指示升级 websphere,然后更新的版本可以通过标签调用 bean 方法。我在问题中使用标准 websphere 以及在 jsp 和 jstl 可以运行方法之前的某个版本。请找到my other question,BalusC 告诉我们,我使用的 websphere 版本需要更新的版本才能调用这些方法。 那么现在你的应用服务器升​​级到8了吗?该解决方案是否失败? @SanKrish 我现在不使用 JSP。我希望它对您有用,并且它已针对较新版本的应用服务器进行了更新。 【参考方案1】:

试试:

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

JSP/Servlet 2.4(我认为是版本号)不支持 EL 中的方法调用,仅支持属性。最新的 servlet 容器确实支持方法调用(即 Tomcat 7)。

【讨论】:

我根据 Jorn 的回答更新了我的回答。向他致敬。 我已经放弃了 JSP(X)。我要么使用 Mustache (github.com/samskivert/jmustache),要么使用我自己的模板语言 JATL (code.google.com/p/jatl)。 如何处理多个字符串?一定有比&lt;c:if test = "$ansokanInfo.PSystem == 'NAT' || ansokanInfo.PSystem == 'CAT'"&gt;更好的方法【参考方案2】:
<c:if test="$ansokanInfo.pSystem eq 'NAT'">

【讨论】:

【参考方案3】:

我认为其他答案错过了有关在 EL 表达式中使用的属性名称的一个重要细节。从方法名称转换为属性名称的规则在 'Introspector.decpitalize` 中指定,它是 java bean 标准的一部分:

这通常意味着将第一个字符从大写转换为小写,但在(不寻常的)特殊情况下,当有多个字符并且第一个和第二个字符都是大写时,我们不理会它。

因此“FooBah”变为“fooBah”,“X”变为“x”,但“URL”仍为“URL”。

因此,在您的情况下,JSTL 代码应如下所示,注意大写“P”:

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

【讨论】:

具有命名约定的getter和setter几乎是java bean的定义。我想我们需要更多关于变量传递给jsp的信息。为了对 EL 可用,它必须在某个范围内,例如作为请求或 pageContext 属性。由脚本块创建的局部变量对 EL 不可用。【参考方案4】:

您可以使用脚本,但是,这不是要走的路。现在 JSP 文件中的内联脚本或 JAVA 代码被认为是一个坏习惯。

您应该多阅读一下 JSTL。如果 ansokanInfo 对象在您的请求或会话范围内,则像这样打印对象(toString() 方法): $ansokanInfo 可以为您提供一些基本信息。 $ansokanInfo.pSystem 应该调用对象的 getter 方法。如果这一切正常,你可以使用这个:

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

【讨论】:

以上是关于JSTL if 标记相等的字符串的主要内容,如果未能解决你的问题,请参考以下文章

JSTL标签

JSTL_XML标记库

EL/JSTL-jsp页面更简单的输出方式

mybatis里if标签判断字符串相等不相等的有关问题

mybatis里if标签判断字符串相等不相等的问题

javax.el.PropertyNotFoundException:在 JSP 中使用 JSTL [重复]