2009-09-02 4 views
2

내 세션에 DLPUser 객체가 있습니다.이 DLPUser는 기본적으로 String, int 및 일부 유용한 정보 컨테이너입니다. Struts JSP : 세션 정보에서 텍스트 필드 값 설정

Map <String, Object> session = ActionContext.getContext().getSession(); 
session.put("logged-in","true"); 
session.put("user", user); //user is DLPUser user = new DLPUser(); 

지금 내가) (user.getName의 값을 표시하려면 (이 자바 내 액션 클래스의 내부 코드의 단편이다); 일부 JSP의 textField 내부 어떻게하면됩니까? Struts 태그로 작업 중이며 다음이 작동하지 않습니다.

<s:textfield label="Name" name="name" value="<% session.user.getName(); %>"/> 

또는

<s:textfield label="Name" name="name" value="#session.user.getName"/> 

이 간단한 있어야하는데 ...하지만 난 붙어 오전 스트럿과 JSP에서이 일에 대한 좋은 참조를 찾을 수있다. 도움이 매우 감사합니다.

답변

5

이 작업을 수행하는 방법을 배우고 있었고이 토론이 도움이되었습니다. 여러 웹 페이지의 자료와 책 "Struts 2 in Action"이 합쳐져서 필자는 내가 필요로하는 곳으로 나를 끌었습니다.

Nate와 nacho4d의 답변은 마크에 가깝습니다.여기에 내가 무슨 짓을 :

필수 수입 :

import java.util.Map; 
import com.opensymphony.xwork2.ActionSupport; 
import org.apache.struts2.interceptor.SessionAware; 

내 액션 클래스 ("사용자") 선언 :

:

public class User extends ActionSupport implements SessionAware { 

내 세션 변수는 사용자의 데이터 멤버입니다

Map <String, Object> session; 

그런 다음 사용자를 인증하는 내 방법 (UserModel은 데이터 멤버의 단순한 클래스이며 ge 라 자세 히/세터)

UserModel user; 
... 
session.put("User", user); 

마지막으로, 내 JSP 파일 : 세션에 액세스하는 구문은 방법/데이터 멤버 객체

  <s:if test="%{#session.User.isLoggedIn()}"> 
       Welcome back, <s:property value="%{#session.User.firstName}" /> 
       <s:property value="%{#session.User.middleName}" /> 
       <s:property value="%{#session.User.lastName}" />! 
       &nbsp;&nbsp;&nbsp;&nbsp; 
       <a href="Logout.action">Logout</a> 
      </s:if> 

알 수 있습니다.

  • 퍼센트 {} 당신이 세션을 스택/객체에 대한 액세스를 가져옵니다 {}
  • 세션 내의 표현식을 평가하기 위해 JSP를 말한다 : 나는 그것을 어딘가에 자세히 읽어 봤지만, 나는 같은데요?

그리고 결과적으로 개체와 해당 메서드/멤버에 액세스 할 때 일반적인 도트 연산자가 사용됩니다.

나는 초보자이지만 UserModel의 데이터 멤버가 비공개인지 여부와 상관없이 JSP가 어쨌든 액세스 할 수있는 것처럼 보입니다.

오. 하나의 마지막 비트, 그것을 "완료"하게, 로그 아웃하는 방법에 대해? 로그 아웃 동작을위한 내 Java :

public String logoutUser() 
{ 
    session.remove("User"); 
    return SUCCESS; 
} 
+0

원래 구문'# session.user.name'이 속성 태그에서 작동합니다. 그 이유는 확실하지 않지만 텍스트 필드 태그에서 작동하지 않습니다. 또한 UserModel의 속성은 private이지만 User 객체 (사용자가지도에 추가 한 객체)에 액세스하므로 비공개로 속성에 액세스 할 수 있습니다. – jsky

+0

제 의견은 ''에서 작동합니다. –

1

나는 ... 답변을 주셔서 대단히 감사합니다. Umar ;) 그러나 더 간단한 방법이 있습니까? 내 말은 , 어떻게 재산의 경우, 예를 들어

<s:textfield value=????> 

내부 자바 객체 나 변수를 사용할 수 있습니다 : 에 대한

방법 (세션 VAR)에서 내 사용자 이름의 내용을 인쇄 것인가?

나는 이것이 스트럿츠를위한 것이 아니라고 생각합니다. 하지만 정상적인 JSP로 적용 할 수 처럼 그래서 내 질문에 ??? (이 일을 지금 내가 테스트 할 수 있지만 것?) 당신에게

대단히 감사합니다

<% Map session = ContextAction.getContext().getSession(); %> 
<s:textfield value="%{session.user.name}"/> or 
<s:textfield value="%{session.get("user").getName()}"/> 

내가 클로서의 무엇입니까?

0

당신은 할 수 있어야한다 :

<s:textfield label="Name" name="name" value="#session.user.name"/> 

당신이 필요하지 않은 당신의 예에서 있었다 같은 이름 앞에 "GET". 또한 Umar의 대답이 Struts1의 예제 인 것 같습니다. Struts 2를 사용하고 있습니까?

+1

방금 ​​시도했지만 코드 위의 # session.user.name (텍스트 그대로)이 텍스트 필드에 표시됩니다. # session.user.name이 (가) 평가되지 않았습니다. – nacho4d

1

또 다른 메모.

<s:textfield name="userBean.username" maxlength="30" value="%{userBean.username}" ></s:textfield> 
1

<s:textfield value="%{#session.user.name}"/>이 나를 위해 일한 : 당신이 직접 자바 빈에 액세스해야 (세션을 우회)하는 경우 다음과 같은 구문을 사용할 수 있습니다.