2014-01-06 4 views
3
class SampleAction extends ActionSupport { 
private Map<String,String> circleIdNameMap; 

public String preprocess(){ 
--logic for populating value of MAP 
} 
--getters and setters 
} 

이제 내 문제는 페이지로드시 preprocess 함수를 호출하고 Map 값을 채 웁니다. 페이지 제출 후 다른 메소드가 호출되고 DB 상호 작용 후 JSP로 리디렉션되지만 이번에는 Map 값이 비어 있습니다. 나는이 Map을 Struts2의 드롭 다운 태그에 사용하고 있습니다. 조치 변수의 값 유지?

preprocess 같은 링크에 연결되어 있습니다 : 내 그럼 호출되지는 JSP, 그래서 두 번째로 리디렉션 할 때 링크가 그 이후라고 preprocess을 클릭

href="/gma/preprocessConfigureTspThreshold?operatorId=5102&sessionId=12332"‌`​ 

그래서 단지 처음 Map 값은 비어 있습니다.

  1. 지도가 세션에 저장되도록 유지해야합니까? 아니면 다른 것을 할 수 있습니까?

  2. 나는 preprocess 함수를 사용하지 말고 읽고, Preparable 인터페이스를 사용하십시오. 그러나 문서에 따라 :

    준비 방법은 항상 어떤 방법이 Action 클래스에 대해 호출 될 때마다 2 프레임 워크의 인터셉터
    을 준비 스트럿츠에 의해 호출됩니다.

그래서,이 모든 메소드에 대한 호출됩니다. 페이지가로드 될 때만 preprocess이 호출되기를 원합니다.

+0

'페이지로드시'메소드를 어떻게 호출합니까? 페이지로드시 호출되면 어떻게 맵이 비어 있습니까? 'return ERROR;의 직전에'preprocess()'를 간단하게 호출 할 수 있습니다. 그러면 JSP의 map은 비어 있지 않습니다. 당신이 할 수 action..so에 요청이있을 때 –

+0

이 메소드가 불려가는 준비를 그 페이지로드 또는 아무것도 사용하는 경우 –

+0

@Aniket : 내 전처리가 같은 링크에 연결되어 있습니다 : \t \t \t \t \t HREF = "/ GMA/preprocessConfigureTspThreshold? operatorId = 5102 & sessionId = 12332 "! 그래서 링크를 클릭 할 때만 전처리가 호출됩니다. 그 후에 JSP로 리디렉션 할 때 호출됩니다. –

답변

1

Preparable 액션 클래스의 prepare 메서드는 모든 액션 실행시 호출됩니다. 이것이 preprocess 메소드에서 드롭 다운을 위해지도를 준비하는 이유 일 수 있습니다. 드롭 다운

<s:select name="circleId" list="circleIdNameMap" listKey="key" listValue="value"/> 

이 코드의 의미에 대한

public class SampleAction extends ActionSupport { 
    private Map<String,String> circleIdNameMap; 
    private String circleId; 
    //getters and setters here 

    protected boolean reload = false; 

    private void preprocess(){ 
     // Get the Map by calling a stateless Session bean 
     circleIdNameMap = remoteInterface.getMap(); 
    } 

    public String action1(){ 
     preprocess(); 
     Map session = ActionContext.getContext().getSession(); 
     session.put("circleIdNameMap ", circleIdNameMap); 
     return SUCCESS; 
    } 

    public String action2(){ 
     Map session = ActionContext.getContext().getSession(); 
     circleIdNameMap = (Map<String,String>)session.get("circleIdNameMap"); 
     if (circleIdNameMap == null){ 
     if (reload) { 
      preprocess(); 
      Map session = ActionContext.getContext().getSession(); 
      session.put("circleIdNameMap ", circleIdNameMap); 
     } else { 
      addActionError("circleIdNameMap is null"); 
      return ERROR; 
     } 
     } 
     return SUCCESS; 
    } 

    ...//other actions 
} 

는 JSP는 다음과 JSP의 필드가 초기화되지 않은 경우 결과를 SUCCESS 또는 INPUT를 반환하지합니다.