Javaに関する様々な情報をご紹介します。

Javaに関する様々な情報をご紹介します。
評価

30

session.getAttribute("id")の値がnullにならないように

みんなさん。こんにちは。
私はJSPを勉強していますが、session のところで、
session.getAttribute("id")の値を取得してから、
更新を押すと、取った値がnullになってしまうので、
どうすれば、その値を維持するか教えてください。
ありがとうございます。

7

回答

16583

閲覧

7件の回答

評価

0

sessionが維持されてないか、またはattributeを再設定してるかでしょ。
今何をやってるかも分からないのに、答えようがないよ。

評価

30

すみません。ログイン状態で、ユーザ名を表示したいけど、更新するか、他のページから呼び出すと、取った("id")がnull
になってしまうので、どうやってログアウトまでユーザ名を表示できるか。

下記のコードみたい書いてみたたけど:
main.jspファイル
------------
<script language='JavaScript'> 
<!-- 
function play(){ 
    document.lyricshow.action ="Lyric.jsp";
    document.lyricshow.submit();
    
}

//--> 
</script>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-31j">
<title>Lyrics</title>
</head>

<body background="image/main.jpg">

<%
String name = (String)session.getAttribute("id");
        if(name!=null&&name!=""){
        %><table border="0" width="100%" >
    <tr ><td> Hi <%=name %></td></tr>
    </table>
<input type ="button" onClick= "play()" value ="Play">

</body></html>

lyric.jspファイル
ーーーーーーーーーー
</head>
<body>
<td ><a href='./Main.jsp' title="トップページ"     onmouseover="iOn('Img1');"
                onmouseout="iOff('Img1');"><img name=Img1 src='image/onhome.jpg' 
                alt='Top Page' border='0' width='14' height='14' ></a>
</body>

評価

0

省略しすぎで
わけわかめ

String name = (String)session.getAttribute("id");
の時点でnameがnullだと言うのだから
大切なのは
idをセットしたときから
のロジックであって
idを取得した後のロジックはいらない

評価

0

なんだかな。

>document.lyricshow.action ="Lyric.jsp";
lyricshowなるものが見当たらないが…。

>charset=windows-31j
こんなcharset指定できないよ。

>String name = (String)session.getAttribute("id");
これだけじゃ消えるわけない。すでに書いてあるけど、どこで設定してるんだ?

>lyric.jspファイル
全く関係なさそうなんだが…。

で、

>更新を押すと、

の更新ってどこ。

評価

30

省略しすぎて、すみません。
>>String name = (String)session.getAttribute("id");
>これだけじゃ消えるわけない。すでに書いてあるけど、どこで設定してるんだ?
ここファイルに設定してる。
index.jsp
------------
Connection myCon = null;
    request.setCharacterEncoding("windows-31j");

    String mID=request.getParameter("id");
    String pass = request.getParameter("pass");
        
    Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
    myCon=DriverManager.getConnection("jdbc:odbc:db1");
    String sql="Select * from Login where ID=";
    
    Statement mySt = myCon.createStatement();
    ResultSet myRs = mySt.executeQuery(sql+"'"+ mID+"'");
    if(myRs.next()){
        String ConfirmID = myRs.getString("ID");
        String ConfirmPass = myRs.getString("Password");
        if (mID.equals(ConfirmID) && pass.equals(ConfirmPass)){
            session.setMaxInactiveInterval(60 * 10);
             session.setAttribute("id",mID);
           pageContext.forward("./Main.jsp");


>>更新を押すと、

>の更新ってどこ。

更新はIEブラウザのボタン


>>lyric.jspファイル
>全く関係なさそうなんだが…。

<td ><a href='./Main.jsp' title="トップページ" ==>
Main.jspファイルに戻るとIdがnullになるわけです。


評価

0

その処理って、ほんとにindex.jspに入ってるの?
main.jspではなく?

index.jspで入力フォーム表示
main.jspでログイン処理+メニュー
lyric.jspで個別データ再生

ってな流れなら、lyric.jsp→main.jspに行ったら

>String mID=request.getParameter("id");

がもう一回実行されて、パラメータがないからmID=nullで次のSQLが以下略。

ってことかと思ったんだけど。

評価

0

だから省略しすぎだって

index.jspで
SQLの結果が0件だと
session.setAttributeされないから
getAttributeしたらnullだね

質問から6ヶ月以上経過しているので、回答を書き込むことはできません。