2009-03-03
SAStruts リンク記述におけるs:linkとhtml:linkの比較
http://localhost:8080/app/subapp/action/method/1
ホスト名以降、「メインアプリ/サブアプリ/アクション/メソッド/パラメータ」とします。
SAStrutsでこのURLにアクセスした場合の、<s:link>と<html:link>の挙動を比較してみます。
s:link
以下、公式リファレンスの引用です。
SAStrutsには、Strutsのhtml:linkを継承したs:linkが用意されています。 href属性を設定するときに、コンテキストルートを自動的に補完させる場合に使います。パスを/ではじめた場合は、コンテキストルートからみたパスになります。パスが/ではじまっていない場合は、JSPからみたパスになります。
Super Agile Struts - Feature Reference
JSP
<s:link href="">A</s:link> <s:link href="link">B</s:link> <s:link href="./">C</s:link> <s:link href="./link">D</s:link> <s:link href="../">E</s:link> <s:link href="../../">F</s:link> <s:link href="/">G</s:link> <s:link href="/link">H</s:link>
出力html
想定される遷移先をコメントで示しています。
<a href="/app/subapp/action/">A</a> <!-- 同じアクションのindexメソッド --> <a href="/app/subapp/action/link">B</a> <!-- 同じアクションのlinkメソッド --> <a href="/app/subapp/action/./">C</a> <!-- 同じアクションのindexメソッド --> <a href="/app/subapp/action/./link">D</a> <!-- 同じアクションのlinkメソッド --> <a href="/app/subapp/action/../">E</a> <!-- サブアプリのIndexアクション --> <a href="/app/subapp/action/../../">F</a> <!-- メインアプリのIndexアクション --> <a href="/app/">G</a> <!-- メインアプリのIndexアクション --> <a href="/app/link">H</a> <!-- メインアプリのLinkアクション -->
遷移先URL
A http://localhost:8080/app/subapp/action/ B http://localhost:8080/app/subapp/action/link C http://localhost:8080/app/subapp/action/ D http://localhost:8080/app/subapp/action/link E http://localhost:8080/app/subapp/ F http://localhost:8080/app/ G http://localhost:8080/app/ H http://localhost:8080/app/link
html:link
JSP
<html:link href="">A</html:link> <html:link href="link">B</html:link> <html:link href="./">C</html:link> <html:link href="./link">D</html:link> <html:link href="../">E</html:link> <html:link href="../../">F</html:link> <html:link href="/">G</html:link> <html:link href="/link">H</html:link>
出力html
<a href="">A</a> <!-- 同じアクションの同じメソッド、同じパラメータ --> <a href="link">B</a> <!-- 同じアクションの同じメソッド、linkパラメータ --> <a href="./">C</a> <!-- 同じアクションの同じメソッド、パラメータなし --> <a href="./link">D</a> <!-- 同じアクションの同じメソッド、linkパラメータ --> <a href="../">E</a> <!-- 同じアクションのindexメソッド --> <a href="../../">F</a> <!-- サブアプリのIndexアクション --> <a href="/">G</a> <!-- ドキュメントルート --> <a href="/link">H</a> <!-- 別のWebアプリ -->
遷移先URL
A http://localhost:8080/app/subapp/action/method/1 B http://localhost:8080/app/subapp/action/method/link C http://localhost:8080/app/subapp/action/method/ D http://localhost:8080/app/subapp/action/method/link E http://localhost:8080/app/subapp/action/ F http://localhost:8080/app/subapp/ G http://localhost:8080/ H http://localhost:8080/link
まとめ
基本的には、<s:link>を使うのが良いと思います。<html:link>だと、以下の場合に遷移先URLが異なってしまいます。
※ html:link 「/」で終わるURLの場合
http://localhost:8080/app/subapp/action/method/1/
A http://localhost:8080/app/subapp/action/method/1/ B http://localhost:8080/app/subapp/action/method/1/link C http://localhost:8080/app/subapp/action/method/1/ D http://localhost:8080/app/subapp/action/method/1/link E http://localhost:8080/app/subapp/action/method/ F http://localhost:8080/app/subapp/action/
<s:link>であれば、「/」で終わっていても同じURLになります。自動補完により、必ず絶対パスで出力されるためです。
トラックバック - http://d.hatena.ne.jp/deeeki/20090303/jsplinktaglib
リンク元
- 176 http://www.google.co.jp/search?sourceid=navclient&hl=ja&ie=UTF-8&rlz=1T4DBJP_jaJP269JP269&q=sastruts+s:link
- 167 http://www.google.co.jp/url?sa=t&rct=j&q=s:link&source=web&cd=1&ved=0CC4QFjAA&url=http://d.hatena.ne.jp/deeeki/20090303/jsplinktaglib&ei=RUCETrv6J8z0mAXp44wX&usg=AFQjCNFK9YyTqdBe5P0kB5YZ7I4PujBsSw
- 106 http://www.google.co.jp/search?hl=ja&client=firefox-a&rls=org.mozilla:ja-JP-mac:official&hs=HKc&q=a+href+%s&btnG=検索&lr=lang_ja
- 100 http://www.google.co.jp/search?q=s:link&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:ja:official&hl=ja&client=firefox-a
- 74 http://www.google.co.jp/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&cts=1330666990335&ved=0CDYQFjAA&url=http://d.hatena.ne.jp/deeeki/20090303/jsplinktaglib&ei=Gl5QT96DKqaNmQWq4o26Cg&usg=AFQjCNFK9YyTqdBe5P0kB5YZ7I4PujBsSw
- 72 http://www.google.co.jp/search?sourceid=chrome&ie=UTF-8&q=sastruts+s:link
- 65 http://www.google.co.jp/search?q=SAStruts+リンク&lr=lang_ja&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:ja:official&client=firefox-a
- 58 http://www.google.co.jp/search?q=s:link&lr=lang_ja&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:ja:official&client=firefox-a
- 51 http://www.google.co.jp/search?hl=ja&lr=&q=sastruts+s:link&revid=845607463&ei=5AjwSf7tMoPg7AOixsnCDw&sa=X&oi=revisions_inline&resnum=0&ct=top-revision&cd=1
- 48 http://www.google.co.jp/search?hl=ja&q=sastruts+リンク&lr=&rlz=1W1GGLG_ja&aq=f&oq=



