On 09/05/2016 20:45, Coty Sutherland wrote: <snip/>
> <%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%> > <fmt:setBundle basename="IDontExist" scope="session" > var="messageString" /> > <script type="text/javascript"> > var value = "${messageString.resourceBundle.keys}"; > > I did a bit of debugging and I can see that the bundle is null which seems > expected (section 8.7 of the JSTL 1.2 spec states that if its null, empty, > or invalid a null resource bundle should be added to the context), but it > doesn't give any warnings or anything when you try and access it's > resourceBundle's keys. I tried to find the behavior definition in the JSP > spec also, but I don't see anything for this particular behavior. From the > JSP 2.1 spec, section 2.21.7 getValue(ELContext, Object, Object) shows that > getValue can return null, which it does. In the JasperELResolver class' > getValue method there is a tight loop that iterates over all of the > Resolver's resolvers to resolve the property and return it's value. When > you pass in the non-existent basename such as above, the resolver that > "resolves" the property ends up being the BeanELResolver. The context isn't > null and the base and property variables aren't null, so the resolver sets > the property as resolved (though I think that's wrong) That isn't what is happening. fmt:setBundle creates a LocalizationContext instance with a null ResourceBundle and places it in session scope with the name "messageString" All resolution is done with an instance of JasperELResolver. See JSP.2.9. First: base = null property = messageString This is handled by the ScopedAttributeELResolver and returns the LocalizationContext instance. It is left as an exercise for the reader to determine why it is correct that the previous 9 resolvers in the the JasperELResolver do not resolve this. Second: base = messageString (LocalizationContext) property = resourceBundle This is handled by the BeanELResolver and returns null. Again, why the BeanELResolver handles this is an exercise for the reader. Finally, we have base = null property = keys and section 1.6 of the EL spec explains how to handle that. Returning null is the correct thing to do. > So the question is, does this behavior seem correct? Yes. Long, painful experience with this code has taught me to be very, very cautious before changing anything. While I am certain there are some bugs in the code somewhere, I'm going to need a lot of convincing that any given behaviour is invalid. The most convincing evidence would be the simplest possible test case that demonstrates the problem along with a step by step explanation of the spec mandated behaviour and how Tomcat differs from that. Mark --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org