[mayaa-user:157] URL と ファイルシステムの階層があわない場合のパス自動調整について

teto (Takeshi Etoh) kaiser @ fa3.so-net.ne.jp
2006年 4月 4日 (火) 01:45:28 JST


初めまして。
江藤と申します。

モックアップそのままで、テンプレートとして使用することができる。
欲しかったのは、まさにこの機能!と
早速使わせていただいております。

表題の件ですが、
パスの自動調整機能は
リクエストされた URL の "/" の数と
HTML に書かれた "../" の数が合っているときに利用できる機能かと思います。
// もしくは合わせて使うためのもの?

今回パス自動調整で利用したい URL とファイルの階層は以下のようになります。

URL
  http://domain.com/context/action.do

パス
  /WebRoot
    + /css
    |   + base.css
    |
    + /WEB-INF
    |   + /page
    |       + top.html
    |
    + index.html

環境
  Mayaa 1.1.0-beta1
  Struts 1.2.8(s2Struts なし)
  Tomcat 5.5.16
  JDK 1.5.0_06

index.html から POST し、
Struts の ActionForward で "/top.html" を返します。

top.html をローカルファイル表示(モックアップ)として表示するため
以下のようにしてスタイル・シートへリンクしています。
  <link rel="stylesheet" href="./../../css/base.css" type="text/css" />

これを Mayaa で出力した場合、コンテキスト名が消えてしまい、
以下のようにサーバルートからのパスとなってしまいます。
  <link rel="stylesheet" href="/css/base.css" type="text/css" />
    ※ /context/css/base.css が出力したいパス


org.seasar.mayaa.impl.util.StringUtil クラスの
adjustRecursive(String dir, String path) メソッドにて
パスの調整をするための再帰呼び出しを行っていますが、
この再帰呼び出しがリクエストされた URL を
HTML に書かれた "../" の数を合わせて消して整いるため
今回動作させようとしている環境ではコンテキスト名まで消えてしまいます。

こちらについて、アプリケーション側で対応する方法はありますでしょうか?


また、Mayaa は WEB-INF/page に .html と .mayaa を配置した場合でも
レスポンスを返せるようになっているため
最低限 "./../../" は記述することになりますし、
URL とフォルダ階層構造は一致しなくてよいものですので
パスの自動調整機能は先頭の ./ と ../ の繰り返しを消す
path.replaceFirst("^\\./(\\.\\./)*", ""); をして
context を先頭に付加する実装でも良いかと思いますがいかがでしょうか?


ご確認、ご検討のほどよろしくお願い致します。

 ---------------------------------------------------------

     /| /|      
    =∂∂=      
    /   \  η  Name      : Takeshi Etoh
   ιι___)ノ   E-Mail    : kaiser @ fa3.so-net.ne.jp
 ---------------------------------------------------------



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