Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
Re: [faces-dev] Outstanding enhancement request for Jakarta EL
  • From: Mark Thomas <markt@xxxxxxxxxx>
  • Date: Thu, 25 Feb 2021 16:45:54 +0000
  • Autocrypt: addr=markt@xxxxxxxxxx; prefer-encrypt=mutual; keydata= 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
  • Delivered-to: faces-dev@xxxxxxxxxxx
  • List-archive: <https://www.eclipse.org/mailman/private/faces-dev/>
  • List-help: <mailto:faces-dev-request@eclipse.org?subject=help>
  • List-subscribe: <https://www.eclipse.org/mailman/listinfo/faces-dev>, <mailto:faces-dev-request@eclipse.org?subject=subscribe>
  • List-unsubscribe: <https://www.eclipse.org/mailman/options/faces-dev>, <mailto:faces-dev-request@eclipse.org?subject=unsubscribe>
  • User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.10.0

Thomas,

That would likely be part of an implementation but I really need to
understand how you would see this working as a user of the EL API. What
would the EL expression look like? What API would you call to manipulate
the parameters? I'm struggling to come up with anything that isn't
significantly messier than using implicit parameters that are then
resolved by the ELContext.

Mark


On 24/02/2021 10:45, Thomas Andraschko wrote:
> Hi Mark,
> 
> i think about something like this:
> https://github.com/apache/tomcat/blob/master/java/org/apache/el/MethodExpressionImpl.java#L267
> 
> try {
>      putTempVar("arguments", params);
>      Object result = this.getNode().invoke(ctx, this.paramTypes, params);
> }
> finally {
>      removeTempVar("arguments");    
> }
> 
> Do you know what i mean?
> Maybe you have a good idea to implement this easily :) I did a short try
> it but quite hard to open Tomcat with its Ant build and i dont know the
> EL internals that good like you.
> 
> Best regards,
> Thomas
> 
> 
> Am Mi., 24. Feb. 2021 um 10:22 Uhr schrieb Mark Thomas <markt@xxxxxxxxxx
> <mailto:markt@xxxxxxxxxx>>:
> 
>     Hi Thomas,
> 
>     Can you provide an example of how you would like this to work and the
>     specific changes you are asking for in the EL API as there are lots of
>     ways this could be done.
> 
>     Thanks,
> 
>     Mark
> 
> 
>     On 24/02/2021 08:53, Thomas Andraschko wrote:
>     > Hi Mark,
>     >
>     > you may be right that this could be done in JSF only by manual push
>     > "event" and the obj instance to the ELContext.
>     >
>     > But i still think this could be a good change for the EL specs to
>     > introduce the "arguments" array as there is no way to reference the
>     > parameters passed to MethodExpression#invoke.
>     > I like it more to enhance the EL specs instead of changing a
>     > "implementation detail" in JSF (same as e.g. RequestScoped should be
>     > implemented in Servlet, not CDI).
>     > It just makes EL a bit more flexible.
>     > I think there might be other usescases as well and the
>     implementation is
>     > quite easy at EL side.
>     >
>     > Best regards,
>     > Thomas
>     >
>     >
>     > Am Di., 23. Feb. 2021 um 15:49 Uhr schrieb Mark Thomas
>     <markt@xxxxxxxxxx <mailto:markt@xxxxxxxxxx>
>     > <mailto:markt@xxxxxxxxxx <mailto:markt@xxxxxxxxxx>>>:
>     >
>     >     On 22/02/2021 13:40, Thomas Andraschko wrote:
>     >     > any feedback, Mark? :)
>     >
>     >     Hi,
>     >
>     >     Sorry I have taken a while to reply.
>     >
>     >     I agree with you that there are two solutions as you set out
>     below. More
>     >     commentary in-line.
>     >
>     >     > Am Fr., 5. Feb. 2021 um 12:19 Uhr schrieb Thomas Andraschko
>     >     > <tandraschko@xxxxxxxxxx <mailto:tandraschko@xxxxxxxxxx>
>     <mailto:tandraschko@xxxxxxxxxx <mailto:tandraschko@xxxxxxxxxx>>
>     >     <mailto:tandraschko@xxxxxxxxxx <mailto:tandraschko@xxxxxxxxxx>
>     <mailto:tandraschko@xxxxxxxxxx <mailto:tandraschko@xxxxxxxxxx>>>>:
>     >     >
>     >     >     Hi Mark,
>     >     >
>     >     >     just to be clear, this is what JSF always does and i dont
>     >     think that
>     >     >     this should be changed, everything should be in EL.
>     >     >
>     >     >     MethodExpression me =
>     >     >     ExpressionFactory#createMethodExpression(context,
>     >     expressionString,
>     >     >     new Class[] { AjaxBehaviorEvent.class })
>     >     >     me.invoke(context, new Object[] { 
>     ajaxBehaviorEventInstance });
>     >     >
>     >     >
>     >     >     I think there are 2 solutions for the EL specs / impl:
>     >     >
>     >     >     1) add a syntax to reference a "implicit" param, maybe
>     similar
>     >     to JS:
>     >     >         #{bean.method(arguments[0],  someVar)}
>     >
>     >     This solution does not require any changes to the EL
>     specification. It
>     >     does require (relatively simple) changes to the JSF. In summary:
>     >
>     >     - define "event" as referring to the appropriate AjaxBehaviorEvent
>     >
>     >     - users would then us #{bean.method(event, someVar)}
>     >
>     >     - JSF would evaluate this in an ELContext that resolved
>     "event" to the
>     >       appropriate (creating if necessary) AjaxBehaviorEvent instance
>     >
>     >
>     >     I also looked into several variations of this but for a
>     solution where
>     >     the user indicates (e.g. via an additional parameter in the
>     method) they
>     >     want to receive the AjaxBehaviorEvent the approach above is by
>     far the
>     >     simplest to implement - both for EL and JSF.
>     >
>     >
>     >     >     2) add some auto-lookup-magic into EL, like you
>     mentioned in the
>     >     >     last mail
>     >
>     >     This is more complex that option 1. The search order needs to
>     be well
>     >     defined. If user specifies #{bean.method(someVar)} then, if
>     both exist,
>     >     which is used in preference method(event, someVar) or
>     method(someVar)?
>     >     If there is any requirement to make that preference
>     configurable you are
>     >     - essentially - back at option 1 and a simpler solution.
>     >
>     >     Assuming a preference order can be defined, there needs to be
>     sufficient
>     >     API exposed to:
>     >
>     >     - determine if a method with the additional parameter exists
>     >     - execute that method with the additional parameter provided
>     by the
>     >       caller
>     >
>     >     How much of this is bundled up into a single API call to EL vs
>     EL being
>     >     extended with a handful of new generic methods to allow a range of
>     >     manipulations on MethodExpressions is TBD. The generic
>     approach requires
>     >     more work in both EL and JSF but provides for greater flexibility.
>     >
>     >     >     I >personally< like 1) more as it forces the user to think
>     >     about the
>     >     >     method-mapping and is more flexible.
>     >
>     >     +1 I think this is the much better solution for this
>     particular problem.
>     >
>     >     >     2) is of course also nice but we need a lot of
>     fallbacks. Not sure
>     >     >     about the performance here, but probably the resolved
>     method is
>     >     >     cached in the "MethodExpression" instance?
>     >
>     >     Maybe. That would be an issue for the EL implementations
>     rather than the
>     >     API.
>     >
>     >
>     >     So, in summary, I think the best way forward is option one
>     which should
>     >     be implementable in JSF without any changes to the EL API.
>     >
>     >     Kind regards,
>     >
>     >     Mark
>     >     _______________________________________________
>     >     faces-dev mailing list
>     >     faces-dev@xxxxxxxxxxx <mailto:faces-dev@xxxxxxxxxxx>
>     <mailto:faces-dev@xxxxxxxxxxx <mailto:faces-dev@xxxxxxxxxxx>>
>     >     To unsubscribe from this list, visit
>     >     https://www.eclipse.org/mailman/listinfo/faces-dev
>     >
>     >
>     > _______________________________________________
>     > faces-dev mailing list
>     > faces-dev@xxxxxxxxxxx <mailto:faces-dev@xxxxxxxxxxx>
>     > To unsubscribe from this list, visit
>     https://www.eclipse.org/mailman/listinfo/faces-dev
>     >
> 
>     _______________________________________________
>     faces-dev mailing list
>     faces-dev@xxxxxxxxxxx <mailto:faces-dev@xxxxxxxxxxx>
>     To unsubscribe from this list, visit
>     https://www.eclipse.org/mailman/listinfo/faces-dev
> 
> 
> _______________________________________________
> faces-dev mailing list
> faces-dev@xxxxxxxxxxx
> To unsubscribe from this list, visit https://www.eclipse.org/mailman/listinfo/faces-dev
> 



Back to the top