[Seasar-user:11666] Re: [Teeda] 入力フォームを空でサブミットしたらPageで空文字で受け取りたい

Koichi Kobayashi [E-MAIL ADDRESS DELETED]
2007年 11月 15日 (木) 23:00:19 JST


小林 (koichik) です.

Date:    Wed, 14 Nov 2007 21:11:09 +0900
From:    木村 究道 <[E-MAIL ADDRESS DELETED]>
To:       [E-MAIL ADDRESS DELETED]
Subject: [Seasar-user:11648] [Teeda] 入力フォームを空でサブミットしたらPageで空文字で受け取りたい

> 入力フォームを空でサブミットした場合にPageクラスにnull
> が入ってこないようにできないか、調査しています。

null を空文字列に変換するインターセプタを
作って setter メソッドに適用してはどうでしょうか.
こんな感じ.

public class NullToEmptyStringInterceptor implements MethodInterceptor {
  public Object invoke(final MethodInvocation invocation) throws Throwable {
    final Method method = invocation.getMethod();
    final Class[] paramTypes = method.getParameterTypes();
    if (paramTypes.length == 1 && paramTypes[0] == String.class) {
      final Object[] params = invocation.getArguments();
      if (params[0] == null) {
        params[0] = "";
      }
    }
    return invocation.proceed();
  }
}

これを

<component name="pageCustomizer" class="org.seasar.framework.container.customizer.CustomizerChain">
  <initMethod name="addAspectCustomizer">
    <arg>"nullToEmptyStringInterceptor"</arg>
    <arg>"set.*"</arg>
  </initMethod>
</component>

のようにすることで,setXxx(String) の引数が null だと
空文字列が設定されます.

> >モデル側が空文字列で更新されちゃまずいと思うんですけど。
> 
> が、気になっているんですが、「モデル側」の意味がわからず
> 理解できていません。

JSF 用語ですね.
Teeda Extension の場合は Page クラスのことだと
考えていいと思います.


--
<signature>
   <name>Koichi Kobayashi</name>
   <e-mail>[E-MAIL ADDRESS DELETED]</e-mail>
</signature>




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