2013-07-02 4 views
30

나는 사용자의 일부 정보를 편집하는 JSP 페이지가 있습니다. 사용자가 웹 사이트에 로그인하면 해당 정보가 세션에 보관됩니다. 그런 다음 내 편집 페이지에서 다음을 시도하십시오.jsp 페이지에서 session을 사용하여 정보를 얻는 방법?

<%! String username=session.getAttribute("username"); %> 
form action="editinfo" method="post"> 

    <table> 
     <tr> 
      <td>Username: </td><td> <input type="text" value="<%=username %>" /> </td> 
     </tr> 

    </table> 

그러나 세션을 확인할 수 없다는 오류가 발생합니다. 그것에 대해 무엇을 할 수 있습니까?

감사

답변

73

JSP, request는 JSP 선언 <%! %> 태그 내부에 사용할 수 없습니다.

당신은 오랫동안 사용되지 않습니다 JSP의 스크립틀릿을 사용하여, 다른 메모에서

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

표현에서 직접 사용할 수 있습니다. EL (표현식 언어)과 JSTL 태그를 사용하는 것이 좋습니다. 예를 들어 여기에서 EL을 사용할 수 있습니다.

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

가장 좋은 부분은 자동으로 범위가 결정된다는 것입니다. 그래서, 여기 이름페이지, 또는 요청, 또는 세션, 또는 응용 프로그램의 순으로 범위에서 올 수 있습니다. 특정 예를 들어 당신이 때문에 이름 충돌의이 메소드를 오버라이드 (override) 할 필요가 있다면 당신은 명시 적으로 <%! String username=(String)session.getAttribute("username"); %>

+0

그게 고마워요 – yrazlik

+0

@Downvoter, 제발 의견을 남겨주 내 대답을 향상시키는 데 도움주세요. 감사. –

+0

스크립틀릿은 좋지 않으며 더 이상 사용되지 않지만 때때로 리팩터링 할 시간이없는 레거시 코드가 붙어 있습니다. –

6

사용

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

<%! ... %>의 사용은 클래스 수준 변환됩니다 참고하지만, 요청이 번역 서블릿의 service() 방법에서만 사용할 수 있습니다. 등 session 좋아 암시 객체

See how JSP code is translated to a servlet.

+0

감사합니다,하지만 지금은 해결할 수없는 요청 : – yrazlik

+1

@bigO '클래스 수준의 표현으로 변환되어 '때문에 잘 아, 그건. 추가 정보를 추가했습니다. – Uooo

-1
<%! 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> 

로 범위를 지정할 수 있습니다 사용할 수없는 선언 블록 (<%! %>)에서 세션에 액세스하려고합니다. jsp의 모든 암시 적 객체는 서비스 메소드에서만 사용할 수 있습니다. 선언적 블록의 코드는 서비스 메소드 밖에 있습니다.

EL을 사용하는 것이 좋습니다. 단순화 된 접근 방식입니다.

${sessionScope.username} 원하는 출력을 제공합니다.

7

당신이 컴파일 오류가 발생하는 이유는 당신을 추가

<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> 
-1

직접 사용할 수 있습니다 (String) session.getAttribute ("username"); 내부 스크립틀릿 태그 (예 : < %%>).

-1

form action="editinfo" method="post"> 
 
<table> 
 
    <tr> 
 
    <td>Username:</td> 
 
    <td> 
 
     <input type="text" value="<%if(request.getSession().getAttribute(" parameter_whatever_you_passed ") != null 
 
{ 
 
request.getSession().getAttribute("parameter_whatever_you_passed ").toString(); 
 
} 
 
%>" /> 
 
    </td> 
 
    </tr> 
 
</table> 
 
</form>

+0

단지 코드를 게시하는 것이 아니라 함께 설명을 제공하십시오. –

관련 문제