2013-06-28 33 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来修复它。

相关问题