简体   繁体   中英

How to include a condition into a combined JSP and JavaScript function?

Now I have 2 following JavaScript functions :

function clearBillingCache(){
    window.location = "billingSearchClear.html"
}

function clearBillingCache_1(){
<%
    request.getSession().setAttribute("stickyCarrier", null);
    request.getSession().setAttribute("stickyAgency", null);
%>
}

How to have a combined function, so only when request.getSession().getAttribute("stickyCarrier") != null do the following :

<%
  request.getSession().setAttribute("stickyCarrier", null);
  request.getSession().setAttribute("stickyAgency", null);
%>
window.location = "billingSearchClear.html"

otherwise do nothing.

Edit :

Thanks Bhaskara !

But actually it's more than what I showed, it might get into an infinite loop, because there is a redirect in :

@RequestMapping(value = "/billingSearchClear.html", method = RequestMethod.GET)
public String clearCache(HttpServletRequest request) {
    String returnVal = "redirect:/billingSearch.html";

    request.getSession().setAttribute("stickyCarrier", null);
    request.getSession().setAttribute("stickyAgency", null);

    return returnVal;
}

And I'm calling clearBillingCache() in <body onload=...>

Please note that the code:

   function clearBillingCache_1(){
<%
    request.getSession().setAttribute("stickyCarrier", null);
    request.getSession().setAttribute("stickyAgency", null);
%>

}

will be rendered as

function clearBillingCache_1(){

    }

You can check this by doing a "View Source" in your browser. Which means the session attributes defined in the scriptlets will anyway be set irrespective of the condition. I personally recommend you not to use the Scriptlets. You can use JSTL to do this. The idea is to use for conditional check and for setting the attributes and a Javascript code just to redirect. JSTL:

<c:if test="${stickyCarrier != null}">
            <c:set var="stickyCarrier" value="null" scope="session"  />
            <c:set var="stickyAgency" value="null" scope="session"  />

        </c:if>

and then your javascript:

function clearBillingCache(){
    window.location = "billingSearchClear.html"
}

Edit:

Ok Frank. So there is some more change required. You are being redirected from a controller/servlet. Please follow the below steps:

  • Change your controller code to this:

     @RequestMapping(value = "/search.html", method = RequestMethod.GET) public String clearCache(HttpServletRequest request) { String returnVal = "redirect:/billingSearch.html"; if(request.getSession().getAttribute("stickyCarrier") != null) { request.getSession().setAttribute("stickyCarrier", null); request.getSession().setAttribute("stickyAgency", null); } return returnVal; 
  • Remove the javascript functions : clearBillingCache_1() and clearBillingCache()

  • Remove body onload call on the html

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM