user3679958
user3679958

Reputation: 1

Could not compare string value in jsp scriptlet

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: %>

Problem is: line 4 is printing value of rolename correctly i.e "MY_ROLE", but I am getting null pointer exception on line no 5, which I am assuming because of rolename is null.

Error is as below : 

org.apache.jasper.JasperException: An exception occurred processing JSP page /WEB-INF/views/fragments/menu.jspf at line 10

    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.

Upvotes: 0

Views: 2675

Answers (1)

developerwjk
developerwjk

Reputation: 8659

When you do String rolename = (String)session.getAttribute("roles"); the session parameter can be null, i.e. perhaps it was never set.

If that's the case then rolename will now be null and if(rolename.equals("MY_ROLE")){ will throw a NullPointerException because you are using a dot operator on a null variable, which is basically equivalent to doing null.equals("MY_ROLE").

There are a few ways to get around it:

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

That is, either explicitly check for null, or reverse the order of the comparison and do the dot operator on the string literal.

Upvotes: 2

Related Questions