2014-01-06 28 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的值。在頁面提交之後,調用另一個方法,並且在一些數據庫交互之後,它將重定向到JSP,但這次Map的值爲空。我在Struts2中使用這個Map作爲下拉式標籤。維護動作變量的值?

preprocess中的鏈接關聯,如:當我重定向到我的JSP所以它不叫的話,那麼第二次,當鏈接被點擊preprocess叫,之後

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

因此,只有第一次Map的值爲空。

  1. 我應該把地圖放在一個會話中,以便保留它嗎?還是可以做點別的?

  2. 我看了說不要用preprocess功能,用Preparable接口。但是,按照文檔:

    的準備方法將總是由Struts的所謂2框架的準備攔截
    每當任何方法被調用Action類。

所以,它會被稱爲每一個方法。我只想在頁面加載時調用preprocess

+0

你是如何在頁面加載時調用方法的?如果它在頁面加載時被調用,那麼map是空的?您可以簡單地在'return ERROR;'之前調用'preprocess()',然後在JSP地圖上就不會爲空。 –

+0

準備方法被調用時,有一個請求,你action..so無論是頁面加載或任何使用情況下 –

+0

@Aniket:我的預處理是在像鏈接關聯: \t \t \t \t \t HREF =「/ GMA/preprocessConfigureTspThreshold?operatorId = 5102&的sessionId = 12332" !所以只有當第一次點擊鏈接時,預處理被調用,之後當我重定向到我的JSP,所以它不叫 –

回答

1

Preparable動作類的prepare方法在每個動作執行時調用,沒錯。這可能是您爲preprocess方法中的下拉菜單準備地圖的原因。

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的下拉

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

這段代碼的意思是:你不應該返回結果SUCCESSINPUT如果JSP領域不被初始化。