textに入力後にリンクボタンをクリックすとnullになる

[新着] Webテンプレートを仮オープンしました



0   名前: ゆき : 2007/05/20(日) 17:29  ID:LlqnhM1b sub-.G
HTML質問板でもスレッドをたてたのですが
こちらの質問板のほうがよいのでは?
とのご指摘をうけたので新たに書かせていただきます。

メールアドレスとパスワードを入力し新規登録のリンクをクリックしたら
指定したformTest.jspにジャンプさせたいのですが
受け取り側formTest.jspでmailAddressがnullになります。
以下の記述です。
リンクを張る場合でも入力は無効にはならないのでしょうか?
自分でも
”html リンク 入力”
”<A href input type="text" ”
"Aタグ 送受信”とか 考えられる組み合わせを行い検索してみたのですが
サンプルとかをみても
やはりボタンをつくって入力データを送信するタイプが主のようです。
要は、入力項目をそのまま維持してリンク先にジャンプしたいのですが。

開発は自宅のPC(XP)で行っています。
環境はApache Tomcat/5.5.12 です。
HTMLとJSPと実行結果を乗せていただきます。
--------------------------------------------------------------
<HTML>
<HEAD><TITLE>パラメータの受信</TITLE></HEAD>
<body>
メールアドレスとパスワードを入れてログインしてください。
<FORM action="formTest.jsp" method="post">
メールアドレス:<input type="text" name="mailAddress" ><BR>
パスワード :<INPUT type="password" name="password"><BR>
<INPUT type="submit" value="ログイン">
</FORM>
<A href="formTest.jsp?action=regist" >新規登録</A>
</BODY>
</HTML>
--------------------------------------------------------------
以下formTest.jsp側記述
-----------------------------------------------------------------------------
<%@ page import="book.UserEnt" contentType="text/html; charset=Windows-31J" %>
<%
boolean isRegist = false;
request.setCharacterEncoding("Windows-31J");
String regist=request.getParameter("action");
if (regist != null && regist.equals("regist")) {
isRegist = true ;
}
%>
<HTML>
<HEAD><TITLE>パラメータの受信</TITLE></HEAD>
<BODY>
<% if (isRegist ) { %>
ユーザ登録が指示されました。<BR>
メールアドレス<%= request.getParameter("mailAddress") %> <BR>
パスワード <%= request.getParameter("password") %> <BR>
<% UserEnt UE = new UserEnt();
String mailAddress = request.getParameter("mailAddress"); ←@
String password = request.getParameter("password");   ←A 
String msg = UE.new_check(mailAddress,password);     ←B
%>
<%= msg %> <br>
<% } else { %>
メールアドレス<%= request.getParameter("mailAddress") %> <BR>
パスワード <%= request.getParameter("password") %> <BR>
<% UserEnt UE = new UserEnt();
String mailAddress = request.getParameter("mailAddress");
String password = request.getParameter("password");
String msg = UE.login_check(mailAddress,password);
%>
<%= msg %> <br>
<% } %>
</BODY>
</HTML>
-------------------------------------------------------------------
@Aの表示がnullになります。
Bはパラメータにnullなので仕方ないのですが。

実行結果 以下に記述
-------------------------------------------------------------------
ユーザ登録が指示されました。
メールアドレスnull
パスワード null
null
--------------------------------------------------------------------

1   名前: NullPo : 2007/05/20(日) 17:29  ID:05nvWK2y sub-.G
a要素を使わないといけないのなら、知る限りクライアントサイドスクリプトを使うしかない。
<HTML>
<HEAD><TITLE>パラメータの受信</TITLE></HEAD>
<body>

メールアドレスとパスワードを入れてログインしてください。
<FORM action="formTest.jsp" method="post">
メールアドレス:<input type="text" name="mailAddress" ><BR>
パスワード :<INPUT type="password" name="password"><BR>
<INPUT type="submit" value="ログイン">
</FORM>

