在 scriptlet 中使用 equalsIgnoreCase 时 JSP Core 标记失败
Posted
技术标签:
【中文标题】在 scriptlet 中使用 equalsIgnoreCase 时 JSP Core 标记失败【英文标题】:JSP Core tag failing when using equalsIgnoreCase inside scriptlet 【发布时间】: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
属性中的内容是什么?
知道了,戴夫。赞成。事实是我看到了太多这样的代码,以至于我开始编写类似的代码。我已将实现更改为 特定错误是由这些双引号引起的。他们过早地结束了test
属性的值。
但是,所有这些都不是正确的方法。事实上,将“oldschool” scriptlets 与“modern” taglibs 混合使用是错误的。根本不支持这种语法。您不能在 taglib 属性中使用 scriptlets。你应该在 taglib 属性中使用 EL——那些$
的东西。
假设 aString
被预先放置为页面、请求、会话或应用程序范围的属性,例如 as
request.setAttribute("aString", aString);
那么这应该是为了检查aString
是否不为空也不为空:
<c:if test="$not empty aString">
另见:
Our EL wiki page Our JSTL wiki page How to avoid Java code in JSP files? Evaluate empty or null JSTL c tags【讨论】:
知道了。谢谢。我已将实现更改为empty
关键字已经涵盖了这一点。所以只要$not empty aString
,正如我的回答所示,真的是你所需要的。【参考方案2】:
您不能在 null 上使用 equalsIgnoreCase 而不是设置对象。为什么要使用 equalsIgnoreCase 检查字符串是否为空,这不是好方法。您的第一次检查 (=!null) 就足够了。
【讨论】:
检查保证如果对象为空,则永远不会调用equalsIgnoreCase()
。但这也不能解释或回答问题的症结。
@VahidFarahmand 因为您的答案与实际问题(JSP 语法)和下一个问题(期待 EL 表达式的东西中的小脚本)完全无关。以上是关于在 scriptlet 中使用 equalsIgnoreCase 时 JSP Core 标记失败的主要内容,如果未能解决你的问题,请参考以下文章
使用struts mvc在jsp中显示动态值而不使用scriptlet