[Seasar-user:3899] Re: [S2JSF(Teeda)] 自作のvalidatorを組み込むとNullPointerException

Shinpei Ohtani [E-MAIL ADDRESS DELETED]
2006年 6月 19日 (月) 21:25:17 JST


shotです。

06/06/19 に Shinpei Ohtani<[E-MAIL ADDRESS DELETED]> さんは書きました:
> shotです。
>
> 06/06/19 に O.K.U.<[E-MAIL ADDRESS DELETED]> さんは書きました:
> > O.K.U.@Teeda版への乗り換え検討中です。お世話になります。
>
> いつもご指摘ありがとうございます^^
> 下記の件みてみます。
> しばしお待ちください。
>
> ちなみにredirectの件は、Teedaのバグでした。
> 既に修正済みです。
> 次のバージョン(beta4)で解消されます。
>
>
> CommandLinkでJavaScriptがオフの場合の挙動の件は
> 現在MyFacesに近いような形で実装で実装中です。
> (ただMyFacesのこの部分のアーキテクチャはSession依存なので、
> ちょっと内部構成は検討が必要です。)
>
>
> > S2JSF 1.1.0 Beta1 (Teeda版)で、自作のvalidatorを組み込むと
> > org.seasar.jsf.util.UIComponentUtil.callValidators()で
> > NullPointerException が発生します。
> >
> > S2JSF Example 1.1.0 Beta1 を使った再現手順
> >
> > (1)
> > 以下のソースを追加、コンパイルしてできたTestValidator.classを
> > WEB-INF/classes/examples/jsf/validator (ディレクトリを作成)
> > に配置
> >
> > − src/main/java/examples/jsf/validator/TestValidator.java] −−−−−−−−−−
> >
> > package examples.jsf.validator;
> >
> > import javax.faces.component.UIComponent;
> > import javax.faces.context.FacesContext;
> > import javax.faces.validator.Validator;
> >
> > public class TestValidator implements Validator {
> >
> >     public void validate(FacesContext context,
> >                          UIComponent component,
> >                          Object value){
> >         ;
> >     }
> > }
> > −−−−−−−−−−
> >
> > (2)
> > WEB-INF/classes/examples/jsf/dicon/allvalidator.dicon に
> > <component name="testValidator" class="examples.jsf.validator.TestValidator" />
> > を追加
> >
> > (3)
> > validator/validator.html で
> > m:binding="#{ageValidator} を m:binding="#{testValidator}" に変更
> >
> > (4)
> > デプロイして実行。
> > Age:の入力欄にaaaと入力し、submitボタンを押すと MyFaces版では
> > 特に何もおきません(正常)が、同様のことを s2-jsf-1.1.0-beta-1 で
> > 行なうと以下のようなNullPointerExceptionが発生してしまいます。
> > −−−−−−−−−−
> > java.lang.NullPointerException
> >         org.seasar.jsf.util.UIComponentUtil.callValidators(UIComponentUtil.java:66)
> >         org.seasar.jsf.component.html.S2HtmlInputText.validate(S2HtmlInputText.java:73)
> >         javax.faces.component.UIInput.executeValidate(UIInput.java:406)
> >         javax.faces.component.UIInput.processValidators(UIInput.java:187)
> >         javax.faces.component.ComponentUtils_.processAppropriatePhaseAction(ComponentUtils_.java:49)
> >         javax.faces.component.UIForm.processAppropriateAction(UIForm.java:84)
> >         javax.faces.component.UIForm.processValidators(UIForm.java:72)
> >         javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:429)
> >         javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:429)
> >         javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:429)
> >         javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:429)
> >         javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:429)
> >         javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:429)
> >         javax.faces.component.UIViewRoot.processValidators(UIViewRoot.java:103)
> >         org.seasar.jsf.component.S2UIViewRoot.processValidators(S2UIViewRoot.java:68)
> >         org.seasar.jsf.lifecycle.LifecycleImpl.processValidations(LifecycleImpl.java:149)
> >         org.seasar.jsf.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:89)
> >         javax.faces.webapp.FacesServlet.service(FacesServlet.java:76)
> >         org.seasar.extension.filter.EncodingFilter.doFilter(EncodingFilter.java:62)
> >         org.seasar.framework.container.filter.S2ContainerFilter.doFilter(S2ContainerFilter.java:63)
> >         org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:81)
> > −−−−−−−−−−

上記の件、原因わかりました。
TeedaのUIComponentBaseでrestoreするときの条件が
まずかったです。

修正は既にtrunkにコミットしましたので、
次のバージョン(1.0 beta4)に反映されます。


以上、宜しくお願いします。



Seasar-user メーリングリストの案内