<script type="text/javascript">
function newEntry(plusQuery) {
  var loginForm = document.getElementsByTagName("form").item(0);

  loginForm.action += "?" + plusQuery;

  loginForm.submit();
}
</script>

<A href="javascript:newEntry('action=regist');" >新規登録</A>

</BODY>
</HTML>


あとどうでもいいことだけど、変数を使っているのに同じオブジェクトから何回も取得するのはどうなんだろう。
<%@ page import="book.UserEnt" contentType="text/html; charset=Windows-31J" %>
<%
boolean isRegist = false;
request.setCharacterEncoding("Windows-31J");
String regist = request.getParameter("action");
String mailAddress = request.getParameter("mailAddress");
String password = request.getParameter("password");
UserEnt UE = new UserEnt();
String msg = UE.login_check(mailAddress, password);
if (regist != null && regist.equals("regist")) {
  isRegist = true ;
}
%> 
<HTML>
<HEAD><TITLE>パラメータの受信</TITLE></HEAD>
<BODY>
<% if (isRegist) { %>
ユーザ登録が指示されました。<BR>
<% } %>
メールアドレス<%= mailAddress %> <BR>
パスワード <%= password %> <BR>
<%= msg %> <br>
</BODY>
</HTML>

テスト環境がなくてテストしてないから嘘っぱちかもしれん。

2   名前: ゆき : 2007/05/20(日) 17:29  ID:LlqnhM1b sub-.G
NullPo 様
ご回答ありがとうございました。
指導のように変えたら見事パラメータを渡すことがでしました!

基本的にはリンクボタンを張る場合は
テキストに入力された項目は保証されないという考え方なんですかね。
(ボタンを作成したほうがいい?)

”クライアントサイドスクリプト”は初耳なので、
この機能や指導されたソースの意味について
詳しく調べてみたいと思います。

ご指導ありがとうございました。
 
>あとどうでもいいことだけど、変数を使っているのに
>同じオブジェクトから何回も取得するのはどうなんだろう。

これは、確かに同じオブジェクトですが
新規作成(UE.new_check)のメソッドと
ログインチェック(UE.login_check)のメソッドが
異なることをしているからなのですが、
もう新規フラグ、既存フラグも引数で渡して
同一メソッドで行ったほうがいいとのことですかね?


3   名前: NullPo : 2007/05/20(日) 17:29  ID:05nvWK2y sub-.G
>>2
失礼、メソッドが違ってましたね。
アドレスとパスワードは同じところからしかとらないので一度だけ取り出すべきカナ。
まぁ、間違っているわけではないから、要修正というわけではないけど。
<%@ page import="book.UserEnt" contentType="text/html; charset=Windows-31J" %>
<%
boolean isRegist = false;
request.setCharacterEncoding("Windows-31J");
String regist=request.getParameter("action");
String mailAddress = request.getParameter("mailAddress");
String password = request.getParameter("password");
if (regist != null && regist.equals("regist")) {
  isRegist = true ;
}
%> 
<HTML>
<HEAD><TITLE>パラメータの受信</TITLE></HEAD>
<BODY>
<% if (isRegist ) { %>
ユーザ登録が指示されました。<BR>
メールアドレス<%= mailAddress %> <BR>
パスワード <%= password %> <BR>
<% UserEnt UE = new UserEnt();
String msg = UE.new_check(mailAddress, password);
%>
<%= msg %> <br>
<% } else { %>
メールアドレス<%= mailAddress %> <BR>
パスワード <%= password %> <BR>
<% UserEnt UE = new UserEnt();
String msg = UE.login_check(mailAddress, password);
%>
<%= msg %> <br>
<% } %>
</BODY>
</HTML>

4   名前: ゆき : 2007/05/20(日) 17:29  ID:LlqnhM1b sub-.G
NullPo 様
ご回答ありがとうございます。
>アドレスとパスワードは同じところからしかとらないの
>で一度だけ取り出すべきカナ。
おっしゃるとおりですね。
変数が多くなれば、このほうが効果的になりますものね。
本当にご指導ありがとうございました。

一覧へ戻る