#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;}