Bazı kullanıcı bilgilerini düzenlemek için kullanılan bir JSP sayfam var. Bir kullanıcı web sitesine giriş yaptığında, bilgileri oturumda tutuyorum, ardından düzenleme sayfamda aşağıdakileri deniyorum:
<%! 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>
ancak oturum çözümlenemiyor diyerek hata veriyor. Bu konuda ne yapabilirim?
JSP implicit nesneleri session
, request
vb. gibi JSP bildirimi içinde mevcut değildir <%! %>
etiketleri içinde kullanılamaz.
Bunu doğrudan ifadenizde şu şekilde kullanabilirsiniz
<td>Username: </td>
<td><input type="text" value="<%= session.getAttribute("username") %>" /></td>
Diğer bir not, JSP'de scriptlet kullanımı uzun süredir kullanımdan kaldırılmıştır. EL (ifade dili) ve JSTL etiketlerinin kullanılması şiddetle tavsiye edilir. Örneğin, burada EL'yi şu şekilde kullanabilirsiniz
<td>Username: </td>
<td><input type="text" value="${username}" /></td>
En iyi yanı ise kapsam çözümlemesinin otomatik olarak yapılmasıdır. Yani, burada kullanıcı adı sırasıyla sayfa, istek, oturum veya uygulama kapsamlarından gelebilir. Belirli bir örnek için bir isim çakışması nedeniyle bunu geçersiz kılmanız gerekiyorsa, kapsamı açıkça şu şekilde belirtebilirsiniz
<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>
Kullanım
<% String username = (String)request.getSession().getAttribute(...); %>
Kullanımınızda <%! ... %>
sınıf düzeyine çevrilir, ancak istek yalnızca çevrilen servletin service()
yönteminde kullanılabilir.
<%! String username=(String)session.getAttribute("username"); %>
form action="editinfo" method="post">
<table>
<tr>
<td>Username: </td><td> <input type="text" value="<%=username %>" /> </td>
</tr>
</table>
ekle <%! String username=(String)session.getAttribute("username"); %>