Oh boy, sorry for you. You did hit a blank spot in the CDI spec.
Problem is that the EE umbrella spec, the EL spec and the CDI spec contradict
each other.
The Weld guys solved this by introducing a Javax class. But that takes away the
whole javax.* tree for the EL. That's just not good as it contradicts the EL
spec.
Could you please try the following
@RequestScoped
@Named("conversation")
public class ConversationWrapper {
private @Inject Conversation conv;
public Conversation get() {
return conv;
}
}
And in the EL just use #{conversation.get.id}
LieGrue,
strub
> On Wednesday, 28 September 2016, 22:12, Xavier Dury <[email protected]>
> wrote:
> > I really don't understand how something like <f:param
> name="cid"
> value="#{javax.enterprise.context.conversation.id}"/> actually
> works... something must be made to make the EL processor accept that invalid
> bean name.
>
> Making a producer which @Produces @Named Conversation conflicts with the
> built-in bean from OWB (with WebBeanType.CONVERSATION)...
>
> ... so, I have done the following for my tests but I feel a bit ashamed
> because
> I can't imagine there is no better solution than this ;-)
>
> public class ConversationAliaser {
> public class Javax {
> public Enterprise getEnterprise() {return new Enterprise();}
>
> }
> public class Enterprise {
> public Context getContext() {return new Context();}
> }
> public class Context {
> public Conversation getConversation() {return conversation;}
>
> }
> @Inject
> private Conversation conversation;
> @Produces @ApplicationScoped @Named("javax")
> public Javax javax() {return new Javax();}
> }
>
> But that works!
>
> Xavier
>
>
>
> From: Xavier Dury <[email protected]>
> Sent: Wednesday, September 28, 2016 8:42 PM
> To: [email protected]
> Subject: Re: OpenEJB and EL
>
> Hmmm... I guess I'll have to @Produces @Named the conversation if I want to
> use it in ELs. I don't know if something like
> #{applicationScope['javax.enterprise.context.conversation'].transient}
> would work?
>
> I remember back in my JSP days that, sometimes, I had to use something like
> ${requestScope['javax.servlet.forward.request_uri']} instead of
> plain ${javax.servlet.forward.request_uri}.
>
> Xavier
>
>
> From: Romain Manni-Bucau <[email protected]>
> Sent: Wednesday, September 28, 2016 6:54 PM
> To: [email protected]
> Subject: Re: OpenEJB and EL
>
> hmm, wonder if it is linked to the value you try to evaluate (which doesn't
> respect EL spec even if in CDI spec - don't ask please ;)).. See
> https://issues.jboss.org/browse/CDITCK-462 /
> http://lists.jboss.org/pipermail/cdi-dev/2015-January/006009.html
>
>
>
>
> Romain Manni-Bucau
> @rmannibucau <https://twitter.com/rmannibucau> | Blog
>
>
>
> Romain Manni-Bucau (@rmannibucau) | Twitter
> twitter.com
> The latest Tweets from Romain Manni-Bucau (@rmannibucau). ASF / Java(EE) /
> Angular. LinkedIn: https://t.co/dX7XMGjbBi. JavaEE Factory:
> https://t.co/0VnvWwbedt . Blog ...
> <https://blog-rmannibucau.rhcloud.com> | Old Wordpress Blog
> <http://rmannibucau.wordpress.com> | Github
> <https://github.com/rmannibucau> |
> LinkedIn <https://www.linkedin.com/in/rmannibucau> | Tomitriber
> <http://www.tomitribe.com> | JavaEE Factory
> <https://javaeefactory-rmannibucau.rhcloud.com>
>
> 2016-09-28 18:17 GMT+02:00 Xavier Dury <[email protected]>:
>
>> Hi Romain,
>>
>> I tried with org.apache.tomcat:tomcat-jasper-el:8.5.5 but it does not
>> parse my expression until I change ".transient" by
> ".isTransient()" and
>> then it gives the same error: javax.el.PropertyNotFoundException:
>> ELResolver cannot handle a null base Object with identifier
> 'javax'.
>>
>> Does the EL context need something else than adding the
>> BeanManager.getELResolver() to be able to resolve some implicit objects? I
>> don't understand why it works with ri-1.0.
>>
>> Xavier
>>
>>
>> From: Romain Manni-Bucau <[email protected]>
>> Sent: Wednesday, September 28, 2016 4:02 PM
>> To: [email protected]
>> Subject: Re: OpenEJB and EL
>>
>> Hi Xavier
>>
>> On the phone so hard to give you a link bit try using tomcat el impl of
>> tomcat 8.5
>>
>> Le 28 sept. 2016 15:29, "Xavier Dury" <[email protected]>
> a écrit :
>>
>> > Hi,
>> >
>> > I am using OpenEJB for my tests and need support for EL expressions in
> my
>> > own code.
>> >
>> > By default, if I do something like this (pay attention to the
>> expression):
>> >
>> > ExpressionFactory factory = beanManager.wrapExpressionFactory(
>> > ExpressionFactory.newInstance());
>> > StandardELContext elContext = new StandardELContext(factory);
>> > elContext.addELResolver(beanManager.getELResolver());
>> > ValueExpression expression = factory.createValueExpression(elContext,
>> > "#{javax.enterprise.context.conversation.transient}",
> Boolean.class);
>> > expression.getValue(elContext);
>> >
>> > and only add org.apache.tomee:openejb-core:7.0.1 to my project then I
>> get
>> > javax.el.ELException: Unable to find ExpressionFactory of type:
>> > org.apache.el.ExpressionFactoryImpl
>> >
>> > if I add org.glassfish:javax.el:3.0.0 then I get javax.el.
>> PropertyNotFoundException:
>> > ELResolver cannot handle a null base Object with identifier
> 'javax'
>> >
>> > if I switch the EL library to com.sun.el:el-ri:1.0 (+
> META-INF/javax.el.
>> ExpressionFactory
>> > < com.sun.el.ExpressionFactoryImpl) then my expression can be
> evaluated
>> > but I can't use any new feature of 3.0 (like lambdas)
>> >
>> > So, either my dependencies are wrong or I am not correctly
> initializing
>> my
>> > factory.
>> >
>> > Does anybody have an idea?
>> >
>> > Thanks,
>> >
>> > Xavier
>>
>>
>