[jsr-314-open] [C036-ElInResources] ACTION: Vote: Resource.getInputStream() underspecified

Ken Paulsen Ken.Paulsen at Sun.COM
Fri Sep 25 13:37:03 EDT 2009


+1

Jim Driscoll wrote:
> On 9/25/09 9:04 AM, Ted Goddard wrote:
>
>> In case you're curious, my interpretation of the feature was that
>> it was intended for things like:
>>
>> var userid = #{user.id};
>
> There's a serious problem with relying on this kind of use, and I want 
> to make sure that everyone understands it fully.
>
> Since the default for resources is to have the expires header set in 
> the far future, whatever you serve had better never change for the 
> lifetime of the browser instance.  Otherwise, you'll be using faulty 
> data.
>
> Let's take the example of a user ID - if you serve up a javascript 
> file with the user's ID in it, that javascript file will never expire 
> - even if the user logs out, and then logs back in as a different 
> user.  And that kind of error will be very, very hard to debug for the 
> enduser or application author.
>
> In fact, there's a very limited number of instances where this feature 
> will actually come in handy as a result - static final application 
> scoped variables  spring to mind (but in that case, why didn't you use 
> a config file, or hardcode in the js file itself?).  But even there, 
> you'd better not be sharing JS across applications.  Some facescontext 
> variables (but again, that could be hardcoded - after all, it never 
> changes).    But for any of those cases, you could just as easily rely 
> on the loading page to pass those variables into the JS, without any 
> of those caching worries.
>
> In fact, it's my contention that for most variables that you'll want 
> to pass in to your JavaScript, you'll have to rely on an init method, 
> just like I do in most of my ajax component blogs.  User id would be 
> one example of many.
>
> In fact, since there's a significant performance overhead for eval of 
> these variables, and this features is likely to be a font of bugs for 
> app developers, and since I can't think of a use case that couldn't 
> also be better handled with an init method that initializes a context 
> inside the JS file, I'd like to recommend that we simply disallow 
> JavaScript EL evaluation altogether - it's just far too likely to 
> cause confusion and bugs - we've already seen examples of this.  
> Resource loading can be done via relative paths easily enough, yes?
>
> We can always revisit the decision in 2.1, when we'll presumably also 
> talk about user accessable cache control.  EL in JavaScript without 
> that cache control just doesn't really make sense.
>
> Jim




More information about the jsr-314-open-mirror mailing list