12

I was wondering if there was anyway of using JSP in <c:if> statement.

E.g.

<c:if test="${ param.variable1 == 'Add' <% JSP variable clause %>}">

So I want my JSP variable to checked against as well.

Any suggestions? I have tried ignorantly just sticking in the clause, obviously it did not work.

Thanks

BalusC
  • 1,082,665
  • 372
  • 3,610
  • 3,555
urema
  • 721
  • 4
  • 11
  • 22

1 Answers1

22

So you want to evaluate a scriptlet variable in EL? Store it as a request attribute. The below example will make it available as ${foo}.

<%
    String foo = "some";
    request.setAttribute("foo", foo);
%>

<c:if test="${param.variable1 == 'Add' && foo == 'some'}">

However, this makes no sense. You should avoid scriptlets altogether and use JSTL/EL to prepare this variable. So if you make the functional requirement more clear, e.g. "How do I do this (insert scriptlet code snippet) using JSTL/EL?", then we'll be able to suggest the right approach.

For example, you could use <c:set> to set a variable in EL scope.

<c:set var="foo" value="some" scope="request" />

Or if the JSP is forwarded by a servlet, then use request.setAttribute() over there right away.

String foo = "some";
request.setAttribute("foo", foo);
request.getRequestDispatcher("/WEB-INF/your.jsp").forward(request, response);

This will then be available as ${foo} the same way.

See also:

BalusC
  • 1,082,665
  • 372
  • 3,610
  • 3,555
  • Just trying to experiment I tried *not* adding it to the request scope figuring it would be available in the page scope anyways. So I explicitly requested it from the page scope using in the EL: `pageScope.var`. Sure enough, it didn't work. Weirdly, when simply using `var` in the EL it *does* work without having to place the variable in the scriptlet code in request scope. What am I missing? – Marcus Junius Brutus Nov 05 '16 at 22:55
  • Why use request context? Simpler, more local, is `<% pageContext.setAttribute("var", "some"); %>` – Per Lindberg Jan 31 '19 at 10:11