2015-09-25 54 views
0

进入最终状态时,这是我的流量(简化):java.lang.IllegalStateException通过Primefaces的commandButton

<view-state id="create" view="createCustomer.xhtml"> 
    <transition on="create" to="end"> 
     <evaluate expression="controller.validateCustomerFilled(customer)"/> 
    </transition> 
</view-state> 

<end-state id="end" view="customerCreated.xhtml"> 
    <on-entry> 
     <evaluate expression="controller.createCustomer(customer)"/> 
    </on-entry> 
</end-state> 

和我的facelet(也被简化):

<p:commandButton value="Test Ajax" action="create" update="content, messages"/> 
<p:commandButton value="Test No Ajax" action="create" ajax="false"/> 

只要作为“customerCreated.xhtml”不包含啊:表格,一切似乎都很好。但是,如果它确实存在,但以下情况除外得到投掷:没有Ajax的commandButton:

java.lang.IllegalStateException: The current state 'end' of this flow 'customer/create' is not a view state - view scope not accessible 
at org.springframework.webflow.engine.impl.FlowSessionImpl.getViewScope(FlowSessionImpl.java:119) 
at org.springframework.webflow.engine.impl.RequestControlContextImpl.getViewScope(RequestControlContextImpl.java:130) 
at org.springframework.faces.webflow.FlowResponseStateManager.saveState(FlowResponseStateManager.java:106) 
at org.springframework.faces.webflow.FlowResponseStateManager.getViewState(FlowResponseStateManager.java:100) 
at javax.faces.application.StateManager.getViewState(Unknown Source) 
at javax.faces.application.StateManagerWrapper.getViewState(Unknown Source) 
at com.sun.faces.context.PartialViewContextImpl.renderState(Unknown Source) 
at com.sun.faces.context.PartialViewContextImpl.processPartial(Unknown Source) 
at org.primefaces.context.PrimePartialViewContext.processPartial(PrimePartialViewContext.java:60) 
at javax.faces.context.PartialViewContextWrapper.processPartial(Unknown Source) 
at javax.faces.component.UIViewRoot.encodeChildren(Unknown Source) 
at javax.faces.component.UIComponent.encodeAll(Unknown Source) 
at com.sun.faces.application.view.FaceletViewHandlingStrategy.renderView(Unknown Source) 
at com.sun.faces.application.view.MultiViewHandler.renderView(Unknown Source) 
at javax.faces.application.ViewHandlerWrapper.renderView(Unknown Source) 
at com.sun.faces.lifecycle.RenderResponsePhase.execute(Unknown Source) 
at com.sun.faces.lifecycle.Phase.doPhase(Unknown Source) 
at com.sun.faces.lifecycle.LifecycleImpl.render(Unknown Source) 
at org.springframework.faces.support.LifecycleWrapper.render(LifecycleWrapper.java:54) 
at org.springframework.faces.webflow.JsfView.render(JsfView.java:87) 
at org.springframework.webflow.action.ViewFactoryActionAdapter.doExecute(ViewFactoryActionAdapter.java:40) 
at org.springframework.webflow.action.AbstractAction.execute(AbstractAction.java:188) 
at org.springframework.webflow.execution.ActionExecutor.execute(ActionExecutor.java:51) 
at org.springframework.webflow.engine.EndState.doEnter(EndState.java:100) 
at org.springframework.webflow.engine.State.enter(State.java:194) 
at org.springframework.webflow.engine.Transition.execute(Transition.java:228) 
at org.springframework.webflow.engine.impl.FlowExecutionImpl.execute(FlowExecutionImpl.java:395) 
at org.springframework.webflow.engine.impl.RequestControlContextImpl.execute(RequestControlContextImpl.java:214) 
at org.springframework.webflow.engine.TransitionableState.handleEvent(TransitionableState.java:116) 
at org.springframework.webflow.engine.Flow.handleEvent(Flow.java:547) 
at org.springframework.webflow.engine.impl.FlowExecutionImpl.handleEvent(FlowExecutionImpl.java:390) 
at org.springframework.webflow.engine.impl.RequestControlContextImpl.handleEvent(RequestControlContextImpl.java:210) 
at org.springframework.webflow.engine.ViewState.handleEvent(ViewState.java:231) 
at org.springframework.webflow.engine.ViewState.resume(ViewState.java:195) 
at org.springframework.webflow.engine.Flow.resume(Flow.java:537) 
at org.springframework.webflow.engine.impl.FlowExecutionImpl.resume(FlowExecutionImpl.java:259) 
at org.springframework.webflow.executor.FlowExecutorImpl.resumeExecution(FlowExecutorImpl.java:169) 
at org.springframework.webflow.mvc.servlet.FlowHandlerAdapter.handle(FlowHandlerAdapter.java:228) 
at org.springframework.faces.webflow.JsfFlowHandlerAdapter.handle(JsfFlowHandlerAdapter.java:57) 
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:959) 
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:893) 
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970) 
at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:872) 
at javax.servlet.http.HttpServlet.service(HttpServlet.java:595) 
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846) 
at javax.servlet.http.HttpServlet.service(HttpServlet.java:668) 
at com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java:1285) 
at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:776) 
at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:473) 
at com.ibm.ws.webcontainer.filter.WebAppFilterManager.invokeFilters(WebAppFilterManager.java:1143) 
at com.ibm.ws.webcontainer.servlet.CacheServletWrapper.handleRequest(CacheServletWrapper.java:81) 
at com.ibm.ws.webcontainer.WebContainer.handleRequest(WebContainer.java:927) 
at com.ibm.ws.webcontainer.osgi.DynamicVirtualHost$2.run(DynamicVirtualHost.java:262) 
at com.ibm.ws.http.dispatcher.internal.channel.HttpDispatcherLink$TaskWrapper.run(HttpDispatcherLink.java:955) 
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) 
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) 
at java.lang.Thread.run(Thread.java:744) 

