PathAdjuster:パスを自動調整する

コンポーネント機能レイアウト共有機能を使うときにテンプレートが別のディレクトリにあると、ブラウザで直接開く場合と実行時とで画像やスタイルシートなどのファイルパスが変わってしまう場合があります。そのような場合、パスを "./" で始めることで自動調整させることができます。

設定で有効/無効、"./" で始まっていないパスを対象とするかどうかを変更できます。

具体的な例

レイアウト共有機能を使う例で見てみましょう。

スタイルシートが正しく読み込まれない状態

次のようなファイル構成があるとします。hello.html は layout.html をレイアウトとして指定し、layout.html からは base.css を使っています。このままではファイルとしてプレビューはできても、実行時にはスタイルシートが読み込まれません。

コンテキストルート
  + css/
    - base.css
  + layouts/
    - layout.html
    - layout.mayaa
  - hello.html
  - hello.mayaa
<html>
<body>
    # DummyTitleHello

    <div id="content">Hello Mayaa!</div>
</body>
</html>
<?xml version="1.0" encoding="UTF-8"?>
<m:mayaa xmlns:m="http://mayaa.seasar.org"
        extends="/layouts/layout.html">

    <m:doRender m:id="content" name="contentBody" />
</m:mayaa>
<html>
<head>
    <link href="../css/base.css" rel="stylesheet" type="text/css">
</head>
<body>
    # Hello

    <div id="contentPosition">Dummy content</div>
</body>
</html>
<?xml version="1.0" encoding="UTF-8"?>
<m:mayaa xmlns:m="http://mayaa.seasar.org">
    <m:insert m:id="contentPosition" name="contentBody" />
</m:mayaa>

ブラウザで http://localhost:8080/mayaa/hello.html にアクセスしてみましょう。

実行結果 (改行などは実際の実行結果と異なります)
<html>
<head>
    <link href="../css/base.css" rel="stylesheet" type="text/css">
</head>
<body>
    # Hello
    Hello Mayaa!
</body>
</html>

このとき、http://localhost:8080/css/base.css というスタイルシートを探していることになりますが、このパスには存在しないためスタイルシートは適用されません。

正しく読み込まれるようにする

ファイルとしてプレビューする場合と実行時とで、どちらでも同じファイルを指すようにするために layout.html を次のように書き換えます。この状態でもファイルとしてプレビューした場合にはスタイルシートは正しく読み込まれます。

<html>
<head>
    <link href="./../css/base.css" rel="stylesheet" type="text/css">
</head>
<body>
    # Hello

    <div id="contentPosition">Dummy content</div>
</body>
</html>

Mayaa はパスが "./" で始まっている場合、そのテンプレートからの相対パスと解釈して絶対パスに置き換えます。 ブラウザで http://localhost:8080/mayaa/hello.html にアクセスしてみましょう。

実行結果 (改行などは実際の実行結果と異なります)
<html>
<head>
    <link href="/mayaa/css/base.css" rel="stylesheet" type="text/css">
</head>
<body>
    # Hello
    Hello Mayaa!
</body>
</html>

スタイルシートのパスがコンテキストパスからの絶対パスに変換されているため、スタイルシートは正しく読み込まれます。

調整対象となるタグおよび属性

パスの調整は、HTML および XHTML の以下のタグの属性のみを対象とします。

タグ名
属性名
ahref
appletcode
codebase
areahref
basehref
blockquotecite
delcite
embedsrc
formaction
framelongdesc
src
iframesrc
imgsrc
usemap
inputsrc
usemap
inscite
linkhref
objectcodebase
data
usemap
qcite
scriptsrc

調整対象となるプロセッサおよび属性

以下のプロセッサおよび属性も自動調整の対象となります。

タグ名
属性名
m:mayaaextends
m:insertpath
m:execsrc