【问题标题】:Could not compare string value in jsp scriptlet无法比较 jsp scriptlet 中的字符串值
【发布时间】:2014-05-27 13:39:56
【问题描述】:
Code is something like 

    2: <%
    3: String rolename = (String)session.getAttribute("roles");
    4: out.println("role is " + rolename);
    5: if(rolename.equals("MY_ROLE")){
    6: out.println("tension");
    7: }
    8: %>

问题是:第 4 行正在正确打印角色名称的值,即“MY_ROLE”,但我在第 5 行得到空指针异常,我假设这是因为角色名称为空。

Error is as below : 

org.apache.jasper.JasperException: 在第 10 行处理 JSP 页面 /WEB-INF/views/fragments/menu.jspf 时发生异常

    7: <%
    8:    String rolename = (String)session.getAttribute("roles");
    9:    out.println("role is " + rolename);
    10:   if(rolename.equals("MY_ROLE")){
    11:       out.println("tension");
    12:   }
    13:%>

Stacktrace:
    org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:521)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:430)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
    org.springframework.web.servlet.view.InternalResourceView.renderMergedOutputModel(InternalResourceView.java:229)
    org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:262)
    org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1180)
    org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:950)
    org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:852)
    org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:882)
    org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:778)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:717)


root cause 

java.lang.NullPointerException
    org.apache.jsp.WEB_002dINF.views.pages.view_jsp._jspService(view_jsp.java:106)
    org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:388)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
    org.springframework.web.servlet.view.InternalResourceView.renderMergedOutputModel(InternalResourceView.java:229)
    org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:262)
    org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1180)
    org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:950)
    org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:852)
    org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:882)
    org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:778)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:717)

Please help.

【问题讨论】:

  • 你的问题确实很奇怪。不幸的是,我不知道如何调试 scriptlet,除非它可以作为常规 java 代码工作。但是,如果您是从 jsp 开始的,您应该注意非常不鼓励使用 scriptlet,而且这种做法已经存在很长时间了。如果您想了解有关如何使用更多最新方法的更多信息,请查看这篇文章。我是几个月前开始的,这篇文章对我很有帮助。绝对值得花时间好好学习:stackoverflow.com/questions/3177733/…

标签: jsp


【解决方案1】:

当您执行String rolename = (String)session.getAttribute("roles"); 时,会话参数可以是null,即它可能从未设置过。

如果是这种情况,那么 rolename 现在将是 null 并且 if(rolename.equals("MY_ROLE")){ 将抛出 NullPointerException,因为您在空变量上使用点运算符,这基本上相当于执行 null.equals("MY_ROLE")

有几种方法可以绕过它:

  1. if(rolename!=null &amp;&amp; rolename.equals("MY_ROLE")){
  2. if("MY_ROLE".equals(rolename)){

也就是说,要么显式检查 null,要么颠倒比较的顺序并对字符串字面量进行点运算符。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-06-09
    • 1970-01-01
    • 2013-10-28
    • 1970-01-01
    • 1970-01-01
    • 2022-01-16
    • 1970-01-01
    • 2020-10-03
    相关资源
    最近更新 更多