2014-01-20 33 views
0

我正在開發一個使用struts2的應用程序。我在一個JSP頁面中有一個按鈕,它在單擊時執行一個操作方法。我想執行此操作方法,但不刷新頁面。有什麼辦法可以做到嗎?這個動作的作用是設置一個整數的值,我只需要在頁面上顯示它。如何執行action類的方法而不刷新struts2中的頁面

我的方法:表單

public void setVariable(){ 
    //Code to get a random integer 
    return "SUCCESS"; 
} 

jsp頁面代碼:

<form method="post" action="setVariable"> 
    <input type="submit" value="Submit" /> 
</form> 

回答

0

如果我正確理解你。

在你的struts.xml

<action name="yourAction" class="ActionClass" > 
    <result name="success" type="httpheader" > 
     <param name="status">202</param> 
      </result> 
</action> 

把你Action responsehttpheader,這將反映無刷新頁面即響應將得出同樣的JSP頁面,你可以打印你使用的Action class設置變量該變量的setter

而在你的JSP處理基於結果

代碼爲

$.ajax({ 

    statusCode:{202:function() 
       { 
      alert("result was success"); 
        }} 
      }); 

我不是在JSP Ajax代碼的語法非常肯定。試着這樣做。

+0

我試過了。它只是給了我一個空白頁面。我試圖使用GET和POST方法,以相同的結果 –

+0

也,我試圖讀取變量的值使用

+0

我已編輯我的答案簽出。 – Babel

0

你爲什麼不嘗試用Ajax做到這一點?你可以執行一個動作,操縱數據,然後在JSP中得到結果?

在JSP:

function javascript_function(inputIfAny) 
{ 
    $.getJSON("<s:property value='%{ajaxCallUrl}' />", 
     { value: value}, 
      function(data) 
      { 
       dataAttributeValue = data.valueToSendToJSP; // If needed 
      }); 

} 

<s:url id="ajaxCallUrl" action="actionName" method="ajaxMethod" /> 

而且在Struts 2的動作:

public void ajaxAccountUpdateHandle() 
{ 
    Map<String, Object> params = ActionContext.getContext().getParameters(); 
    String value = params.get("numAcn"); 
    try 
    { 
     JsonFactory f = new JsonFactory(); 
     JsonGenerator generator = f.createJsonGenerator(response.getOutputStream()); 

     // Do stuff 
     generator.writeStartObject(); 
     generator.writeStringField("valueToSendToJSP", "foo"); 
     generator.writeEndObject(); 
     generator.flush(); 
     generator.close(); 
    } 
    catch (JsonGenerationException e) 
    { 
    } 
    catch (IOException e) 
    { 
    } 
} 

這樣,你甚至不需要在struts XML的條目。

+0

這是什麼意思:*你甚至不需要struts XML *中的條目?您可以直接使用''而不是使用'',而不使用'id'屬性,該屬性不建議使用。 –

相關問題