0

こんにちは、時々例外が発生し (再現できません)、どうすればよいかわかりません..

スタックトレースは次のとおりです。

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]

私はどういうわけかprettyfacesがこれに関与していると思います:

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:]

私が使う:

  • JBoss AS 7.1
  • 作り付け
  • モハラ
  • JSF2.1
  • CODI
  • かわいい顔

編集:

なんとか修正できましたが(私の回答を参照)、修正の仕組みがわかりません...

場合によっては、この URL が呼び出されます (すべての Cookie が削除された後、または存在しなくなった後):

http://.../firsat/655/something/;jsessionid=uNCQNxYxmmuQak6bcfpfZTG-.undefined

jsessionid が私の prettytime ルールと混同されたのはなぜですか? そうですね...

4

2 に答える 2

3

何がうまくいかないのかを正確に説明するのは非常に困難ですが、どの時点で問題が発生するかを理解するのに役立ちます.

PrettyFaces フェーズ リスナーは、RESTORE_VIEW フェーズの後に開始されます。この段階で、PrettyFaces はすべてのクエリおよびパス パラメータを処理します。中にエラーが発生するためParameterInjector.injectPathParams()、問題はいくつかのパス パラメータに関連しています。

インジェクションが発生する前に、PrettyFaces はパラメーターがバインドされている Bean プロパティのタイプをチェックします。次に、PrettyFaces は、JSF にそのタイプ用に登録されたコンバーターがあるかどうかを確認します。スタックトレースによると、PrettyFaces が を呼び出すため、フィールドは Integer のようIntegerConverterです。コンバーターは、path パラメーターの値を URL (文字列) からターゲットの型 (int) に変換するために使用されます。

例外は、入力文字列+O.undefinedを整数に変換できないことを示しています。したがって、この文字列は要求された URL の一部のようです。

この例を見てください。次のようなマッピングがあるとします。

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

何らかの理由で誰かが URL/user/+O.undefinedを要求した場合、まさにこの例外が発生します。ですから、これが起こっている理由を見つける必要があると思います。アクセスログにヒントが見つかるかも!?

ところで: 正規表現を使用して、パス パラメーターが特定の式と一致する場合にのみマッピングが処理されるようにすることもできます。このようなもの:

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

詳細については、PrettyFaces ドキュメントのこの章を参照してください。

于 2012-11-16T16:02:23.493 に答える
0

バグは、url パラメーターの名前として「id」を使用することでした。

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

そして、java で id にリダイレクトします (疑似コード: Redirect('something?id=123'))。どういうわけか jsessionid がこのパラメータに混ざってしまいました...

修正は、名前をid以外の名前に変更することでした:)

編集:バグが再び発生しました...何が原因なのかまだわかりません

于 2012-11-16T16:01:55.430 に答える