- みーちく
- 大ベテラン
- 会議室デビュー日: 2002/08/29
- 投稿数: 131
|
投稿日時: 2003-08-11 11:08
こんにちわ。
みーちくと申します。
早速なんですが、下記のようなソースがあります。
Servletから、getRequestDispatcherでJSPにパラメータを渡しています。
この時点でSystem.out.println(error_message);としたところ、ちゃんとエラーメッセージ
が入っているのですが、error.jspに表示される文字は「null」となります。
今回の開発では、sessionを使わない方式なので、受け取ったパラメータを
そのままJSPに渡したいと考えております。
皆様、ご教授願います。
| コード: |
|
package Search;
import java.io.*;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class Search_Main extends HttpServlet {
public void doGet (HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException{
doPost(req, res);
}
/**
* メインサーブレット
*/
public void doPost (HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException{
String client_cd = UnicodeString(req.getParameter("client_cd"));
String error_message = "";
if(client_cd == null || client_cd.equals("")){
error_message+= "得意先コードを入力して下さい。";
}
if(error_message.equals("") == false){
req.getRequestDispatcher("/Search/error.jsp?error_message=" +
error_message+ "").forward(req, res);
} else {
req.getRequestDispatcher("/Search/list.jsp").forward(req, res);
}
}
}
/**
* 日本語文字化け対応
*/
private String UnicodeString(String s) throws UnsupportedEncodingException {
return new String(s.getBytes("8859_1"), "JISAutoDetect");
}
/**
* サーブレットの破棄
*/
public void destroy(){
}
}
error.jsp
<%@ page contentType="text/html; charset=Shift_JIS" import="java.util.*" %>
<%
String error_message = request.getParameter("error_message");
if(error_message != null && error_message.equals("") == false){
// 文字コード変換
error_message = new String(error_message.getBytes("8859_1"),"Shift_JIS");
}
%>
<html>
<head>
<title>エラー画面</title>
<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
<script Language="JavaScript" src="../main.js"></script>
</head>
<body>
<center>
<form method="POST">
<input type="hidden" name="scr" value="ERROR" />
<table border="0" cellpadding="1" cellspacing="1" width="400">
<tr>
<td>
<dl>
<dt>入力された内容に対して次のようなエラーが発生しました。<br>
</dl>
</td></tr></table>
<table align="center" cellpadding="2" cellspacing="2">
<tr>
<td><br><font color="red"><ul>
<%= error_message %>
</ul></font></td>
</tr>
<tr><td align="center">
<br><INPUT type="button" value=" 戻る " onClick="history.back(-1)" /></td></tr>
</table>
<!-- form end -->
</form>
</center>
</body>
</html>
|
|
- ニシトミ
- ベテラン
- 会議室デビュー日: 2003/04/24
- 投稿数: 76
- お住まい・勤務地: 千葉・東京
|
投稿日時: 2003-08-11 11:20
こんにちは
お盆休み出社のニシトミです
こういう場合は
HttpServletRequestの
setAttributeを使用します
みーちくさんが
Sessionを使用したことがあるのなら
同じシグニチャー?でできます。
この場合ですと
req.setAttribute("errorMessage",error_message);
をディスパッチする前に埋め込み
jsp側で
request.getAttribute("errorMessage");
をすればいいのです。
|
- みーちく
- 大ベテラン
- 会議室デビュー日: 2002/08/29
- 投稿数: 131
|
投稿日時: 2003-08-11 11:41
ニシトミさん
早速の返答ありがとうございます。
また、休日出勤ご苦労様です。
ニシトミさんがおっしゃっているのは、
application.setAttributeの事ですよね。
たしかに、このやり方だと、ちゃんとパラメータは渡せました。
下記のような書き方だと、パラメータは渡せないのでしょうか?
ちょっと疑問です。
| コード: |
|
req.getRequestDispatcher("/Search/error.jsp?error_message=" +
error_message+ "").forward(req, res);
|
|
- taku
- ぬし
- 会議室デビュー日: 2002/11/12
- 投稿数: 918
- お住まい・勤務地: 墨田区→中野区
|
投稿日時: 2003-08-11 12:02
| 引用: |
|
みーちくさんの書き込み (2003-08-11 11:41) より:
ニシトミさんがおっしゃっているのは、
application.setAttributeの事ですよね。
|
え、間違ってませんか?
JSPのapplication変数はServletContextクラスです。
ニシトミさんは
| 引用: |
|
HttpServletRequestの
setAttributeを使用します
|
とおっしゃっています。
これはJSPではrequest変数に相当します。
| 引用: |
|
下記のような書き方だと、パラメータは渡せないのでしょうか?
ちょっと疑問です。
コード:
--------------------------------------------------------------------------------
req.getRequestDispatcher("/Search/error.jsp?error_message=" +
error_message+ "").forward(req, res);
--------------------------------------------------------------------------------
|
上記ならJSPで
String message = request.getParamter("error_message");
というようにすれば取れます。
でもこれだと文字列しか渡せませんよね。
|
- ニシトミ
- ベテラン
- 会議室デビュー日: 2003/04/24
- 投稿数: 76
- お住まい・勤務地: 千葉・東京
|
投稿日時: 2003-08-11 12:04
どうもお疲れ様です
| 引用: |
|
application.setAttributeの事ですよね。
|
いいえrequestですrequest.setAttributeでいけると思います。
みーちくさんが仰っているようなこともできるとは思いますが
あまり一般的ではないような気もするのですが、私だけ?
パラメータを渡すよりrequest.setAttributeとしても大差はないと
思いますが、
スコープ属性は
request、page、session、、application と順に大きく?なっていきますので
application.setAttributeでは、やりたいことがずいぶん違ってしまうと思うので
ご注意してください
|
- (株)ぽち
- ぬし
- 会議室デビュー日: 2002/09/10
- 投稿数: 376
|
投稿日時: 2003-08-11 12:07
| 引用: |
|
下記のような書き方だと、パラメータは渡せないのでしょうか?
ちょっと疑問です。
req.getRequestDispatcher("/Search/error.jsp?error_message=" +
error_message+ "").forward(req, res);
|
こんにちわ。
requestはservletへの処理要求時に1回だけ発行されて
jspへはそのrequestを流しているだけなので、上記のような
requestの追加発行はできないのではないでしょうか?
少なくともgetRequstDispatcherの引数はそういう意味合い
でのURLではない気がします。
sendRedirectとかだったら行けるような。
すいません、むちゃくちゃ間違ってるかも。
|
- みーちく
- 大ベテラン
- 会議室デビュー日: 2002/08/29
- 投稿数: 131
|
投稿日時: 2003-08-11 12:08
takuさん
返信ありがとうございます。
すっかり、勘違いしておりました。
>上記ならJSPで
>String message = request.getParamter("error_message");
>というようにすれば取れます。
>でもこれだと文字列しか渡せませんよね。
takuさんのやり方で、一度トライしてみたのですが、文字が全て「null」と表示されて
しまいました。
|
- (株)ぽち
- ぬし
- 会議室デビュー日: 2002/09/10
- 投稿数: 376
|
投稿日時: 2003-08-11 12:10
| 引用: |
|
takuさんの書き込み (2003-08-11 12:02) より:
上記ならJSPで
String message = request.getParamter("error_message");
というようにすれば取れます。
でもこれだと文字列しか渡せませんよね。
|
こんにちわ。
あれ、でもみーちくさんはこれでnullになってしまったんですよね?
違うのかな?
|