2011-04-12 8 views
0

Java 서블릿 세션과 관련된 문제가 있습니다.HttpSession, session.getAttribute(), problem

Vector buylist=(Vector)session.getAttribute("Register"); 
if (action.equals("del")) { 
String del = request.getParameter("deli"); 
int d = (new Integer(del)).intValue(); 
buylist.removeElementAt(d); 
} 
session.setAttribute("Register", buylist); 

감사 : 나는 setAttribute(); 여기 코드되기 전에 세션 객체의 getAttribute() 기능을 사용하는 이유를 이해하지 않습니다. Register 속성이 다른 곳에서 설정할 수 있습니다

+1

작성한 동료에게 문의하십시오. 아니면 너희들 stackoverflow를 통해 의사 소통합니까? :-) –

+0

그는 자습서를 읽을 수 있습니다. –

답변

0

때문에 (... 같은 나쁜 경우 JSP(), 서블릿 또는 필터에서)

0

내가 생각할 수있는 유일한 설명입니다 : 모든 당신의 먼저 검색 벡터, 그런 다음 변경 사항을 저장 한 후 다시 세션 객체에 저장합니다.

0

코드가 손상되었거나 setAttribute()이 쓸모 없습니다.

세션에서 변경 가능한 컨테이너 (목록 또는 벡터와 같은)를 가져온 경우 세션에 다시 넣을 필요가 없습니다. 다음 코드와 동일합니다.

session.setAttribute("Register", buylist); 
session.setAttribute("Register", buylist); 
session.setAttribute("Register", buylist); 

없음 그러나 첫 번째 줄은 효과가 있습니다.

다른 가능성은 코드 버그를 가지고 있다는 것입니다 무엇을 정말 의미되었다이 있었다 : 이미 존재하지 않는 경우

Vector buylist = session.getAttribute("Register"); 
if(buylist == null) { 
    buylist = new Vector(); 
    session.setAttribute("Register", buylist); 
} 

즉 새로운 벡터를 만들 수 있습니다.

+1

한 가지를 이해하지 못합니다. 먼저 특성을 설정하고 세션에 getAttribute 메서드를 사용해야합니다. "Register"속성이 어디에도 정의되어 있지 않을 때이 코드는 어떻게 사용됩니까? 속성 "Register"를 정의하는 유일한 방법은 setAttribue()를 사용하고 getAttribute를 사용하여 세션에 저장하는 것입니다. – ARAZA

+0

'getAttribute()'는 알 수없는 속성에 대해'null'을 반환합니다. 게시 한 코드는 다른 누군가가 이미 세션에 'Register' 속성을 어딘가에 넣은 경우에만 작동합니다. 네가 NPE를 얻지 못했기 때문에, 이것은 일어 났음에 틀림 없다. –

1

이 코드는 세션 등록 속성으로 표시된 수정 된 벡터를 다시 저장하려고합니다. 그러나 일부 요소가 제거되거나 추가 된 후에도 특성을 다시 설정하지 않아도됩니다. 세션에 저장된 참조와 그 변경 사항이 본질적으로 개체에 적용되기 때문입니다.