[Seasar-user:14998] Re: [cubby] ActionへのForwardについて

Mitsutaka Sato [E-MAIL ADDRESS DELETED]
2008年 7月 11日 (金) 10:49:41 JST


佐藤です。
早速試してみました。

まず、paramにnullを指定してのForwardは成功しました。

次に、遷移元Actionに用意した
 public Map<String,String[]> param;
に無事リクエストパラメータが格納されていたので、
これを第三引数として渡したところ、ClassCastExceptionが出ました。

ちなみにparamをJSONSerializerでserializeしてログ出力したときの表示は
{__descriptor:"v5432",__media:"m"}
でした。
これらは、@Pathでパラメータに設定されたものです。

javax.servlet.ServletException: java.lang.String cannot be cast to
[Ljava.lang.String;
	org.seasar.cubby.filter.CubbyFilter.doFilter(CubbyFilter.java:92)
	org.seasar.framework.container.hotdeploy.HotdeployFilter.doFilter(HotdeployFilter.java:75)
	org.seasar.framework.container.filter.S2ContainerFilter.doFilter(S2ContainerFilter.java:77)
	org.seasar.cubby.filter.RequestRoutingFilter.doFilter(RequestRoutingFilter.java:150)
	com.valuecardservice.site.filter.StaticResourcePathFilter.doFilter(StaticResourcePathFilter.java:64)
	org.seasar.framework.container.hotdeploy.HotdeployFilter.doFilter(HotdeployFilter.java:63)
	org.seasar.framework.container.filter.S2ContainerFilter.doFilter(S2ContainerFilter.java:77)
	org.seasar.extension.filter.EncodingFilter.doFilter(EncodingFilter.java:69)

原因

java.lang.ClassCastException: java.lang.String cannot be cast to
[Ljava.lang.String;
	org.seasar.cubby.action.Forward.<init>(Forward.java:106)
	com.valuecardservice.site.action.RootAction.loginMobile(RootAction.java:115)
	com.valuecardservice.site.action.RootAction$$EnhancedByS2AOP$$7e4019.$$loginMobile$$invokeSuperMethod$$(RootAction$$EnhancedByS2AOP$$7e4019.java)
	com.valuecardservice.site.action.RootAction$$EnhancedByS2AOP$$7e4019$$MethodInvocation$$loginMobile3.proceed(MethodInvocationClassGenerator.java)
	org.seasar.framework.aop.impl.NestedMethodInvocation.proceed(NestedMethodInvocation.java:55)
	org.seasar.cubby.interceptor.ValidationInterceptor.invoke(ValidationInterceptor.java:135)
	org.seasar.framework.aop.impl.NestedMethodInvocation.proceed(NestedMethodInvocation.java:53)
	org.seasar.framework.container.customizer.AspectCustomizer$LookupAdaptorInterceptor.invoke(AspectCustomizer.java:198)
	com.valuecardservice.site.action.RootAction$$EnhancedByS2AOP$$7e4019$$MethodInvocation$$loginMobile3.proceed(MethodInvocationClassGenerator.java)
	org.seasar.framework.aop.impl.NestedMethodInvocation.proceed(NestedMethodInvocation.java:55)
	org.seasar.cubby.interceptor.InitializeInterceptor.invoke(InitializeInterceptor.java:106)
	org.seasar.framework.aop.impl.NestedMethodInvocation.proceed(NestedMethodInvocation.java:53)
	org.seasar.framework.container.customizer.AspectCustomizer$LookupAdaptorInterceptor.invoke(AspectCustomizer.java:198)
	com.valuecardservice.site.action.RootAction$$EnhancedByS2AOP$$7e4019$$MethodInvocation$$loginMobile3.proceed(MethodInvocationClassGenerator.java)
	org.seasar.extension.tx.DefaultTransactionCallback.execute(DefaultTransactionCallback.java:58)
	org.seasar.extension.tx.adapter.JTATransactionManagerAdapter.required(JTATransactionManagerAdapter.java:65)
	org.seasar.extension.tx.RequiredInterceptor.invoke(RequiredInterceptor.java:41)
	com.valuecardservice.site.action.RootAction$$EnhancedByS2AOP$$7e4019$$MethodInvocation$$loginMobile3.proceed(MethodInvocationClassGenerator.java)
	org.seasar.framework.aop.interceptors.TraceInterceptor.invoke(TraceInterceptor.java:73)
	com.valuecardservice.site.action.RootAction$$EnhancedByS2AOP$$7e4019$$MethodInvocation$$loginMobile3.proceed(MethodInvocationClassGenerator.java)
	com.valuecardservice.site.action.RootAction$$EnhancedByS2AOP$$7e4019.loginMobile(RootAction$$EnhancedByS2AOP$$7e4019.java)
	sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
	sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
	java.lang.reflect.Method.invoke(Unknown Source)
	org.seasar.cubby.controller.impl.ActionProcessorImpl.invoke(ActionProcessorImpl.java:148)
	org.seasar.cubby.controller.impl.ActionProcessorImpl.process(ActionProcessorImpl.java:103)
	org.seasar.cubby.filter.CubbyFilter.doFilter(CubbyFilter.java:89)
	org.seasar.framework.container.hotdeploy.HotdeployFilter.doFilter(HotdeployFilter.java:75)
	org.seasar.framework.container.filter.S2ContainerFilter.doFilter(S2ContainerFilter.java:77)
	org.seasar.cubby.filter.RequestRoutingFilter.doFilter(RequestRoutingFilter.java:150)
	com.valuecardservice.site.filter.StaticResourcePathFilter.doFilter(StaticResourcePathFilter.java:64)
	org.seasar.framework.container.hotdeploy.HotdeployFilter.doFilter(HotdeployFilter.java:63)
	org.seasar.framework.container.filter.S2ContainerFilter.doFilter(S2ContainerFilter.java:77)
	org.seasar.extension.filter.EncodingFilter.doFilter(EncodingFilter.java:69)

以上よろしくお願いいたします。


2008/7/11 Mitsutaka Sato <[E-MAIL ADDRESS DELETED]>:

> 補足です。
>
> >リクエストパラメータのMapはActionクラスにインジェクションされるんでしょうか?
>
> この質問の意図は、ActionにForwardするために手でMapを構築するのが
> めんどくさいなあと思ったからです^^;
> 繊維元のActionにparamがインジェクションされるのであればそれを渡すだけで
> すみますので。。
>
>
> 2008/7/11 Mitsutaka Sato <[E-MAIL ADDRESS DELETED]>:
>
> 佐藤です。
>> すばやい対応ありがとうございます。
>> 早速試してみます。
>>
>> 試す前に質問ばかりで恐縮ですが、リクエストパラメータのMapは
>> SAStrutsのように
>> >public Map<String,String[]> param;
>> でActionクラスにインジェクションされるんでしょうか?
>>
>> また、1.1が2週間以内にリリースとのことで、
>> 本番運用までにそちらに移行することも検討したいのですが、
>> コード書き換えが必要な部分についてどこかに載っていましたら
>> 教えていただけますと助かります。
>>
>> 以上よろしくお願いいたします。
>>
>>
>> 2008/7/10 AGATA Toshitaka <[E-MAIL ADDRESS DELETED]>:
>>
>> 縣です。
>>>
>>> コミッタ間で話し合って、ActionからActionへのフォワード機能を
>>> 1.0.5でバックポートすることにしました。
>>> 1.0.5のSNAPSHOTをあげていますので、よろしかったらお試しください。
>>>
>>> http://maven.seasar.org/maven2-snapshot/org/seasar/cubby/cubby/1.0.5-SNAPSHOT/cubby-1.0.5-20080710.065258-1.jar
>>>
>>> 以下のコンストラクタが追加されていますので、
>>> forward先のActionクラスとメソッド名、パラメータ(nullも可)で呼び出して
>>> 使用します。
>>>
>>> public Forward(final Class<? extends Action> actionClass,
>>>  String methodName, final Map<String, String[]> parameters);
>>>
>>>
>>> AGATA Toshitaka さんは書きました:
>>> > 佐藤さん
>>> >
>>> > 縣です。
>>> >
>>> >> このようにPathを定義したActionに対して、別のActionからForwardしようと
>>> > すると404になります。
>>> >
>>> > Cubbyの1.0系では、ActionからActionのForwardする機能は用意していません。
>>> > 1.1系ではクラス名とメソッド名を指定して、遷移が可能になっています。
>>> >
>>> > [CUBBY-68] クラス+メソッド名でフォワード、リダイレクトの機能
>>> > https://www.seasar.org/issues/browse/CUBBY-68
>>> >
>>> > 1.1系は今から2週間以内にリリース予定です。
>>> > 早めに必要であれば、SNAPSHOTを使って開発をおこなうということも、
>>> > 一応可能です。
>>> > 1.0と1.1では、一部仕様が変更になった箇所がありますので、
>>> > 若干のコードの書き換えが必要になります。
>>> >
>>> > また、1.0系でも、ActionからActionの遷移は内部的なパスを使えば、
>>> > おそらく可能です。
>>> > こちらはいちど動かし見て、結果をご連絡しますね。
>>> >
>>> > 以上です。
>>> >
>>> > Mitsutaka Sato さんは書きました:
>>> >> 佐藤と申します。
>>> >> いつもお世話になっております。
>>> >>
>>> >> URLの書き換えについて質問があります。
>>> >>
>>> >>     @Path("/{__descriptor}/{__media,[m]}/balance")
>>> >>     public ActionResult mobile() {
>>> >>
>>> >> このようにPathを定義したActionに対して、別のActionからForwardしようとすると404になります。
>>> >> (Redirectだと問題なく成功します。)
>>> >>
>>> >>   return new Forward("/" + __descriptor + "/" + __media + "/balance");
>>> >>
>>> >> このようなケースでは、
>>> >>
>>> >>  return new Forward("/balance?__descriptor=" + __descriptor +
>>> "&__media=" +
>>> >> __media )
>>> >>
>>> >> のようにしないといけないんでしょうか?
>>> >>
>>> >> 以上よろしくお願いします。
>>> >>
>>> >>
>>> >>
>>> >>
>>> ------------------------------------------------------------------------
>>> >>
>>> >> _______________________________________________
>>> >> Seasar-user mailing list
>>> >> [E-MAIL ADDRESS DELETED]
>>> >> https://ml.seasar.org/mailman/listinfo/seasar-user
>>> >
>>> >
>>>
>>>
>>> --
>>> -------------------------------
>>> 株式会社ヌーラボ 縣 俊貴
>>> Mail : [E-MAIL ADDRESS DELETED]
>>> HP   : http://www.nulab.co.jp/
>>> TEL  : 03-5766-6256(東京)
>>>      092-724-0020(福岡)
>>> -------------------------------
>>> _______________________________________________
>>> Seasar-user mailing list
>>> [E-MAIL ADDRESS DELETED]
>>> https://ml.seasar.org/mailman/listinfo/seasar-user
>>>
>>
>>
>
-------------- next part --------------
HTMLの添付ファイルを保管しました...
URL: <http://ml.seasar.org/archives/seasar-user/attachments/20080711/9725b2b8/attachment-0001.html>


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