JSTL if标记相等的字符串

Nik*_*ntz 85 java websphere jsp jstl jsp-tags

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

<%= ansokanInfo.getPSystem() %>

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

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

但上面没有显示任何内容.我该怎么办?或者我也可以使用scriptlet即

<% if (ansokanInfo.getPSystem().equals("NAT"){ %>
process
<% } %>
Run Code Online (Sandbox Code Playgroud)

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

Ada*_*ent 141

尝试:

<c:if test = "${ansokanInfo.PSystem == 'NAT'}">
Run Code Online (Sandbox Code Playgroud)

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

  • 我放弃了JSP(X).我要么使用Mustache(https://github.com/samskivert/jmustache),要么使用我自己的模板语言JATL(http://code.google.com/p/jatl/). (2认同)

Pha*_*ani 34

<c:if test="${ansokanInfo.pSystem eq 'NAT'}">
Run Code Online (Sandbox Code Playgroud)


Jör*_*ann 16

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

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

因此,"FooBah"变为"fooBah","X"变为"x",但"URL"保持为"URL".

所以在你的情况下,JSTL代码应如下所示,注意大写'P':

<c:if test = "${ansokanInfo.PSystem == 'NAT'}">
Run Code Online (Sandbox Code Playgroud)

  • 具有命名约定的getter和setter几乎就是java bean的定义.我想我们需要更多关于变量传递给jsp的信息.为了可供EL使用,它必须在某个范围内,例如作为request或pageContext属性.由脚本块创建的局部变量将不可用于EL. (2认同)

Joh*_*anB 5

您可以使用scriptlet,但这不是可行的方法.现在,JSP文件中的内联scriplet或JAVA代码被认为是一个坏习惯.

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

<c:if test="${ ansokanInfo.pSystem  == 'NAT'}"> tataa </c:if>
Run Code Online (Sandbox Code Playgroud)