奇怪的JSF PrettyFaces异常

奇怪的JSF PrettyFaces异常,jsf,jsf-2,jboss,mojarra,prettyfaces,Jsf,Jsf 2,Jboss,Mojarra,Prettyfaces,嗨,我不时会遇到一个异常(无法复制),不知道该怎么办 以下是stacktrace: java.lang.NumberFormatException.forInputString 13:46:52,015 ERROR [org.apache.catalina.core.ContainerBase.[jboss.web].[atlasvirtualdomain].[/].[Faces Servlet]] (http--0.0.0.0-8040-399) Servlet.service() for s

嗨,我不时会遇到一个异常(无法复制),不知道该怎么办

以下是stacktrace:

java.lang.NumberFormatException.forInputString 13:46:52,015 ERROR [org.apache.catalina.core.ContainerBase.[jboss.web].[atlasvirtualdomain].[/].[Faces Servlet]] (http--0.0.0.0-8040-399) Servlet.service() for servlet Faces Servlet threw exception: java.lang.NumberFormatException: For input string: "+O.undefined"
    at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65) [rt.jar:1.7.0_07]
    at java.lang.Integer.parseInt(Integer.java:492) [rt.jar:1.7.0_07]
    at java.lang.Integer.valueOf(Integer.java:582) [rt.jar:1.7.0_07]
    at javax.faces.convert.IntegerConverter.getAsObject(IntegerConverter.java:116) [jboss-jsf-api_2.1_spec-2.0.1.Final.jar:2.0.1.Final]
    at com.ocpsoft.pretty.faces.beans.ParameterInjector.injectPathParams(ParameterInjector.java:85) [prettyfaces-jsf2-3.3.3.jar:]
    at com.ocpsoft.pretty.faces.beans.ParameterInjector.injectParameters(ParameterInjector.java:54) [prettyfaces-jsf2-3.3.3.jar:]
    at com.ocpsoft.pretty.faces.event.PrettyPhaseListener.afterPhase(PrettyPhaseListener.java:102) [prettyfaces-jsf2-3.3.3.jar:]
    at com.sun.faces.lifecycle.Phase.handleAfterPhase(Phase.java:189) [jsf-impl-2.1.7-jbossorg-2.jar:]
    at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:107) [jsf-impl-2.1.7-jbossorg-2.jar:]
    at com.sun.faces.lifecycle.RestoreViewPhase.doPhase(RestoreViewPhase.java:116) [jsf-impl-2.1.7-jbossorg-2.jar:]
    at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118) [jsf-impl-2.1.7-jbossorg-2.jar:]
    at org.apache.myfaces.extensions.cdi.jsf2.impl.listener.phase.CodiLifecycleWrapper.execute(CodiLifecycleWrapper.java:95) [myfaces-extcdi-bundle-jsf20-1.0.5.jar:1.0.5]
    at javax.faces.webapp.FacesServlet.service(FacesServlet.java:593) [jboss-jsf-api_2.1_spec-2.0.1.Final.jar:2.0.1.Final]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:329) [jbossweb-7.0.13.Final.jar:]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:248) [jbossweb-7.0.13.Final.jar:]
    at org.primefaces.webapp.filter.FileUploadFilter.doFilter(FileUploadFilter.java:82) [classes:]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:280) [jbossweb-7.0.13.Final.jar:]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:248) [jbossweb-7.0.13.Final.jar:]
    at utils.CharacterEncodingFilter.doFilter(CharacterEncodingFilter.java:32) [classes:]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:280) [jbossweb-7.0.13.Final.jar:]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:248) [jbossweb-7.0.13.Final.jar:]
    at com.ocpsoft.pretty.PrettyFilter.doFilter(PrettyFilter.java:145) [prettyfaces-jsf2-3.3.3.jar:]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:280) [jbossweb-7.0.13.Final.jar:]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:248) [jbossweb-7.0.13.Final.jar:]
    at utils.CharacterEncodingFilter.doFilter(CharacterEncodingFilter.java:32) [classes:]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:280) [jbossweb-7.0.13.Final.jar:]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:248) [jbossweb-7.0.13.Final.jar:]
    at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:840) [jbossweb-7.0.13.Final.jar:]
    at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:622) [jbossweb-7.0.13.Final.jar:]
    at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:560) [jbossweb-7.0.13.Final.jar:]
    at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:488) [jbossweb-7.0.13.Final.jar:]
    at com.ocpsoft.pretty.PrettyFilter.doFilter(PrettyFilter.java:137) [prettyfaces-jsf2-3.3.3.jar:]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:280) [jbossweb-7.0.13.Final.jar:]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:248) [jbossweb-7.0.13.Final.jar:]
    at utils.CharacterEncodingFilter.doFilter(CharacterEncodingFilter.java:32) [classes:]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:280) [jbossweb-7.0.13.Final.jar:]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:248) [jbossweb-7.0.13.Final.jar:]
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:275) [jbossweb-7.0.13.Final.jar:]
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:161) [jbossweb-7.0.13.Final.jar:]
    at org.jboss.as.jpa.interceptor.WebNonTxEmCloserValve.invoke(WebNonTxEmCloserValve.java:50) [jboss-as-jpa-7.1.1.Final.jar:7.1.1.Final]
    at org.jboss.as.web.security.SecurityContextAssociationValve.invoke(SecurityContextAssociationValve.java:153) [jboss-as-web-7.1.1.Final.jar:7.1.1.Final]
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:155) [jbossweb-7.0.13.Final.jar:]
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) [jbossweb-7.0.13.Final.jar:]
    at org.jboss.web.rewrite.RewriteValve.invoke(RewriteValve.java:466) [jbossweb-7.0.13.Final.jar:]
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) [jbossweb-7.0.13.Final.jar:]
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:368) [jbossweb-7.0.13.Final.jar:]
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:877) [jbossweb-7.0.13.Final.jar:]
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:671) [jbossweb-7.0.13.Final.jar:]
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:930) [jbossweb-7.0.13.Final.jar:]
    at java.lang.Thread.run(Thread.java:722) [rt.jar:1.7.0_07]
