ユーザー情報の編集に使用する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>
ただし、セッションを解決できないというエラーが発生します。私はそれについて何ができますか?
JSP 暗黙session
、request
などのようなオブジェクトは、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>
最良の部分は、スコープ解決が自動的に行われることです。したがって、ここではsernameはpage、または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>
つかいます
<% String username = (String)request.getSession().getAttribute(...); %>
<%! ... %>
の使用はクラスレベルに変換されますが、リクエストは変換されたサーブレットのservice()
メソッドでのみ使用可能です。
コンパイルエラーが発生する理由は、使用できない宣言ブロック(<%! %>
)のセッションにアクセスしようとしているためです。 jspのすべての暗黙オブジェクトは、サービスメソッドでのみ使用できます。宣言ブロックのコードは、サービスメソッドの外に出ます。
ELを使用することをお勧めします。これは単純化されたアプローチです。
${sessionScope.username}
は、必要な出力を提供します。
他のWebページでIDを使用したい場合、次のコードスニペットを使用して実行できます。
String id=(String)session.getAttribute("uid");
ここで、uidは、以前にIDを保存した属性です。次の方法で設定できます。
session.setAttribute("uid",id);