- PR -

strutsのリンクタグ、ヒドゥンタグを使い、特定の値を送信したい。

投稿者投稿内容
れんれん
常連さん
会議室デビュー日: 2005/07/25
投稿数: 44
投稿日時: 2005-07-26 09:51
こんにちは。 すみません。題名にはタグが反映されませんでしたので、再度書きます。
リンクがいくつかあるとして、リンクを押したときに、それぞれ独自の値がActionFormに送れるようにしたいと思っています。そうすることで、次のjspに反映するデータを変えたいと思っています。おそらくjavascriptを組み合わせて、hiddenに値を入れて、submit()をするのではと思うのですが、やり方がよくわかりません。ひょっとしたら、他のやり方があるのではとも思います。
jsp画面の中身は、

<table>
<tr height="35" valign="middle">
<html:form action="/Navi2.do" >
<html:hidden property="A" />
 <logic:iterate id = "Kaiten" name="NaviBean" property="menu" <a href="#" onClick="nextpage()"><font size="2"><bean:write name="Kaiten" /></font></a></td>
</logic:iterate>
<html:submit property="submit" value="サブミット" />
</html:form>
</tr>
</table>

といった感じで、各リンクはiterateで取得しています。これをどう料理するかで、悩んでいます。どなたか、よろしくお願いします。
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2005-07-26 10:51
「hiddenに値を入れて、submit()をする」ので動くと思いますが、何のやり方がわからないのでしょうか?
JavaScript で form を submit() する方法がわからないということですか?

あと、もっとシンプルにリンクに GET パラメータを埋め込んでおくのはいかがでしょうか?

[ メッセージ編集済み 編集者: インギ 編集日時 2005-07-26 10:53 ]
れんれん
常連さん
会議室デビュー日: 2005/07/25
投稿数: 44
投稿日時: 2005-07-26 11:32
どうもありがとうございます。

たとえば、propertyにある値が入ったとして、そのpropertyが次にどこに入るのかがよくわからないので使いませんでしたが、実際どこに行くのですか?
ActionFormでしょうか?

このpropertyの値を最終的にrequestにのせて、responseが返るようにしたいので、どこに行くかが結構重要だと思っています。

あと、iterateタグで連続処理を使っていますが、その際生成される各リンクにつくpropertyも可変にすることは出来るのでしょうか?
今たとえば以下のようになっています。

値があるbean//
public class MyLinkAction30 {
private HashMap map;

public MyLinkAction30(){
map = new HashMap();
}

/**
* @return map を戻します。
*/
public Object getMapData(String key) {
return map.get(key);
}
/**
* @param map map を設定。
*/
public void setMapData(String key, Object value) {

map.put(key,value);
}

public HashMap getValues(){
return map;
}
}

アクション//
MyLinkAction30 lnkact = new MyLinkAction30();
lnkact.setMapData("param1","aaa");
req.setAttribute("MyLinkAction30",lnkact);

JSP画像//
<logic:iterate id = "Kaiten" name="NaviBean" property="menu" >
<td width="4%" valign="middle">
<html:link action="/Navi2.do" name="MyLinkAction30" property="values"> <font size="2">
<bean:write name="Kaiten" /></font>
</html:link></td>
</logic:iterate>

お返事お待ちしています。
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2005-07-26 12:03
>たとえば、propertyにある値が入ったとして、そのpropertyが次にどこに入るのかがよくわからないので使
>いませんでしたが、実際どこに行くのですか?
>ActionFormでしょうか?
property とはGETのパラメータのことでしょうか?「propertyが次にどこに入るのかがよくわからない」のであればちょっと試してみてはいかがですか?よほど時間が逼迫しているのでなければまず自分の手を動かすことをお勧めします。そのほうが理解も早いし、忘れませんよ。

>あと、iterateタグで連続処理を使っていますが、その際生成される各リンクにつくpropertyも可変にすること>は出来るのでしょうか?
bean:write とか <%=bean.getFoo()%>みたいにしてパラメータ部分に展開してはいかがでしょう。

>「hiddenに値を入れて、submit()をする」ので動くと思いますが、何のやり方がわからないのでしょうか?
>JavaScript で form を submit() する方法がわからないということですか?
こちらについてはいかがでしょう?

[ メッセージ編集済み 編集者: インギ 編集日時 2005-07-26 12:23 ]
れんれん
常連さん
会議室デビュー日: 2005/07/25
投稿数: 44
投稿日時: 2005-07-26 13:34
>JavaScript で form を submit() する方法がわからないということですか?
こちらについてはいかがでしょう?

うーん、いろいろ試しましたが純粋に式が作れないということです。

<script language="JavaScript" type="text/JavaScript">
<!--

function nextpage(avalue){
var myForm = document.forms[0]
myForm.Ai.value = avalue;
myForm.submit();
}
//-->
</script>

<input type="hidden" name="Ai" value="bunrui" >
としたり、

<script language="JavaScript" type="text/JavaScript">
<!--

function nextpage(avalue){
var myForm = document.forms[0]
myForm.Ai.property = avalue;
myForm.submit();
}
//-->
</script>

<html:type="hidden" name="Ai" property="bunrui" >

としてみました。ただhtmlタグだとnameでエラーが出てしまったりして、文がうまく作れないということです。
れんれん
常連さん
会議室デビュー日: 2005/07/25
投稿数: 44
投稿日時: 2005-07-26 22:19
こんばんは。
かなりやってみたのですが、普通 javascriptでは、

function Submit(){
document.form.submit();
}
といった形で、formは送れるのではないかと思うのですが、javascriptエラーになってしまいます。
これでエラーが出るということは、<html:form>のstrutsタグは、javascriptでは操作不可能ということなのでしょうか?
どなたか、わかる方お教えください。
かつのり
ぬし
会議室デビュー日: 2004/03/18
投稿数: 2015
お住まい・勤務地: 札幌
投稿日時: 2005-07-26 22:37
生成されたHTMLを見てください。
貴方の書いた、
document.XXX.submit();
と、Strutsの生成したFORMタグの名前と一致していないはずです。

まず、html:formタグのactionには[.do]はいりません。
html:formタグのactionに指定した[/xxx]はstruts-config.xmlの
<action path="/xxx" name="yyy"/>を示します。
その一致したname="yyy"の部分がフォーム名に使用されます。
れんれん
常連さん
会議室デビュー日: 2005/07/25
投稿数: 44
投稿日時: 2005-07-30 12:12
ご無沙汰です。あれから試したのですが、残念ながら<html:form>にname
属性は書き込めないみたいです。エラーが出てしまうのですが、何か方法があるのでしょうか?

スキルアップ/キャリアアップ(JOB@IT)