我想这其中一定有美丽的面孔:

at com.ocpsoft.pretty.faces.beans.ParameterInjector.injectPathParams(ParameterInjector.java:85) [prettyfaces-jsf2-3.3.3.jar:]
at com.ocpsoft.pretty.faces.beans.ParameterInjector.injectParameters(ParameterInjector.java:54) [prettyfaces-jsf2-3.3.3.jar:]
at com.ocpsoft.pretty.faces.event.PrettyPhaseListener.afterPhase(PrettyPhaseListener.java:102) [prettyfaces-jsf2-3.3.3.jar:]
我使用:

  • JBossAS7.1
  • 内置
  • 莫哈拉
  • JSF2.1
  • 科迪
  • 漂亮的面孔
编辑:

我不知何故设法修复了它(见我的答案),但我不明白我的修复是如何工作的

有时会调用此url(在所有Cookie被删除或不存在之后):

为什么JSSessionID会被我的美丽时光规则弄糊涂?idk…

错误是使用“id”作为url参数的名称:

  <url-mapping id="articleedit2"> 
      <pattern value="/duzenle/#{id: articleEdit.article_id}/" /> 
      <view-id value="/faces/article_edit.xhtml" />
      <action>#{articleEdit.initForEdit()}</action>
  </url-mapping>

#{articleEdit.initForEdit()}
然后用java重定向到id(伪代码:Redirect('something?id=123'))。不知怎的,jsessionid被混入了这个参数中然后

修复方法是将其重命名为id以外的其他名称:)

编辑:我又犯错误了。。。仍然不知道是什么触发了它

错误是使用“id”作为url参数的名称:

  <url-mapping id="articleedit2"> 
      <pattern value="/duzenle/#{id: articleEdit.article_id}/" /> 
      <view-id value="/faces/article_edit.xhtml" />
      <action>#{articleEdit.initForEdit()}</action>
  </url-mapping>

#{articleEdit.initForEdit()}
然后用java重定向到id(伪代码:Redirect('something?id=123'))。不知怎的,jsessionid被混入了这个参数中然后

修复方法是将其重命名为id以外的其他名称:)


编辑:我又犯错误了。。。仍然不知道是什么触发了它

很难告诉您那里到底出了什么问题,但我可以帮助您了解它发生的时间点

PrettyFaces阶段侦听器在RESTORE_VIEW阶段之后启动。在此阶段,PrettyFaces处理所有查询和路径参数。由于错误发生在
ParameterInjector.injectPathParams()期间,因此问题与某些路径参数有关

在注入发生之前,PrettyFaces检查参数绑定到的bean属性的类型。然后,PrettyFaces检查JSF是否为该类型注册了任何转换器。根据stacktrace,该字段似乎是一个整数,因为PrettyFaces调用
IntegerConverter
。转换器用于将路径参数的值从URL(字符串)转换为目标类型(int)

例外情况是,输入字符串
+O.undefined
不能转换为整数。看起来这个字符串是请求的URL的一部分

看看这个例子。假设您有这样一个映射:

<url-mapping id="userDetails">
  <pattern value="/user/#{userBean.id}" />
  <view-id value="/faces/user-details.jsf" /> 
</url-mapping>
<url-mapping id="userDetails">
  <pattern value="/user/#{ /[0-9]+/ userBean.id }" />
  <view-id value="/faces/user-details.jsf" /> 
</url-mapping>

有关详细信息,请参阅PrettyFaces文档。

很难告诉您到底哪里出了问题,但我可以帮助您了解它发生的时间点

PrettyFaces阶段侦听器在RESTORE_VIEW阶段之后启动。在此阶段,PrettyFaces处理所有查询和路径参数。由于错误发生在
ParameterInjector.injectPathParams()期间,因此问题与某些路径参数有关

在注入发生之前,PrettyFaces检查参数绑定到的bean属性的类型。然后,PrettyFaces检查JSF是否为该类型注册了任何转换器。根据stacktrace,该字段似乎是一个整数,因为PrettyFaces调用
IntegerConverter
。转换器用于将路径参数的值从URL(字符串)转换为目标类型(int)

例外情况是,输入字符串
+O.undefined
不能转换为整数。看起来这个字符串是请求的URL的一部分

看看这个例子。假设您有这样一个映射:

<url-mapping id="userDetails">
  <pattern value="/user/#{userBean.id}" />
  <view-id value="/faces/user-details.jsf" /> 
</url-mapping>
<url-mapping id="userDetails">
  <pattern value="/user/#{ /[0-9]+/ userBean.id }" />
  <view-id value="/faces/user-details.jsf" /> 
</url-mapping>

有关详细信息,请参阅PrettyFaces文档。

仅从stacktrace就很难理解这一点。请发布您的bean和xhtml代码。此外,在本例中,完整的stacktrace也没有多大帮助。只留下前几行。你的问题将更容易阅读(和帮助)。仅从stacktrace就很难理解这个问题。请发布您的bean和xhtml代码。此外,在本例中,完整的stacktrace也没有多大帮助。只留下前几行。您的问题将更易于阅读(和帮助)。感谢您的回答,如果我没有发现潜在的错误(请参阅我的答案),我想这将是一个伟大的工作!感谢您的回答,如果我没有发现潜在的bug(请参阅我的答案),我想这将是一个伟大的工作区!