2017-01-13 9 views
0

javascriptで変数を作成しようとしていて、その変数をスプリングMCUコントローラで使用しようとしています。残念ながら、私はそれを理解することができないと変数は空になるのを続ける。ここでスプリングコントローラでjavascript変数を取得する

は、私は、変数を設定し、私のjavascriptです:

<script language="JavaScript"> 
function checkBoxValues() { 
    checkboxes = document.getElementsByName('message'); 

    var hopeThisWorks = ""; 
    for (var i = 0, n = checkboxes.length; i < n; i++) { 
     if (checkboxes[i].checked == true) { 
      message = checkboxes[i].value; 
      var element = message.split(","); 
      resubmitMessage(element[0], "" + element[1] + "",element[2]); 
      var hopeThisWorks = "" + element[2] +""; 
      alert(hopeThisWorks); 
     } 
    } 

} 
</script> 

は、その後、私は、この変数を取ると、次のように入力としての私のjspに追加します。ここでは

<input name="abc" type="hidden" value="${hopeThisWorks}"> 

はで私のコードです私の春のmvcコントローラ:

@RequestMapping(method = RequestMethod.POST, value = "resubmit") 
public String resubmit(@RequestParam(value = "abc") String param, Model model) { 

    model.addAttribute("messageList", param); 

    return RESUBMIT; 
} 

私は変数をjspファイルで呼び出して次の:

<table class="results table table-striped table-bordered table-condensed"> 
<thead> 
<tr> 
    <td colspan="10"> 
     <h5>Bulk Resubmit Query Results</h5> 
    </td> 
</tr> 
<tr> 
    <jsp:include page="../commons/MessageTrackingIdHeader.jsp"/> 
    <jsp:include page="../commons/ActionHeader.jsp"/> 
    <jsp:include page="../commons/ConversationIdHeader.jsp"/> 
    <jsp:include page="../commons/TimeStampHeader.jsp"/> 
    <jsp:include page="../commons/ProcessIdHeader.jsp"/> 
    <jsp:include page="../commons/ExternalMessageIdHeader.jsp"/> 
    <jsp:include page="../commons/BatchIdHeader.jsp"/> 
    <jsp:include page="../commons/ResubmitMessage.jsp"/> 
</tr> 
<p>Test <c:out value="${messageList}"/></p> 

+0

JS変数を設定するのではなく、JSを使用して値をHTMLフォームの 'input type = hidden'要素に設定します。またはAjaxを使用してPOSTを実行する –

+0

jspファイルを使用しています。あなたは私がそれをどうやって行うことができるかの例を持っていますか?私は通常jspファイルではなく、javascriptファイルで入力を使用します。 –

+1

私は、あなたが望むことができるとは思えません。まず、Javaがサーバー上で実行され、HTMLファイルが作成されます。 JSPファイルを使用してHTMLを作成できます。 HTMLはブラウザに送信され、ブラウザはJavascriptコードを実行します。 _あなたのJavascriptメソッドがrunning_を開始するまで、変数は作成されません。その時間までにHTMLは既に作成されているので、JSP経由でJavascript変数を取得するのは遅すぎます。 @ScaryWombatによると、1つの解決策は、JavaScriptを直接(おそらくjQueryを使用して)変更することです。 – ajb

答えて

0

あなたはjavascript関数から直接入力値を設定することができます。より良い入力にid属性を追加します。あなたのjavascript関数で

<input id="abc" name="abc" type="hidden" value=""> 

そしてを:フォームを送信しながら、

<script language="JavaScript"> 
function checkBoxValues() { 
    checkboxes = document.getElementsByName('message'); 

    var hopeThisWorks = ""; 
    for (var i = 0, n = checkboxes.length; i < n; i++) { 
     if (checkboxes[i].checked == true) { 
      message = checkboxes[i].value; 
      var element = message.split(","); 
      resubmitMessage(element[0], "" + element[1] + "",element[2]); 
      var hopeThisWorks = "" + element[2] +""; 
      document.getElementById("abc").value = hopeThisWorks; 
     } 
    } 

} 
</script> 

今変数が送信されます。

0

クライアント側とサーバー側の間で変数(またはデータ)を通信する良い方法は、Ajaxリクエストを使用することです。 あなたが.jspにいるとしても、ajaxを使用することができます(JqueryまたはAngularを使用する方が簡単です)。ここでexemple:

function foo(){ 
     var data = '{"key":"'+value+'"}'; // here you create your json containing the var that you want to send to your server 
     $.ajax({ 
      type : "POST", 
      contentType : "application/json", 
      url : "/theLocalisation", // here you put the "Url" of your spring mvc controller 
      data : data, 
      timeout : 100000, 
      success : function(data) { 
       var json = JSON.parse(data); 
      //here it's the callback in the success case 
      }, 
      error : function(e) { 
       console.log("ERROR: ", e); 
      }, 
      done : function(e) { 
      } 
     }); 
    } 

サーバー側:

@RequestMapping(value = "/theLocalisationn") 
    public String getTheStation(@RequestBody String data){ 
     // here you will receive your 
     JSONObject jsonObj = new JSONObject(search); //transform the string in JSON to use it. 
     System.out.println(jsonObj); 
     //then do your magic here. 

     return null; 
    } 

PS:私はこのexempleができませんので、あなたに

0

を助けることを望んlibにorg.jsonとjQuery

を使用HTTPリクエスト、 を送信せずにコントローラプロパティの値を設定してください。ページをロードした後、コントローラがAjax要求を処理してプロパティを変更することができます。この場合は、リフレッシュするまで新しい値を表示することはできません)、またはJavaScriptを使用して入力の値を設定した後に入力で送信します。

<input name="abc" type="hidden" id="myinput" value="${hopeThisWorks}"> 

<script language="JavaScript"> 
function checkBoxValues() { 
    checkboxes = document.getElementsByName('message'); 

    var hopeThisWorks = ""; 
    for (var i = 0, n = checkboxes.length; i < n; i++) { 
     if (checkboxes[i].checked == true) { 
      message = checkboxes[i].value; 
      var element = message.split(","); 
      resubmitMessage(element[0], "" + element[1] + "",element[2]); 
      var hopeThisWorks = "" + element[2] +""; 
$("#myinput").attr("value",hopeThisWorks); 
      alert(hopeThisWorks); 
     } 
    } 

} 
</script> 
関連する問題