这不使用常规的h当发生(用F时:AJAX,只是什么都不会发生在客户端)。

使用: - 春4.2.0 - 春天的Webflow 2.4.2 - Primefaces 5.2 - 钻嘴鱼科2.2.9

+1

为什么使用Spring WebFlow而不是JSF 2.2的内置Faces Flow?我可以理解为什么如果人们仍然使用旧的JSF 2.0/2.1,就会使用SWF,但在这里并不是这样。或者你只是不了解新的JSF 2.2 Faces Flow功能? https://docs.oracle.com/javaee/7/tutorial/jsf-configure003.htm – BalusC

+0

,如果第二个按钮失败,并且您将其更改为'h:commandButton',但仍然失败,则不是PrimeFaces相关,但纯粹的JSF/SWF – Kukeltje

+0

不,使用h:commandButton时,一切正常,这就是我们目前的做法。关于FacesFlows,我们不能使用它们,因为WebSphere是...特殊的:http://stackoverflow.com/questions/32522858/how-to-use-spring-webflow-popup-true-with-primefaces/32816661#comment52908245_32522858 – Iavra

回答

0

你明确执行 '操作' 与controller.createCustomer(客户)

<end-state id="end" view="customerCreated.xhtml"> 
    <on-entry> 
     <evaluate expression="controller.createCustomer(customer)"/> 
    </on-entry> 
</end-state> 

因此,这不是一个真正的最终状态。将其更改为动作状态,然后转换为空白/虚拟结束状态。

+0

我也试过这个,但那并没有改变任何东西。甚至试图通过多个行动状态。 – Iavra

+0

@ user3580311尝试在使用它的任何地方将“customer”明确定义为“flowScope.customer”。这可能是一个错误。我建议您进入堆栈跟踪并分析异常的内部原因 – Selwyn

相关问题