views:

954

answers:

2

I have a servlet which does some error checking and if something is wrong I will typically do this:

response.sendError(403, "My message")
return;

I don't want to throw an exception from the servlet - because I would like to conform with HTTP status codes.

In the web.xml I have configured the following:

    <error-page>
        <error-code>403</error-code>
        <location>/failure.jsp</location>
    </error-page>

In the failure.jsp I have declared usage of JSTL and I would like to get the error messages displayed. I know that I can do the following in scriptlets:

<%= request.getAttribute("javax.servlet.error.message") %>

But I would like to use JSTL with some c:if clause so if I can drop using scriptlets, this would be appreciated.

How can I easily fetch the values from the sendError statement in the servlet in the error page by using JSTL?

A: 

Declare an JSTL tag with an attribute "var", which will have an exception object(if there any error occured between the body of tags) at the end of tag, which have stackTrace and message properties.

<c:catch var="myException">
<%int x=10/0; %>
</c:catch>

<c:if test="${myException !=null}">
There was an exception: ${myException.message} 
</c:if>
Greenhorn
This wont work. The JSP page doesn't catch any exception - it is configured as an error page in web.xml. In this scenario the exception is an attribute in the request, but the key is rather awkward and I'm not sure how to reference it from JSTL.
tronda
+2  A: 

The scriptlet:

<%= request.getAttribute("javax.servlet.error.message") %>

can be translated to the following EL:

${requestScope['javax.servlet.error.message']}

The brace notation bean['foo.bar'] is very useful if you have dots in Map or scoped key names, because bean.foo.bar obviously doesn't return the desired Map or scoped value.

BalusC