2016-06-29 18 views
0

Ich habe eine WebFlow mit einem Eingang:Frühling Webflow & PrimeFaces Ausdruckssprache - Bean-Methode wird als eine Eigenschaft in websphere interpretiert, aber nicht tomcat

<input name="allocationConfig" required="true"/> 

, die dann verwendet wird, um die korrekte Steuerung zu erhalten, wenn für eine Suche Liste von Geschäften in einem automatischen Vervollständigung PrimeFaces Eingang:

<p:autoComplete completeMethod="#{controllerLookup.get(allocationConfig).searchForStore}" ... /> 

controllerLookup ist eine Feder bean, die eine bestimmte Steuereinheit (die auch eine Feder Bohne ist) gibt, wenn die von der allocationConfig WebFlow weitergegeben. Der Controller gibt dann eine Liste von Speichern zurück, die in der Autovervollständigungseingabe angezeigt werden sollen.

Dies funktioniert gut, wenn ich es auf Tomcat laufen, aber wenn es auf Websphere eingesetzt wird, bekomme ich diesen Fehler:

javax.el.PropertyNotFoundException: /WEB-INF/flows/manage-allocation/manage-allocation.xhtml @76,97 completeMethod="#{controllerLookup.get(allocationConfig).searchForStore}": Property 'get' not found on type com.web.controller.allocations.ControllerLookup 
    at com.sun.faces.facelets.el.TagMethodExpression.invoke(Unknown Source) 
    at org.primefaces.component.autocomplete.AutoComplete.broadcast(AutoComplete.java:459) 
    at javax.faces.component.UIViewRoot.broadcastEvents(Unknown Source) 
    at javax.faces.component.UIViewRoot.processDecodes(Unknown Source) 
    at org.springframework.faces.webflow.FlowLifecycle.invokePhase(FlowLifecycle.java:88) 
    at org.springframework.faces.webflow.FlowLifecycle.execute(FlowLifecycle.java:69) 
    at org.springframework.faces.webflow.JsfView.processUserEvent(JsfView.java:111) 
    at org.springframework.webflow.engine.ViewState.handleEvent(ViewState.java:225) 
    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:919) 
    at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:851) 
    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:953) 
    at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:855) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:595) 
    at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:829) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:668) 
    at com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java:1230) 
    at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:779) 
    at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:478) 
    at com.ibm.ws.webcontainer.servlet.ServletWrapperImpl.handleRequest(ServletWrapperImpl.java:178) 
    at com.ibm.ws.webcontainer.filter.WebAppFilterChain.invokeTarget(WebAppFilterChain.java:136) 
    at com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:97) 
    at com.pcmsgroup.v21.web.config.AuthFilter.doFilter(AuthFilter.java:46) 
    at com.ibm.ws.webcontainer.filter.FilterInstanceWrapper.doFilter(FilterInstanceWrapper.java:195) 
    at com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:91) 
    at com.ibm.ws.webcontainer.filter.WebAppFilterManager.doFilter(WebAppFilterManager.java:964) 
    at com.ibm.ws.webcontainer.filter.WebAppFilterManager.invokeFilters(WebAppFilterManager.java:1104) 
    at com.ibm.ws.webcontainer.servlet.CacheServletWrapper.handleRequest(CacheServletWrapper.java:87) 
    at com.ibm.ws.webcontainer.WebContainer.handleRequest(WebContainer.java:914) 
    at com.ibm.ws.webcontainer.WSWebContainer.handleRequest(WSWebContainer.java:1662) 
    at com.ibm.ws.webcontainer.channel.WCChannelLink.ready(WCChannelLink.java:200) 
    at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleDiscrimination(HttpInboundLink.java:463) 
    at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleNewRequest(HttpInboundLink.java:530) 
    at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.processRequest(HttpInboundLink.java:316) 
    at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.ready(HttpInboundLink.java:287) 
    at com.ibm.ws.tcp.channel.impl.NewConnectionInitialReadCallback.sendToDiscriminators(NewConnectionInitialReadCallback.java:214) 
    at com.ibm.ws.tcp.channel.impl.NewConnectionInitialReadCallback.complete(NewConnectionInitialReadCallback.java:113) 
    at com.ibm.ws.tcp.channel.impl.AioReadCompletionListener.futureCompleted(AioReadCompletionListener.java:175) 
    at com.ibm.io.async.AbstractAsyncFuture.invokeCallback(AbstractAsyncFuture.java:217) 
    at com.ibm.io.async.AsyncChannelFuture.fireCompletionActions(AsyncChannelFuture.java:161) 
    at com.ibm.io.async.AsyncFuture.completed(AsyncFuture.java:138) 
    at com.ibm.io.async.ResultHandler.complete(ResultHandler.java:204) 
    at com.ibm.io.async.ResultHandler.runEventProcessingLoop(ResultHandler.java:775) 
    at com.ibm.io.async.ResultHandler$2.run(ResultHandler.java:905) 
    at com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java:1865) 

Es scheint, dass Websphere falsch controllerLookup.get als Eigenschaft interpretiert, während Tomcat korrekt interpretiert es als eine Methode.

Irgendwelche Ideen, warum Tomcat und Websphere sind meine EL anders zu interpretieren? oder wie man es repariert?

+0

, weil sie mit einem anderen EL Implementierung versenden. –

+0

@ M.Deinum Das war meine Vermutung. Ich nehme an, was ich wirklich will, ist ein Workaround. –

+0

Wenn du weißt, dass sie beide mit einer anderen EL geliefert werden, was wäre dann der Weg dies zu lösen ... Ich denke du solltest diese Antwort schon wissen. –

Antwort

0

Ich habe mit einer Vermeidung des Problems kommen, die bisher zu funktionieren scheint.

Ich habe die Unterschrift der Look-up-Methode geändert getController ohne Parameter aufgerufen werden. Stattdessen erhält er das Config-Objekt von Spring Flussbereich:

public AllocationsController getController() { 
    AllocationConfig config = (AllocationConfig) RequestContextHolder.getRequestContext().getFlowScope().get("allocationConfig"); 
    // Determine the concrete type of controller depending on the config, and return it. 
} 

und in dem Tag für den autocomplete Eingang:

<p:autoComplete completeMethod="#{controllerLookup.controller.searchForStore}" ... />