2011-07-28 35 views
1

我想構建一個複合組件,它已經擁有一些按鈕,用戶可以添加其他按鈕。JSF 2.0複合組件按鈕操作無法通過cc:屬性設置

<composite:interface> 
    <composite:attribute name="action" required="false" default="cancel" targets="idCancelButton" /> 
</composite:interface> 

<composite:implementation> 
    <h:panelGroup 
     layout="block" 
     style="margin: 10px 0 10px 0; text-align: right;" 
     styleClass="commandButtons"> 
     <composite:insertChildren /> 
     <p:spacer width="10" height="10" /> 
     <h:commandButton 
      id="idCancelButton" 
      value="Cancel" 
     </h:commandButton> 
    </h:panelGroup> 
</composite:implementation> 

到組件的調用看起來像這樣

<buttons:cancelButtonGroup> 
    <p:commandButton id="idSaveButton" action="save" value="save" /> 
</buttons:cancelButtonGroup> 

我使用Primefaces(3.0M2)(P:的commandButton)在碼頭6 如同春天的Webflow和鑽嘴魚科2.0.6已經描述here使用行爲作爲屬性名稱與目標工作正常。唯一的問題是,可能需要在組件內使用多個預定義的按鈕。然後行動屬性不再工作了。我一直在玩很多,但我無法得到一個工作版本,我將該屬性更改爲cancelAction,並通過按鈕中的action =「#{cc.attrs.action}」引用它。請注意,當我使用Spring Webflow時,cancel是我轉換的名稱!我不想用返回類型String調用某個函數。我總是得到異常:

2011-07-28 11:15:30,071 [[email protected]] WARN exceptionHandler:185 - Handler execution resulted in exception 
org.springframework.webflow.execution.FlowExecutionException: Exception thrown in state 'managePhysicalHost' of flow 'host/manageHost' 
    at org.springframework.webflow.engine.impl.FlowExecutionImpl.wrap(FlowExecutionImpl.java:569) 
    at org.springframework.webflow.engine.impl.FlowExecutionImpl.resume(FlowExecutionImpl.java:263) 
    at org.springframework.webflow.executor.FlowExecutorImpl.resumeExecution(FlowExecutorImpl.java:169) 
    at org.springframework.webflow.mvc.servlet.FlowHandlerAdapter.handle(FlowHandlerAdapter.java:183) 
    at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:790) 
    at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:719) 
    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:644) 
    at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:560) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:727) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:820) 
    at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:511) 
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1166) 
    at info.novatec.np.server.web.filter.ConfigurableDelegatingFilter.doFilter(ConfigurableDelegatingFilter.java:51) 
    at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:237) 
    at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:167) 
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) 
    at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88) 
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76) 
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) 
    at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:388) 
    at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216) 
    at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182) 
    at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:765) 
    at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:440) 
    at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152) 
    at org.mortbay.jetty.Server.handle(Server.java:326) 
    at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:542) 
    at org.mortbay.jetty.HttpConnection$RequestHandler.content(HttpConnection.java:943) 
    at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:756) 
    at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:218) 
    at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404) 
    at org.mortbay.jetty.bio.SocketConnector$Connection.run(SocketConnector.java:228) 
    at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:582) 
Caused by: javax.faces.FacesException: Unable to resolve composite component from using page using EL expression '#{cc.attrs.cancelAction}' 
    at com.sun.faces.facelets.tag.TagAttributeImpl$AttributeLookupMethodExpression.invoke(TagAttributeImpl.java:444) 
    at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:88) 
    at org.springframework.faces.webflow.FlowActionListener.processAction(FlowActionListener.java:81) 
    at org.springframework.faces.model.SelectionTrackingActionListener.processAction(SelectionTrackingActionListener.java:55) 
    at javax.faces.component.UICommand.broadcast(UICommand.java:315) 
    at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:787) 
    at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1252) 
    at org.springframework.faces.webflow.FlowLifecycle.invokePhase(FlowLifecycle.java:127) 
    at org.springframework.faces.webflow.FlowLifecycle.execute(FlowLifecycle.java:70) 
    at org.springframework.faces.webflow.JsfView.processUserEvent(JsfView.java:114) 
    at org.springframework.webflow.engine.ViewState.handleEvent(ViewState.java:248) 
    at org.springframework.webflow.engine.ViewState.resume(ViewState.java:218) 
    at org.springframework.webflow.engine.Flow.resume(Flow.java:545) 
    at org.springframework.webflow.engine.impl.FlowExecutionImpl.resume(FlowExecutionImpl.java:259) 
    ... 31 more 
