[
https://issues.apache.org/jira/browse/DELTASPIKE-830?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14520973#comment-14520973
]
Nuno G. de M commented on DELTASPIKE-830:
-----------------------------------------
Hi,
Currently we ware not using the LAZY configuration mode precisely because of
this problem.
We've refactored the application to work with the request paramater based
dswid, where if we mess up and have the wrong delta spike windowid in the
request URL we suffer a double page loading triggered by the ds:widnowId
javascript. I think this is called "CLIENT" mode.
And therefore, we still have in our application window.logcation.href =
'someUrl' where we are forced to add the the approriate windowId to the request
url to avoid the double page loading phenomena. This is something to be
refactored out of the code in the future, but requires time.
In any case.
I do not agree with closing the issue, it is preferable to leave the issue open
rather than closed and unresolved.
As for the onload event problem, I can offer some suggestions:
http://www.htmlgoodies.com/beyond/javascript/article.php/3724571/Using-Multiple-JavaScript-Onload-Functions.htm
On this URL there is at the bottom some javascript that goes long the lines of
what I was thinking, where they create a wrapper function to run their own
logic and also call the old logic.
But probably it could also work having an DOM element at the bottom of the HTML
body that has its own <span onload="myDeltaSpikeLazyJavascript()" />
And this way you would not affect global properties of the dom that may be used
by the application itself, you have your own indenpendet dom elements to do
your magic.
> Now active ViewAccessScoped context during restore view phase
> -------------------------------------------------------------
>
> Key: DELTASPIKE-830
> URL: https://issues.apache.org/jira/browse/DELTASPIKE-830
> Project: DeltaSpike
> Issue Type: Bug
> Components: JSF-Module
> Affects Versions: 1.2.1
> Environment: Glassfish 3.1.2.2 and Weblogic 12.1.2.2
> Reporter: Nuno G. de M
> Assignee: Thomas Andraschko
> Fix For: 1.3.1
>
>
> While testing delta-spike in clientview mode, coming from CODI, we have one
> view that is giving problems trying to access ViewAccessScoped beans during
> the restored view phase.
> Caused by: org.jboss.weld.context.ContextNotActiveException: WELD-001303 No
> active contexts for scope type
> org.apache.deltaspike.core.api.scope.ViewAccessScoped
> Namely the exception we get in our page is the following:
> Caused By: org.jboss.weld.context.ContextNotActiveException: WELD-001303 No
> active contexts for scope type
> org.apache.deltaspike.core.api.scope.ViewAccessScoped
> at
> org.jboss.weld.manager.BeanManagerImpl.getContext(BeanManagerImpl.java:590)
> at
> org.jboss.weld.bean.proxy.ContextBeanInstance.getInstance(ContextBeanInstance.java:71)
> at
> org.jboss.weld.bean.proxy.ProxyMethodHandler.invoke(ProxyMethodHandler.java:79)
> at
> com.corp.whatever.component.ui.web.CR100Bean$Proxy$_$$_WeldClientProxy.getPageIds(CR100Bean$Proxy$_$$_WeldClientProxy.java)
> at sun.reflect.GeneratedMethodAccessor1663.invoke(Unknown Source)
> at
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
> at java.lang.reflect.Method.invoke(Method.java:606)
> at javax.el.BeanELResolver.getValue(BeanELResolver.java:305)
> at
> com.sun.faces.el.DemuxCompositeELResolver._getValue(DemuxCompositeELResolver.java:176)
> at
> com.sun.faces.el.DemuxCompositeELResolver.getValue(DemuxCompositeELResolver.java:203)
> at com.sun.el.parser.AstValue.getValue(AstValue.java:138)
> at com.sun.el.parser.AstValue.getValue(AstValue.java:183)
> at com.sun.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:224)
> at
> org.jboss.weld.el.WeldValueExpression.getValue(WeldValueExpression.java:50)
> at
> org.jboss.weld.el.WeldValueExpression.getValue(WeldValueExpression.java:50)
> at
> com.sun.faces.facelets.el.TagValueExpression.getValue(TagValueExpression.java:109)
> at com.sun.el.parser.AstIdentifier.getValue(AstIdentifier.java:99)
> at com.sun.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:224)
> at
> org.jboss.weld.el.WeldValueExpression.getValue(WeldValueExpression.java:50)
> at
> org.jboss.weld.el.WeldValueExpression.getValue(WeldValueExpression.java:50)
> at
> com.sun.faces.facelets.el.TagValueExpression.getValue(TagValueExpression.java:109)
> at
> com.sun.faces.facelets.tag.jstl.core.SetHandler.apply(SetHandler.java:163)
> at
> javax.faces.view.facelets.CompositeFaceletHandler.apply(CompositeFaceletHandler.java:95)
> at
> javax.faces.view.facelets.DelegatingMetaTagHandler.applyNextHandler(DelegatingMetaTagHandler.java:137)
> at
> com.sun.faces.facelets.tag.jsf.ComponentTagHandlerDelegateImpl.apply(ComponentTagHandlerDelegateImpl.java:187)
> at
> javax.faces.view.facelets.DelegatingMetaTagHandler.apply(DelegatingMetaTagHandler.java:120)
> at
> javax.faces.view.facelets.CompositeFaceletHandler.apply(CompositeFaceletHandler.java:95)
> at
> com.sun.faces.facelets.tag.jsf.core.ViewHandler.apply(ViewHandler.java:188)
> at
> javax.faces.view.facelets.CompositeFaceletHandler.apply(CompositeFaceletHandler.java:95)
> at
> com.sun.faces.facelets.compiler.NamespaceHandler.apply(NamespaceHandler.java:93)
> at
> com.sun.faces.facelets.compiler.EncodingHandler.apply(EncodingHandler.java:87)
> at
> com.sun.faces.facelets.impl.DefaultFacelet.include(DefaultFacelet.java:320)
> at
> com.sun.faces.facelets.impl.DefaultFacelet.include(DefaultFacelet.java:379)
> at
> com.sun.faces.facelets.impl.DefaultFacelet.include(DefaultFacelet.java:358)
> at
> com.sun.faces.facelets.impl.DefaultFaceletContext.includeFacelet(DefaultFaceletContext.java:199)
> at
> com.sun.faces.facelets.tag.ui.CompositionHandler.apply(CompositionHandler.java:155)
> at
> com.sun.faces.facelets.compiler.NamespaceHandler.apply(NamespaceHandler.java:93)
> at
> com.sun.faces.facelets.compiler.EncodingHandler.apply(EncodingHandler.java:87)
> at
> com.sun.faces.facelets.impl.DefaultFacelet.include(DefaultFacelet.java:320)
> at
> com.sun.faces.facelets.impl.DefaultFacelet.include(DefaultFacelet.java:379)
> at
> com.sun.faces.facelets.impl.DefaultFacelet.include(DefaultFacelet.java:358)
> at
> com.sun.faces.facelets.impl.DefaultFaceletContext.includeFacelet(DefaultFaceletContext.java:199)
> at
> com.sun.faces.facelets.tag.ui.CompositionHandler.apply(CompositionHandler.java:155)
> at
> com.sun.faces.facelets.compiler.NamespaceHandler.apply(NamespaceHandler.java:93)
> at
> com.sun.faces.facelets.compiler.EncodingHandler.apply(EncodingHandler.java:87)
> at
> com.sun.faces.facelets.impl.DefaultFacelet.apply(DefaultFacelet.java:164)
> at
> com.sun.faces.application.view.FaceletViewHandlingStrategy.buildView(FaceletViewHandlingStrategy.java:914)
> at
> com.sun.faces.application.view.FaceletViewHandlingStrategy.restoreView(FaceletViewHandlingStrategy.java:571)
> at
> com.sun.faces.application.view.MultiViewHandler.restoreView(MultiViewHandler.java:142)
> at
> javax.faces.application.ViewHandlerWrapper.restoreView(ViewHandlerWrapper.java:301)
> at
> javax.faces.application.ViewHandlerWrapper.restoreView(ViewHandlerWrapper.java:301)
> at
> com.sun.faces.lifecycle.RestoreViewPhase.execute(RestoreViewPhase.java:192)
> ------------------
> -- In glassfish 3.1.2
> -------------
> we can see that exception takes place here:
> /**
> * Gets an active context of the given scope. Throws an exception if there
> * are no active contexts found or if there are too many matches
> *
> * @param scopeType The scope to match
> * @return A single active context of the given scope
> * @see
> javax.enterprise.inject.spi.BeanManager#getContext(java.lang.Class)
> */
> public Context getContext(Class<? extends Annotation> scopeType) {
> Context activeContext = null;
> final List<Context> ctx = contexts.get(scopeType);
> if (ctx == null) {
> //this happens if no context is registered
> throw new ContextNotActiveException(CONTEXT_NOT_ACTIVE,
> scopeType.getName());
> }
> for (Context context : ctx) {
> if (context.isActive()) {
> if (activeContext == null) {
> activeContext = context;
> } else {
> throw new
> IllegalStateException(DUPLICATE_ACTIVE_CONTEXTS, scopeType.getName());
> }
> }
> }
> if (activeContext == null) {
> throw new ContextNotActiveException(CONTEXT_NOT_ACTIVE,
> scopeType.getName());
> }
> return activeContext;
> }
> Where the Context Appears to exist but no be active.
> Also the bean that is reported as not being active, when we navigate out of
> hte view, we can see it being destoryed in a @preDestroy call.
> I have created a sample application that tries as best as possible to
> reproduce the sitatution we experience.
> Is there a way by which I could upload a small maven project for this?
> I am adding it to my google drive for the moment.
> https://drive.google.com/file/d/0B_dEiNBGUsxqQWRzVVRJT0RlU0E/view?usp=sharing
> In th sample project a tiny index.xhtml exists. Access it for example under:
> http://schb7mw7321:8080/jsf-viewaccessscoped/index.xhtml?dsrid=933&dswid=ViewerWindow
> If your port is configured to be 8080 (glassfish defaults or 7001 in
> weblogic).
> The page will then display several tabs using a prime faces ui component.
> The first time a TAB is clicked, the UI processes the action without problems.
> The second time a tab is clicked JSF complains that it cannot access the bean
> because its context is not active.
> The sample project is an imperfect reproduction of our real case scenario,
> since in this case the exception is taking place during the apply request
> values phase as opposed to on the restore view phase:
> Here is an example of stack trace from this sample app.
> 2015-02-04 22:41:11.460 WARNING 55 /index.xhtml @45,83
> rendered="#{cr100.selectedTab eq 'default'}":
> org.jboss.weld.context.ContextNotActiveException: WELD-001303 No active
> contexts for scope type org.apache.deltaspike.core.api.scope.ViewAccessScoped
> (javax.enterprise.resource.webcontainer.jsf.lifecycle)
> javax.el.ELException: /index.xhtml @45,83 rendered="#{cr100.selectedTab eq
> 'default'}": org.jboss.weld.context.ContextNotActiveException: WELD-001303 No
> active contexts for scope type
> org.apache.deltaspike.core.api.scope.ViewAccessScoped
> at
> com.sun.faces.facelets.el.TagValueExpression.getValue(TagValueExpression.java:114)
> at
> javax.faces.component.ComponentStateHelper.eval(ComponentStateHelper.java:194)
> at
> javax.faces.component.UIComponentBase.isRendered(UIComponentBase.java:415)
> at
> javax.faces.component.UIComponentBase.processDecodes(UIComponentBase.java:1168)
> at org.primefaces.component.panel.Panel.processDecodes(Panel.java:290)
> at javax.faces.component.UIForm.processDecodes(UIForm.java:225)
> at
> javax.faces.component.UIComponentBase.processDecodes(UIComponentBase.java:1178)
> at
> javax.faces.component.UIComponentBase.processDecodes(UIComponentBase.java:1178)
> at javax.faces.component.UIViewRoot.processDecodes(UIViewRoot.java:925)
> at
> com.sun.faces.lifecycle.ApplyRequestValuesPhase.execute(ApplyRequestValuesPhase.java:78)
> at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
> at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
> at
> org.apache.deltaspike.jsf.impl.listener.request.DeltaSpikeLifecycleWrapper.execute(DeltaSpikeLifecycleWrapper.java:89)
> at javax.faces.webapp.FacesServlet.service(FacesServlet.java:593)
> at
> org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1550)
> at
> org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:281)
> at
> org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
> at
> org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:655)
> at
> org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:595)
> at
> org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:161)
> at
> org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:331)
> at
> org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:231)
> at
> com.sun.enterprise.v3.services.impl.ContainerMapper$AdapterCallable.call(ContainerMapper.java:317)
> at
> com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:195)
> at
> com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:860)
> at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:757)
> at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:1056)
> at
> com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:229)
> at
> com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:137)
> at
> com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:104)
> at
> com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:90)
> at
> com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:79)
> at
> com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:54)
> at
> com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:59)
> at com.sun.grizzly.ContextTask.run(ContextTask.java:71)
> at
> com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:532)
> at
> com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:513)
> at java.lang.Thread.run(Thread.java:745)
> Caused by: org.jboss.weld.context.ContextNotActiveException: WELD-001303 No
> active contexts for scope type
> org.apache.deltaspike.core.api.scope.ViewAccessScoped
> at
> org.jboss.weld.manager.BeanManagerImpl.getContext(BeanManagerImpl.java:619)
> at
> org.jboss.weld.bean.proxy.ContextBeanInstance.getInstance(ContextBeanInstance.java:71)
> at
> org.jboss.weld.bean.proxy.ProxyMethodHandler.invoke(ProxyMethodHandler.java:79)
> at
> org.jboss.weld.proxies.ViewAccessedBean$Proxy$_$$_WeldClientProxy.getSelectedTab(ViewAccessedBean$Proxy$_$$_WeldClientProxy.java)
> at sun.reflect.GeneratedMethodAccessor876.invoke(Unknown Source)
> at
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
> at java.lang.reflect.Method.invoke(Method.java:606)
> at javax.el.BeanELResolver.getValue(BeanELResolver.java:363)
> at
> com.sun.faces.el.DemuxCompositeELResolver._getValue(DemuxCompositeELResolver.java:176)
> at
> com.sun.faces.el.DemuxCompositeELResolver.getValue(DemuxCompositeELResolver.java:203)
> at com.sun.el.parser.AstValue.getValue(AstValue.java:138)
> at com.sun.el.parser.AstValue.getValue(AstValue.java:183)
> at com.sun.el.parser.AstEqual.getValue(AstEqual.java:58)
> at com.sun.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:224)
> at
> org.jboss.weld.el.WeldValueExpression.getValue(WeldValueExpression.java:50)
> at
> com.sun.faces.facelets.el.TagValueExpression.getValue(TagValueExpression.java:109)
> Many thanks for the help.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)