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

Atsumi Hayashi [E-MAIL ADDRESS DELETED]
2009年 5月 29日 (金) 17:19:51 JST


お世話になっております。林@グルージェントです。


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 メーリングリストの案内