web-dev-qa-db-ja.com

JSPページでセッションを使用して情報を取得する方法

ユーザー情報の編集に使用するJSPページがあります。ユーザーがWebサイトにログインするとき、セッションの情報を保持し、編集ページで次のことを試みます。

<%! String username=session.getAttribute("username"); %>
<form action="editinfo" method="post">
    <table>
        <tr>
            <td>Username: </td><td> <input type="text" value="<%=username %>" /> </td>
        </tr>
    </table>
</form>

ただし、セッションを解決できないというエラーが発生します。私はそれについて何ができますか?

42
yrazlik

JSP 暗黙sessionrequestなどのようなオブジェクトは、JSP宣言<%! %>タグ内では使用できません。

expressionで直接使用できます

<td>Username: </td>
<td><input type="text" value="<%= session.getAttribute("username") %>" /></td>

また、JSPでのスクリプトレットの使用は長い間非推奨になっています。 EL(式言語)およびJSTLタグの使用を強くお勧めします。たとえば、ここではELを次のように使用できます。

<td>Username: </td>
<td><input type="text" value="${username}" /></td>

最良の部分は、スコープ解決が自動的に行われることです。したがって、ここではsernamepage、またはrequest、またはsession、またはapplicationその順序でスコープ。特定のインスタンスについて、名前の衝突のためにこれをオーバーライドする必要がある場合、スコープを次のように明示的に指定できます。

<td><input type="text" value="${requestScope.username}" /></td> or,
<td><input type="text" value="${sessionScope.username}" /></td> or,
<td><input type="text" value="${applicationScope.username}" /></td>
92
Ravi Thapliyal

つかいます

<% String username = (String)request.getSession().getAttribute(...); %>

<%! ... %>の使用はクラスレベルに変換されますが、リクエストは変換されたサーブレットのservice()メソッドでのみ使用可能です。

JSPコードがサーブレットに変換される方法を参照してください。

9
Uooo

コンパイルエラーが発生する理由は、使用できない宣言ブロック(<%! %>)のセッションにアクセスしようとしているためです。 jspのすべての暗黙オブジェクトは、サービスメソッドでのみ使用できます。宣言ブロックのコードは、サービスメソッドの外に出ます。

ELを使用することをお勧めします。これは単純化されたアプローチです。

${sessionScope.username}は、必要な出力を提供します。

8
Darshan Mehta

他のWebページでIDを使用したい場合、次のコードスニペットを使用して実行できます。

String id=(String)session.getAttribute("uid");

ここで、uidは、以前にIDを保存した属性です。次の方法で設定できます。

session.setAttribute("uid",id);
0
Surya S