[cubby-user:150] Re: Cubby1.1.5のFormTagの挙動について

BABA,Yasuyuki [E-MAIL ADDRESS DELETED]
2009年 6月 1日 (月) 15:35:29 JST


馬場です。

Sysdeo ですか。
修正する方向で検討してみます。

お急ぎであれば、以下のようなフィルタを作成して RequestRoutingFilter の前
に適用して、コンテキストパスが "/" なら "" に置き換えるようにしても、回
避できると思います。

public void doFilter(ServletRequest req, ServletResponse res,
		FilterChain chain) throws IOException, ServletException {
	ServletRequest wrappedRequest = new RootContextPathRequestWrapper(
			(HttpServletRequest) req);
	chain.doFilter(wrappedRequest, res);
}

private static class RootContextPathRequestWrapper extends
		HttpServletRequestWrapper {
	public RootContextPathRequestWrapper(HttpServletRequest request) {
		super(request);
	}

	@Override
	public String getContextPath() {
		String contextPath = super.getContextPath();
		if ("/".equals(contextPath)) {
			return "";
		} else {
			return contextPath;
		}
	}
}


他の部分では問題がないでしょうか?
たとえば以下のように、コンテキストパスをリンクのために使っている部分があ
れば同じような問題があると思います。
<img src="${contextPath}/img/logo.gif" />
どのように対処しています?



Atsumi Hayashi さんは書きました:
> 林です。
> 
> Tomcat 6.0.18上にROOT.warをデプロイした場合は、
> 正しくなる事を確認しました。
> 
> 開発時に利用しているEclipsePluginのsysdeo tomcat pluginで
> 発生しているようです。
> 
> 設定で、ContextPath="" or ContextPath="/"としている場合
> どちらでも同様に発生します。
> 
> Struts -> Cubbyの移植作業を行っている際に発生したので
> 困っております。
> 
> こちらのロジックをStrusのFormTagと同様の処理を行って頂く事は
> 出来ないでしょうか。
> 
> Strutsのパス取得時のロジックは最後に次の様に行っているようです。
> 
> return value.startsWith("/") ? value : ("/" + value);
> 
> ご検討頂けますでしょうか。
> 
> 
> なお、本体で対応して頂けない場合の対処方法としては、
> 同名クラスを配置する方法でしか対処出来ません。
> 
> 
> よろしくお願い致します。
> 
> 
> 
> BABA,Yasuyuki <[E-MAIL ADDRESS DELETED]>さん:
>> 馬場です
>>
>> こちらでは Tomcat 5.5.27 に cubby-examples-1.1.5.war を ROOT.war にリ
>> ネームしてデプロイし確認してみましたが、状況は再現できませんでした。
>>
>> もし、コンテキストパスを path="/" のように設定しているのであれば、path=
>> "" のように変更してみてどのようになるか確認していただけませんか?
>>
>> http://ml.seasar.org/archives/cubby-user/2008-March/000027.html
>>
>>
>>
>> Atsumi Hayashi さんは書きました:
>>> お世話になっております。林@グルージェントです。
>>>
>>>
>>> Cubby1.1.5のFormTagの挙動について次の現象がありましたので
>>> 御報告させて頂きます。
>>>
>>> FormTagの指定時に
>>>   actionClass
>>>   actionMethod
>>> を指定している場合に発生する現象です。
>>>
>>> -- jsp側 ---------------------------------
>>>
>>> <t:form actionClass="HogeAction" actionMethod="hello" />
>>>
>>> -- Action側 ---------------------------------
>>> @Path("hoge")
>>> public class HogeAction extends Action {
>>>     @Path("hello")
>>>     public ActionResult hello() {
>>>         
>>>         return new Forward("hello.html");
>>>     }
>>> }
>>>
>>> としている状態で、ContextPathがルート『 / 』である場合
>>>
>>> htmlとして出力される内容が次の様になります。
>>>
>>> <form action="//hoge/hello" />
>>>
>>> 『 // 』で始まる文字列として出力される為、サブミット時にURLが
>>>
>>> http://hoge/hello?aaa=
>>>
>>> となります。
>>> サーバー名がロストしてしまうため、
>>> アプリケーションの実行が出来なくなります。
>>>
>>>
>>> これを回避するために、FormTagクラスのdoEndTagメソッドの
>>>
>>>     final String contextPath = (String) pageContext.getAttribute(
>>>             ATTR_CONTEXT_PATH, PageContext.REQUEST_SCOPE);
>>>     if (linkSupport.isLinkable()) {
>>>         final String characterEncoding = pageContext.getRequest()
>>>                 .getCharacterEncoding();
>>>         final String url = contextPath
>>>                 + linkSupport.getPath(characterEncoding);
>>>         attrs.put("action", url);
>>>     }
>>>
>>> の部分のurlを生成している部分を変更して頂けないでしょうか。
>>>
>>>     String url;
>>>     if ("/".equals(contextPath)) {
>>>         url = linkSupport.getPath(characterEncoding);
>>>     } else {
>>>         url = contextPath + linkSupport.getPath(characterEncoding);
>>>     }
>>>     attrs.put("action", url);
>>>
>>> 以上のように修正して頂けると助かります。
>>>
>>>
>>> LinkTagについても同様の事が発生すると思います。
>>>
>>>
>>> よろしくお願い致します。
>>>
>>> _______________________________________________
>>> cubby-user mailing list
>>> [E-MAIL ADDRESS DELETED]
>>> https://ml.seasar.org/mailman/listinfo/cubby-user
>>
>> -- 
>> BABA,Yasuyuki
>> [E-MAIL ADDRESS DELETED]
>> _______________________________________________
>> cubby-user mailing list
>> [E-MAIL ADDRESS DELETED]
>> https://ml.seasar.org/mailman/listinfo/cubby-user
> _______________________________________________
> cubby-user mailing list
> [E-MAIL ADDRESS DELETED]
> https://ml.seasar.org/mailman/listinfo/cubby-user


-- 
BABA,Yasuyuki
[E-MAIL ADDRESS DELETED]


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