【问题标题】:JSP Core tag failing when using equalsIgnoreCase inside scriptlet在 scriptlet 中使用 equalsIgnoreCase 时 JSP Core 标记失败
【发布时间】:2012-12-19 12:54:47
【问题描述】:

这可能是显而易见的,但我无法弄清楚。

为什么

<c:if test="<%= (aString!= null) && (!aString.equalsIgnoreCase(""))%>">

一直失败

<c:if test="<%=(aString!= null) && (aString.trim().length() > 0)%>">

工作正常吗? 这些小脚本在 c:if 之外工作得很好,所以我想知道当我把它放在核心标签中时出了什么问题。 例外就像

JSPG0055E: 无法从名称 [] 值 [))%] 创建 xml 属性 错误代码:500

【问题讨论】:

  • 我什至不明白你在做什么; JSTL 测试中的字符串脚本?你不能随意混合和匹配任何你想要的东西(即使你可以,你也不应该)。您认为test 属性中的内容是什么?
  • 知道了,戴夫。赞成。事实是我看到了太多这样的代码,以至于我开始编写类似的代码。我已将实现更改为 .

标签: java jstl jsp-tags


【解决方案1】:

特定错误是由这些双引号引起的。他们过早地结束了test 属性的值。

但是,所有这些都不是正确的方法。事实上,将“oldschool” scriptlets 与“modern” taglibs 混合使用是错误的。根本不支持这种语法。您不能在 taglib 属性中使用 scriptlets。你应该在 taglib 属性中使用 EL——那些${} 的东西。

假设 aString 被预先放置为页面、请求、会话或应用程序范围的属性,例如 as

request.setAttribute("aString", aString);

那么这应该是为了检查aString是否不为空也不为空:

<c:if test="${not empty aString}">

另见:

【讨论】:

  • 知道了。谢谢。我已将实现更改为
  • 您不需要显式测试空字符串。 empty 关键字已经涵盖了这一点。所以只要${not empty aString},正如我的回答所示,真的是你所需要的。
【解决方案2】:

您不能在 null 上使用 equalsIgnoreCase 而不是设置对象。为什么要使用 equalsIgnoreCase 检查字符串是否为空,这不是好方法。您的第一次检查 (=!null) 就足够了。

【讨论】:

  • 检查保证如果对象为空,则永远不会调用equalsIgnoreCase()。但这也不能解释或回答问题的症结。
  • @VahidFarahmand 因为您的答案与实际问题(JSP 语法)和下一个问题(期待 EL 表达式的东西中的小脚本)完全无关。
猜你喜欢
  • 2021-02-28
  • 2016-01-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-02
  • 2011-11-09
相关资源
最近更新 更多