2013-06-28 16 views
0

使用BalusC的這種技術(Pass Argument to a composite-component action attribute),我已成功地將參數傳遞給複合組件中的方法,但是這似乎適用於Mojarra,但不適用於MyFaces 2.0.4-2.0.5(打包在Websphere 8.5 + OpenWebBeans內)。我後我的下面複合組件中方法的傳遞參數在MyFaces上不起作用

代碼這是我的CC

<cc:interface>  
    <cc:attribute name="value" /> 
    <cc:attribute name="bean" /> 
    <cc:attribute name="myAction" /> 
    <cc:attribute name="property" /> 
</cc:interface> 
<cc:implementation> 
    <rich:dataTable value="#{cc.attrs.value}" var="galleryFile"> 
     ... 
     <a4j:commandLink execute="@this" action="#{cc.attrs.bean[cc.attrs.myAction]}"> 
      <f:setPropertyActionListener 
          target="#{cc.attrs.bean[cc.attrs.property]}" 
          value="#{galleryFile}" /> 
     </a4j:commandLink> 
    </rich:dataTable> 
</cc:implementation> 

從外面看我這樣做

<mycomp:reportGallery value="#{listPopup.files}" id="listReportGallery" 
     bean="#{listPopup}" myAction="fileSelected" property="selectedFile"/> 

內ListPopup ViewScoped豆,我有

@ManagedBean(name = "listPopup") 
@ViewScoped 
public class ListPopup implements Serializable { 
    private EpiFSObject selectedFile; 
    public void setSelectedFile(final EpiFSObject selectedFile) { 
     this.selectedFile = selectedFile; 
    } 
    public EpiFSObject getSelectedFile() { 
     return selectedFile; 
    } 
    public void fileSelected() { 
     ... 
    } 
} 

當我點擊在鏈接上,我得到了這個異常

javax.el.PropertyNotFoundException: /resources/infor/reportGallery.xhtml at line 79 and column 89 action="#{cc.attrs.bean[cc.attrs.myAction]}": Property 'fileSelected' not found on type com.infor.om.ui.bean.ListPopup 
at org.apache.myfaces.view.facelets.el.TagValueExpression.getValue(TagValueExpression.java:89) 
at org.apache.myfaces.view.facelets.el.LocationValueExpression.getValue(LocationValueExpression.java:90) 

所以它fileSelected是一個屬性,而不是一個方法。有誰知道如何解決這個問題嗎?我的猜測是,這個問題來自的OpenWebBeans

編輯我從BalusC建議做一個黑客提供getFileSelected(),因爲它要求fileSelected的屬性,而不是方法

public String getFileSelected(){ 
    fileSelected(); 
    return ""; 
} 

,但我仍然有以下例外

java.lang.NullPointerException 
at org.apache.myfaces.view.facelets.el.ValueExpressionMethodExpression.getExpressionString(ValueExpressionMethodExpression.java:70) 
at org.apache.myfaces.view.facelets.el.TagMethodExpression.getExpressionString(TagMethodExpression.java:101) 
at javax.faces.component._MethodExpressionToMethodBinding.getExpressionString(_MethodExpressionToMethodBinding.java:60) 
at org.apache.myfaces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:97) 
at javax.faces.component.UICommand.broadcast(UICommand.java:120) 
at org.richfaces.component.RowKeyContextEventWrapper.broadcast(RowKeyContextEventWrapper.java:104) 
at org.richfaces.component.UIDataAdaptor.broadcast(UIDataAdaptor.java:448) 
at javax.faces.component.UIViewRoot._broadcastAll(UIViewRoot.java:973) 
at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:275) 
at javax.faces.component.UIViewRoot._process(UIViewRoot.java:1285) 
at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:711) 
at org.apache.myfaces.lifecycle.InvokeApplicationExecutor.execute(InvokeApplicationExecutor.java:34) 
at org.apache.myfaces.lifecycle.LifecycleImpl.executePhase(LifecycleImpl.java:171) 
at org.apache.myfaces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118) 
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:189) 
at com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java:1225) 
at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:775) 
at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:457) 
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.infor.om.ui.servlets.filter.LoginFilter.doFilter(LoginFilter.java:151) 
at com.ibm.ws.webcontainer.filter.FilterInstanceWrapper.doFilter(FilterInstanceWrapper.java:195) 
at com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:91) 
at com.infor.om.ui.servlets.filter.ResponseFilter.doFilter(ResponseFilter.java:110) 
at com.ibm.ws.webcontainer.filter.FilterInstanceWrapper.doFilter(FilterInstanceWrapper.java:195) 
at com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:91) 
at com.infor.om.ui.servlets.filter.LoginFilter.doFilter(LoginFilter.java:151) 
at com.ibm.ws.webcontainer.filter.FilterInstanceWrapper.doFilter(FilterInstanceWrapper.java:195) 
at com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:91) 
at com.infor.om.ui.filter.RequestHeaderLogger.doFilter(RequestHeaderLogger.java:77) 
at com.ibm.ws.webcontainer.filter.FilterInstanceWrapper.doFilter(FilterInstanceWrapper.java:195) 
at com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:91) 
at com.infor.om.ui.filter.RequestHeaderLogger.doFilter(RequestHeaderLogger.java:77) 
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:928) 
at com.ibm.ws.webcontainer.filter.WebAppFilterManager.invokeFilters(WebAppFilterManager.java:1025) 
at com.ibm.ws.webcontainer.servlet.CacheServletWrapper.handleRequest(CacheServletWrapper.java:87) 
at com.ibm.ws.webcontainer.WebContainer.handleRequest(WebContainer.java:908) 
at com.ibm.ws.webcontainer.WSWebContainer.handleRequest(WSWebContainer.java:1662) 
at com.ibm.ws.webcontainer.channel.WCChannelLink.ready(WCChannelLink.java:195) 
at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleDiscrimination(HttpInboundLink.java:459) 
at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleNewRequest(HttpInboundLink.java:526) 
at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.processRequest(HttpInboundLink.java:312) 
at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.ready(HttpInboundLink.java:283) 
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:165) 
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:1815) 

請幫忙。謝謝

+0

MyFaces 2.0.4-5很舊。您是否可以升級到例如2.1.12或2.0.18以排除年齡不是原因? – BalusC

+0

@BalusC:我不能。 MyFaces jar與WebSphere 8.5打包在一起 –

+0

好吧,你可以通過將方法重命名爲getFileSelected()來破解它。 – BalusC

回答

1

那麼,我已經通過創建一個具有這些方法的通用抽象bean來解決此問題,所以現在我只需要傳入該bean並調用cc.attrs.bean.commonMethod()而不是cc.attrs.bean[cc.attrs.myAction]。這將解決問題。不知道爲什麼myfacesOWB不明白這句法cc.attrs.bean[cc.attrs.myAction]

1

我們有同樣的問題。 我們可以通過將AppServer從8.5.0.0更新到8.5.0.2來修復它。

相關問題