2011-07-28 11:15:30,074 [[email protected]] ERROR org.mortbay.log:87 - /ui/main 
org.springframework.webflow.execution.FlowExecutionException: Exception thrown in state 'managePhysicalHost' of flow 'host/manageHost' 
    at org.springframework.webflow.engine.impl.FlowExecutionImpl.wrap(FlowExecutionImpl.java:569) 
    at org.springframework.webflow.engine.impl.FlowExecutionImpl.resume(FlowExecutionImpl.java:263) 
    at org.springframework.webflow.executor.FlowExecutorImpl.resumeExecution(FlowExecutorImpl.java:169) 
    at org.springframework.webflow.mvc.servlet.FlowHandlerAdapter.handle(FlowHandlerAdapter.java:183) 
    at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:790) 
    at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:719) 
    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:644) 
    at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:560) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:727) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:820) 
    at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:511) 
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1166) 
    at info.novatec.np.server.web.filter.ConfigurableDelegatingFilter.doFilter(ConfigurableDelegatingFilter.java:51) 
    at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:237) 
    at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:167) 
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) 
    at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88) 
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76) 
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) 
    at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:388) 
    at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216) 
    at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182) 
    at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:765) 
    at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:440) 
    at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152) 
    at org.mortbay.jetty.Server.handle(Server.java:326) 
    at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:542) 
    at org.mortbay.jetty.HttpConnection$RequestHandler.content(HttpConnection.java:943) 
    at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:756) 
    at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:218) 
    at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404) 
    at org.mortbay.jetty.bio.SocketConnector$Connection.run(SocketConnector.java:228) 
    at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:582) 
Caused by: javax.faces.FacesException: Unable to resolve composite component from using page using EL expression '#{cc.attrs.cancelAction}' 
    at com.sun.faces.facelets.tag.TagAttributeImpl$AttributeLookupMethodExpression.invoke(TagAttributeImpl.java:444) 
    at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:88) 
    at org.springframework.faces.webflow.FlowActionListener.processAction(FlowActionListener.java:81) 
    at org.springframework.faces.model.SelectionTrackingActionListener.processAction(SelectionTrackingActionListener.java:55) 
    at javax.faces.component.UICommand.broadcast(UICommand.java:315) 
    at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:787) 
    at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1252) 
    at org.springframework.faces.webflow.FlowLifecycle.invokePhase(FlowLifecycle.java:127) 
    at org.springframework.faces.webflow.FlowLifecycle.execute(FlowLifecycle.java:70) 
    at org.springframework.faces.webflow.JsfView.processUserEvent(JsfView.java:114) 
    at org.springframework.webflow.engine.ViewState.handleEvent(ViewState.java:248) 
    at org.springframework.webflow.engine.ViewState.resume(ViewState.java:218) 
    at org.springframework.webflow.engine.Flow.resume(Flow.java:545) 
    at org.springframework.webflow.engine.impl.FlowExecutionImpl.resume(FlowExecutionImpl.java:259) 
    ... 31 more 
vax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:787) 
    at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1252) 
    at org.springframework.faces.webflow.FlowLifecycle.invokePhase(FlowLifecycle.java:127) 
    at org.springframework.faces.webflow.FlowLifecycle.execute(FlowLifecycle.java:70) 
    at org.springframework.faces.webflow.JsfView.processUserEvent(JsfView.java:114) 
    at org.springframework.webflow.engine.ViewState.handleEvent(ViewState.java:248) 
    at org.springframework.webflow.engine.ViewState.resume(ViewState.java:218) 
    at org.springframework.webflow.engine.Flow.resume(Flow.java:545) 
    at org.springframework.webflow.engine.impl.FlowExecutionImpl.resume(FlowExecutionImpl.java:259) 
    ... 31 more 

我一直在讀很多很多帖子和文章關於複合成分,但似乎沒有人使用Spring的Webflow將它們混合。或者它不值得注意,我的問題在其他地方被埋沒。 :)

回答