Strutsを使用したログイン画面を作成しています。ID・パスワードを入力して、html:linkをクリックしてログインするという処理を行いたいです。
そこで、リンクをクリックした際にJSPに記述しているhtml:textとhtml:passwordの値を取得して、Actionへ渡し、その情報を元にDBへの問い合わせを行いたいのですが、html:linkで複数パラメータを渡す方法が分からないので教えていただきたいです。
過去質も参考にしてみましたが、今回の質問に的を得た内容がなかったので質問させていただきました。
参考にした方法
(1)JavaScriptのonclickイベントでサブミットさせる
⇒例えばdocument.form.submit();と書けそうだが,html:formにはname属性がないため、formの指定ができない?!
(2)Mapを利用してパラメータを渡す
⇒JSP内にMap設定のロジックを書く。Map(name,value)の形式で、value部分(画面入力値)はどうやって取得するのか分からない。
【struts-config】
<action-mappings>
<action path="/login_Anken"
type="action.Login_Anken_Action"
name="login_Anken_Form"
validate="true"
input="/pages/Login_Anken.jsp"
scope="request">
<forward name="success" path="/pages/MainMenu.jsp"/>
<forward name="fail" path="/pages/Login_Anken.jsp"/>
</action>
【Login_Anken.jsp】
<html:form action="/login_Anken" >
<table border="0" width="100%" >
<tr>
<td class="pname" colspan="4" >
****システム
</td>
</tr>
<tr>
<td colspan="4">
<hr size="5" width="100%" noshade>
</td>
</tr>
<tr>
<td class="gname" colspan="4" >
ログイン
</td>
</tr>
<tr>
<td colspan="4" >
<hr size="5" width="100%" noshade>
</td>
</tr>
<tr>
<td width="25%" >
</td>
<td class="login">
ユーザID
</td>
<td width="20%"">
<html:text property="userId"/>
</td>
<td width="20%">
</td>
</tr>
<tr>
<td width="25%" >
</td>
<td class="login">
パスワード
</td>
<td width="20%"">
<html:password property="password" />
</td>
<td width="20%">
</td>
</tr>
<tr>
<td width="10%" align="center" colspan="4" >
<html:link action="/login_Anken" name="map">ログイン
</html:link>
</td>
</tr>
</table>
</html:form>
【Login_Anken_Action.java】
public class Login_Anken_Action extends Action {
public ActionForward execute(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
throws Exception {
ActionMessages errors = new ActionMessages();
//画面入力値を取得
Login_Anken_Form loginAnkenForm = (Login_Anken_Form) form;
boolean isSuccess = false;
Login_Anken_Business business =
new Login_Anken_Business();
String userName = null;
userName =
business.getLoginUserName (loginAnkenForm.getUserId(),
loginAnkenForm.getPassword());
//ユーザが存在すればログインOK
isSuccess = (userName != null);
if (isSuccess) {
//TODO
HttpSession session = request.getSession();
session.setAttribute("name", userName);
return mapping.findForward("success");
} else {
errors.add(ActionMessages.GLOBAL_MESSAGE,
new ActionMessage("errors.login"));
saveErrors(request, errors);
return mapping.findForward("fail");
}
}
}
No.3ベストアンサー
- 回答日時:
ああ
このHTML見て一目でわかったわ。
<a href="~"
のhrefにリクエストが飛んでいるだけね。
<a href="javascript:return false"
<a href="#"
とかにしないとonclickが正常に働かないわよ。
ありがとうございます!
html:link href="#" としたところ、無事ログインに成功することができ、画面も遷移しました。href="#"としないとJavascriptが動作しないのは、変更前はJSP上でhtml:link action="~"となっており、リンククリック時はリンクタグのアクションへリクエストが飛んでしまい、フォームタグがサブミットされない(onclickイベントが動作しない)という理解で良いのですよね。
No.2
- 回答日時:
> Formの値(画面入力値)が取得できていないようです
いくつか原因が考えられるわ。
まずは、生成されたあとのHTMLを見なさい
1.formタグが複数ある
[0]は1つ目のformタグの範囲だから、その範囲内に何もなければ何も送信されない
[1]とかやってみるのもひとつの手ね
2.html:formのmethodをgetにしてやってみて
リクエストURLに送信パラメータがぞろぞろつけばOK
~/login_Anken?userId=xxxx&password=xxx
こんな感じね。
つかない場合はsubmit()対象のformタグが間違っている可能性大よ
ついているのに取得できないのならFormクラスの定義が間違っているのかもね
この回答への補足
リクエストURLはhtt★://loalhost:8080/app/login_Anken.doとなっており、パラメータは付いてないです。以下が生成されたHTMLですが、formタグに特におかしい箇所はない気がするのですが・・・。
<html>
<head>
<link rel="stylesheet" href="/app/css/styles.css" type="text/css" />
<title>ログイン画面</title>
</head>
<body>
<table border="0" width="100%" >
<form name="login_Anken_Form" method="GET" action="/app/login_Anken.do">
<tr>
<td class="pname" colspan="4" >
****システム
</td>
</tr>
<tr>
<td colspan="4">
<hr size="5" width="100%" noshade>
</td>
</tr>
<tr>
<td class="gname" colspan="4" >
ログイン
</td>
</tr>
<tr>
<td colspan="4" >
<hr size="5" width="100%" noshade>
</td>
</tr>
<tr>
<td width="25%" >
</td>
<td class="login">
ユーザID
</td>
<td width="20%" >
<input type="text" name="userId" maxlength="10" size="20" value="" style="width:100px; height=20px; font-size:10pt;" class="ime_disabled">
</td>
<td width="20%" >
</td>
</tr>
<tr>
<td width="25%" >
</td>
<td class="login">
パスワード
</td>
<td width="20%" >
<input type="password" name="password" maxlength="10" size="20" value="" style="width:100px; height=20px; font-size:10pt;" class="ime_disabled">
</td>
<td width="20%" >
</td>
</tr>
<tr>
<td width="10%" align="center" colspan="4" >
<a href="/app/login_Anken.do" style="font-size:10pt;" onclick="document.forms[0].submit();">ログイン</a>
</td>
</tr>
</form>
</table>
</body>
</html>
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- HTML・CSS テーブルタグのセルの幅の一部だけを指定 1 2023/03/12 12:02
- AJAX JavascriptからPHPへのAjax通信でnullが返ってくる 3 2022/08/03 22:00
- Visual Basic(VBA) Selenium.ChromeDriverの使い方について 7 2022/09/22 06:43
- JavaScript EasyUIのSubGrid(jquery)におけるObjectに入れた連想配列について 1 2022/05/02 11:21
- JavaScript jQueryで同じクラス名のものを別物として扱いたい 1 2022/06/17 14:14
- PHP php ログイン 1 2022/11/01 00:24
- HTML・CSS 【CSS】:hasで可能? imgを含むtr要素を選択したい 1 2022/11/17 14:36
- PHP PHPでユーザー情報を入力して簡易ログイン機能をつくってみたのですが 1 2023/05/29 08:51
- HTML・CSS 自身のHPにYouTube動画を貼り付けるのが出来なくなり困ってます 1 2022/11/11 10:44
- JavaScript 入力フォームの javascript で メールアドレスの正規チェックをを行い、ボタンをクリックして 2 2022/04/27 16:06
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
アメリカンフットボールを始め...
-
アメフトのルール
-
高校1年のアメフト部
-
臼田あさ美さんのHPが知りた...
-
タグに挟まれた間の文字を置換...
-
運動会の粉の中のアメを口で取...
-
試合の前日。してはいけない?
-
因幡の白ウサギについて(運動...
-
女性が男性に勝てるオリンピッ...
-
男性→女性に性別変更、競泳トラ...
-
「花のあすか組」のあすかとひ...
-
トーナメント表を作る際のルー...
-
40歳を過ぎても日本一を目指せ...
-
バフがけ
-
ファットバイクってペダリング...
-
大縄跳び
-
身長252cmの友達がいます。「ど...
-
トーナメントの作り方
-
走り高跳びについて
-
今サッカーjリーグとバスケBリ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
成層鉄心って?
-
高校生がアメフトって危険ですか?
-
【制御工学】単位ステップ応答...
-
高校からアメフトを始めたいの...
-
アメリカンフットボールを始め...
-
タグに挟まれた間の文字を置換...
-
html:linkでリンククリック時に...
-
アメフトのルール
-
アメフト用品を安く
-
鳥取に中学生(中3)から入れる...
-
臼田あさ美さんのHPが知りた...
-
高校1年のアメフト部
-
トラストのtd07とhksのto4sの違...
-
試合の前日。してはいけない?
-
運動会の粉の中のアメを口で取...
-
スポーツオーソリティーってあ...
-
日本では世界的に見ると異常に...
-
スポ少辞められず悩んでいます...
-
トーナメント表を作る際のルー...
-
マラソンの他に頭を使う必要が...
おすすめ情報