2011-11-21 26 views
0

嗨,我有兩個JSP頁面,並且是引用相同的Struts Action類。當前進時,第一個JSP頁面中的值在第二個JSP中可用。但是當我點擊後退按鈕時,這些值是空的。請給出建議我有什麼辦法可以提供這個值前面和後面的動作。 在此先感謝。如何從Struts2中的兩個jsp頁面前進和後退動作獲取值?

第一個JSP:

<s:textarea name="incidentBean.description" id="descriptionId" 
    rows="2" cols="34" cssClass="textarea200" > 
</s:textarea> 

在我的第二個JSP:

<s:textarea name="descriptionId" id="descriptionId" readonly="true" 
    value="%{incidentBean.description}" 
    rows="2" cols="34" cssClass="textarea200" cssStyle="background-color: #C0C0C0"> 
</s:textarea> 

這裏是我的Action類

public class BCMCaptureInitialIncidentAction extends DefaultActionSupport { 
    private BCMInitialIncidentBean incidentBean; 
    private String descriptionId; 
    public BCMInitialIncidentBean getIncidentBean() { 
     return incidentBean; 
    } 

    public void setIncidentBean(BCMInitialIncidentBean incidentBean) { 
     this.incidentBean = incidentBean; 
    } 

    public String getDescriptionId() { 
     return descriptionId; 
    } 

    public void setDescriptionId(String descriptionId) { 
     this.descriptionId = descriptionId; 
    } 

    /** 
    * This method is used for preparing the data to pre-populate the Capture Initial Incident Screen 
    * @return String 
    * @param 
    * @exception BcmException 
    * @exception BCMDatabaseException 
    */ 
    public String prepareInitIncident(){ 
     System.out.println("prepareInitIncident Entered"); 
     if(incidentBean!=null) 
      System.out.println("prepareInitIncident description:"+incidentBean.getDescription()); 
     return SUCCESS; 
    } 

    public String validateCaptureIncident(){ 
     if(incidentBean!=null) 
      System.out.println("validateCaptureIncident description:"+incidentBean.getDescription()); 
     return SUCCESS; 
    } 

} 
+0

您在您的動作類中定義了incidentBean,因此該值在第二個jsp中可用,而他們沒有範圍的框架在您從第二個jsp返回時設置「descriptionId」,因此值對第一個jsp不可用 –

回答

0

你的意思是,當你點擊一些提交按鈕,它回到第一個jsp值不在嗎?

which values are you talking about? 

第一個jsp值或第二個jsp值?一件事情就是請求完成struts傾向於清除值棧,它是struts2請求處理循環的主要存儲空間,對於一個新的請求,它創建一個新的請求對象並將其放置在值棧中。 只有在詳細說明您的用例時才能更詳細地回答。

編輯

按照註釋 如果你點擊提交按鈕,這些價值和請求處理週期開始Struts2的地方在價值棧這些價值觀,使他們將可用於特定的請求處理週期。 從第二個jsp點擊提交按鈕意味着一個新的請求對象將由框架創建並將被放置在值棧中。 所以我們必須保持這些值,如果我們希望他們回到第一個jsp。

**Edit2** 

根據最後的評論,如果用戶點擊返回按鈕,你必須將值返回到第一個動作,所以在這裏你有以下選項。 由於在第二個操作中您顯示的是用戶在文本區域中輸入的值,所以當用戶想要返回時,此值將被設置爲descriptionId屬性。所以現在你可以做以下的事情

<s:textarea name="incidentBean.description" id="descriptionId" 
    rows="2" cols="34" cssClass="textarea200" value="%{descriptionId}" > 
</s:textarea> 

只是照顧約value="%{descriptionId}"當你將顯示JSP第一次。

+0

是Umesh,當我點擊一些提交按鈕,它返回到第一個jsp值是不存在的。我有兩個值可以說在第一個JSP中的a,b在第二個JSP中獲取這兩個值,但是當點擊返回按鈕時第二個JSP這些a,b值在第一個JSP中不可用。 –

+0

@Rakesh:你是否將這些值移回到動作並將它們設置爲值堆棧,只有將它們設置爲值堆棧時纔可用 –

+0

:以下是代碼:在我的第一個JSP中:在我的第二個JSP中:

相關問題