#author("2024-02-14T05:03:43+00:00","","")
#author("2024-02-14T05:03:48+00:00","","")
#topicpath
----

#contents
Strutsでリンクの作成方法はいろいろなやり方があります。



**<html:form>タグで [#x8e22dd2]
***formのactionで [#q45fce56]
 <html:form action="/execute">
  <html:select property="hoge">
   <html:options name="menu.pulldown"/>
  </html:select><html:errors property="hoge"/>
  <br/>
  <bean:define id="title" name="executeForm" 
                     property="hoge" type="java.lang.String"/>
  <%-- 変数名がexecuteFormのhogeというpropertyを
             titleという変数名で参照。(型はString) --%>
  <html:submit/><html:cancel/>
 </html:form>
とするとformが作成できる

**<html:link>タグで [#tc4af6a7]
***html:linkのaction [#ibe7ae86]
 <html:link action="/execute">実行</html:link>

***html:linkのlinkNameでアンカー [#rbba7b40]
 <html:link linkName="Anchor" />

***html:linkのpage [#m9abdf62]
 <html:link page="hoge" >aaaa</html:link>
とすると
 <a href="[contextpath]hoge">aaaa</a>
となる。つまりそのまま(doの補完や、/とかの補完すらしない)。

*** <html:rewrite />だと [#l9eda326]
 <html:rewrite page="hoge" />
とするとhtml上に
 [contextpath]hoge
が出力されます。

***global-forwardsを定義して、html:linkのforwardで [#ec52cd29]
struts-config.xmlで
 <!-- ========== Global Forward Definitions =============================== -->
 <global-forwards type="org.apache.struts.action.ActionForward">
 	<forward name="hoge" path="/execute.do" />
 </global-forwards>
と定義し、
 <html:link forward="hoge" >aaaa</html:link> と記述すると
 <a href="[contextpath]/execute.do">aaaa</a>
となる。((もちろん*.doじゃなくてjspとかでもいい))


*** <html:rewrite />だと [#z8d78873]
ちなみにこのグローバルフォワードという機能は
 <html:rewrite forward="hoge" />
と記述して、htmlに
 [contextpath]/execute.do
と出力することもできます。リンクでなくてスタイルシートファイルの指定とかに使用しますね。


***html:linkのhref [#ue292577]
そのまま
 <html:link href="hoge" >aaaa</html:link>
が
 <a href="hoge">aaaa</a>
となる。



**<html:link>タグでの、パラメータ指定方法 [#b7c0e9e7]
***コレクションから渡す場合。 [#p45f4a77]
 <%
 	Map map=new HashMap();
 	map.put("data1","value1");
 	map.put("data2","value2");
 	map.put("data3","value3");
 	map.put("data4","value4");
 	request.setAttribute("map",map);
 %>
 <html:link page="/execute.do" name="map">aaaa</html:link>
みたく、mapを指定すると、パラメータとなる。(nameでBeanを指定、propertyでmapを指定してもよい。) 



***スコープ内のインスタンスの情報を次の画面に渡すリンク。 [#s0d5364a]
RequestやSession,PageContext,Applicationなどあるスコープ内にのインスタンスが保持するフィールドの値をリンクのパラメータにしたいときがあります((レコードのIDを次の画面に渡したい、とか))が、こうやれば出来ます。以下の例ではinstanceというキーであるスコープにインスタンスがあるときですが、
 <html:link paramName="instance" 
            paramId="fieldParam" 
            paramProperty="field" 
            page="/execute.do?action=edit">編集</html:link>
とすると
 /execute.do?action=edit&fieldParam=[instanceインスタンスのfieldというフィールドの値]
となります。

***スコープ内のインスタンスの情報を次の画面に渡すリンク2。 [#o20e5cab]
 まずBeanのプロパティに変数名を付けて
 <bean:define id="userid" name="record" property="userId" type="java.lang.String"/>
 リンクタグに渡す
 <html:link action="/hoge" paramId="userid" paramName="userid">
 (うえは/hoge.do?[userid<-paramIdの文字列]=beanのプロパティ値となる)
   <bean:write name="record" property="userId" />
 </html:link>

これでOK!これより上のやり方の方がスマートですね。

----
この記事は
#vote(おもしろかった[193],そうでもない[63])
#vote(おもしろかった[194],そうでもない[63])
#topicpath


SIZE(10){現在のアクセス:&counter;}

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS