命令链接在具有URL查询字符串的页面内不起作用

时间:2012-02-11 10:24:55

标签: jsf jsf-2

我在一个页面中使用带有查询字符串的Outputlink重定向,例如,

   http://localhost:8070/ChennaiVolunteer/faces/gallery.xhtml?usrId=22

在gallery.xhtml中,我有一个命令链接

  <p:commandLink value="List of Activities" action="#{listingActivityData.listofactivities}"  ajax="false">
                    </p:commandLink>

我还在QueryString“usrId”

的getter中调用了一个函数

每当我点击commandLink时,我都会得到如下例外情况:

SEVERE: Servlet.service() for servlet [Faces Servlet] in context with path [/ChennaiVolunteer] threw exception [java.lang.IllegalArgumentException] with root cause
   java.lang.IllegalArgumentException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at javax.el.BeanELResolver.setValue(BeanELResolver.java:135)
at javax.el.CompositeELResolver.setValue(CompositeELResolver.java:83)
at org.apache.myfaces.el.unified.resolver.FacesCompositeELResolver.setValue(FacesCompositeELResolver.java:182)
at org.apache.myfaces.config.ManagedBeanBuilder.initializeProperties(ManagedBeanBuilder.java:349)
at org.apache.myfaces.config.ManagedBeanBuilder.buildManagedBean(ManagedBeanBuilder.java:169)
at org.apache.myfaces.el.unified.resolver.ManagedBeanResolver.createManagedBean(ManagedBeanResolver.java:303)
at org.apache.myfaces.el.unified.resolver.ManagedBeanResolver.getValue(ManagedBeanResolver.java:266)
at javax.el.CompositeELResolver.getValue(CompositeELResolver.java:67)
at org.apache.myfaces.el.unified.resolver.FacesCompositeELResolver.getValue(FacesCompositeELResolver.java:142)
at org.apache.myfaces.el.VariableResolverImpl.resolveVariable(VariableResolverImpl.java:65)
at org.apache.myfaces.el.convert.VariableResolverToELResolver.getValue(VariableResolverToELResolver.java:96)
at javax.el.CompositeELResolver.getValue(CompositeELResolver.java:67)
at org.apache.myfaces.el.unified.resolver.FacesCompositeELResolver.getValue(FacesCompositeELResolver.java:142)
at org.apache.el.parser.AstIdentifier.getValue(AstIdentifier.java:71)
at org.apache.el.parser.AstValue.getValue(AstValue.java:147)
at org.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:189)
at org.apache.myfaces.view.facelets.el.TagValueExpression.getValue(TagValueExpression.java:85)
at javax.faces.component._DeltaStateHelper.eval(_DeltaStateHelper.java:243)
at javax.faces.component.UIData.getValue(UIData.java:1153)
at javax.faces.component.UIData.createDataModel(UIData.java:1101)
at javax.faces.component.UIData.getDataModel(UIData.java:1078)
at javax.faces.component.UIData.setRowIndex(UIData.java:514)
at javax.faces.component.UIData.visitTree(UIData.java:1342)
at javax.faces.component.UIComponent.visitTree(UIComponent.java:770)
at javax.faces.component.UIComponentBase.visitTree(UIComponentBase.java:991)
at javax.faces.component.UIComponent.visitTree(UIComponent.java:770)
at javax.faces.component.UIComponentBase.visitTree(UIComponentBase.java:991)
at javax.faces.component.UIComponent.visitTree(UIComponent.java:770)
at javax.faces.component.UIComponentBase.visitTree(UIComponentBase.java:991)
at org.apache.myfaces.lifecycle.DefaultRestoreViewSupport.processComponentBinding(DefaultRestoreViewSupport.java:84)
at org.apache.myfaces.lifecycle.RestoreViewExecutor.execute(RestoreViewExecutor.java:142)
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 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:304)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.primefaces.webapp.filter.FileUploadFilter.doFilter(FileUploadFilter.java:79)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:224)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:169)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:929)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:405)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:964)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:515)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:304)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)

然后页面重定向到相同的Outputlink而没有查询字符串       http://localhost:8070/ChennaiVolunteer/faces/gallery.xhtml

1 个答案:

答案 0 :(得分:2)

我不确定为什么你得到了这个例外并且没有显示SSCCE没有帮助,但基于你正在使用MyFaces的堆栈跟踪,你在<h:dataTable>内有这个链接并且发生了异常在创建与表值相关联的托管bean时。 bean似乎是请求作用域,并且设置托管属性失败。

堆栈跟踪中应该还有另一个根本原因,它会详细告诉您设置托管bean属性的确切失败的原因。

根据确切的功能要求以及您到目前为止如何设计页面,我可以想到2个解决方案:

  1. 将bean放在视图范围而不是请求范围中。这样,每次与同一视图交互时,都不会对bean进行包装和重新创建。只要您使用相同的视图进行交互,它就会存在。

    @ManagedBean
    @ViewScoped
    public class ListingActivityData {
        // ...
    }
    
  2. 通过<f:param>将请求参数传递给后续请求。

    <p:commandLink ...>
        <f:param name="usrId" value="#{param.usrId}" />
    </p:commandLink>