2015-10-02 61 views
1

我想解釋一下標題可能不太清楚。 我們有一個提交按鈕的jsp表單,它調用一個動作。 在這個活動中,我們去執行一些方法來執行一些微積分的服務。這個演算之一(高於或低於閾值的值)必須改變/執行一個javascript函數。換句話說,動作演算之後需要能夠在同一個jsp頁面中執行一個javascript函數。Struts動作後執行javascript函數做一些計算

我所沒有成功完成:

我創建JSP隱藏屬性和2個條件語句爲真或假的狀態。假狀態默認情況下(在Java中的表單)給予屬性,並正常工作。 但是,當我改變形式中的屬性的值在JSP中沒有任何變化,該屬性仍然有一個錯誤的值。 我們不能去另一個頁面,我們呆在同一個jsp頁面。

JSP並未實時評估此屬性的值?

action和jsp之間的任何其他選項進行通信?

JSP財產

<nested:hidden property="quitProgressBar"></nested:hidden> 
      <nested:equal value="true" property="quitProgressBar"> 
       <script> 
      alert('Prueba JVE'); 
     </script> 
      </nested:equal> 
      <nested:equal value="false" property="quitProgressBar"> 
       <script> 
     alert('Recien cargado'); 
     </script> 
      </nested:equal> 
+1

爲什麼不嘗試通過Ajax調用Struts動作?T一旦你的行動已經迴應,你可以簡單地調用你的js函數,因爲你「從不離開」客戶端。 – javatutorial

+0

不要離開客戶端,停留在同一頁面上並重寫代碼,因爲它的寫法是假設在另一端執行。 –

回答

2

可以通過調用通過Ajax Struts2的行動嘗試。例如:

FORM

<form id="myForm"> 
    <input id="param1" name="param1" type="text" /> 
    <input id="param2" name="param2" type="text" /> 

    <button type="submit">Submit</submit> 
</form> 

JQUERY

$(document).ready(function() { 
    $('#myForm').submit(function() { 
     var param1 = $(this).find('#param1'); 
     var param2 = $(this).find('#param2'); 

     $.ajax({ 
      url: '/route/to/action', 
      type: 'POST', 
      data: { 
      'param1': param1, /* setParam1(String param1) required!*/ 
      'param2': param2, /* setParam2(String param2) required!*/ 
      }, 
      dataType: 'json', 
      complete: function (jqXHR, textStatus) { 
       // DO SOMETHING 
      }, 
      success: function (response) { 
       // DO SOMETHING 
      }, 
      error: function (jqXhr, textStatus, errorThrown) { 
       console.log(jqXhr); 
       console.log(textStatus); 
       console.log(errorThrown); 
       // DO SOMETHING 
      } 
     }); 
    }); 
}); 

在Struts2的控制器,你需要的所有計算和操作返回類型必須是JSON(看看這裏Strtus2 json plugin。Ajax magics!

+0