2012-04-17 91 views
71

我得从对象的变量我的JSP页面上:JSTL如果等于字符串标签

<%= ansokanInfo.getPSystem() %>

变量的值是NAT这是正确的,我想申请某些页面元素为此值。如何使用标签了解案例?我试过类似

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

但是上面没有显示任何东西。我应该怎么做?或者,我能不能也用小脚本即

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

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

+1

能否请您详细阐述'getPSystem()'和'ansokanInfo'?你在请求中设置它们还是通过'import'访问它们? – 2014-10-29 05:32:06

+1

IIRC我在请求中设置了它们,解决方案(解决方法)是按照BalusC的说法升级websphere,然后更新的版本可以通过标记调用bean方法。我在问题中使用标准websphere,在jsp和jstl之前可以运行某些版本的方法。请找到[我的其他问题](http://stackoverflow.com/questions/10742174/el-equivalent-of-object-methodparameter-in-was-8)其中BalusC告诉我们,我正在使用一个websphere版本,需要一个新版本可以调用这些方法。 – 2014-10-29 10:10:18

+1

所以,现在你有升级你的应用服务器为8?并且解决方案失败了吗? – 2014-10-29 10:18:52

回答

119

尝试:

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

JSP/SERVET 2.4(我认为这是版本号)不支持方法EL,只支持性能要求。最新的servlet容器支持方法调用(即Tomcat 7)。

+1

我根据Jorn的回答更新了我的答案。给他的帽子提示。 – 2012-04-17 11:57:52

+2

我放弃了JSP(X)。我使用Mustache(https://github.com/samskivert/jmustache)或我自己的模板语言JATL(http://code.google.com/p/jatl/)。 – 2012-04-18 12:12:34

+0

你会怎么做多个字符串?有一个更好的方法比'' – Patience 2015-12-02 21:04:29

31
<c:if test="${ansokanInfo.pSystem eq 'NAT'}"> 
5

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

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

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

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

这通常意味着从上部壳体将所述第一字符为小写,但在(异常)特殊情况下,当有多个字符,并且第一个和第二个字符都是大写字母时,我们将其保留。

因此,“FooBah”变成“fooBah”,“X”变成“x”,但“URL”保持为“URL”。

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

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

命名约定的获取者和设置者很漂亮很多java bean的定义。我想我们需要一些关于变量传递给jsp的更多信息。为了可用于EL,它必须位于某个范围内,例如作为请求或pageContext属性。 EL脚本块创建的局部变量不可用。 – 2012-04-18 08:45:32