2017-04-08 6 views
0

私は新しいajaxです。$ {phList}を新しいarraylistに置き換えて、どのようにしてAjaxをリフレッシュすることなくコンテンツを更新できますか?Ajaxは新しいページを更新せずに新しいarraylistを置き換えます

ajaxはコントローラがデータを取得してarraylistに格納し、arraylistをajaxに渡します。 Ajaxはjspのコンテンツを更新します。次のステップfor eachループは、データベースからレコードを取得する場合に、列とチェックボックスに値を生成します。

このソリューションが他の人に役立つ可能性があります。ありがとう!

myJsp.jsp

<select id="selected_year" name="selected_year" class="form-control"> 
    <c:forEach var="line" items="${yearlist}"> 
     <c:choose> 
      <c:when test="${refreshInd ge 0 and line eq refreshInd}"> 
       <option selected="selected"><c:out value="${line}" /> 
       </option> 
      </c:when> 
      <c:otherwise> 
       <option><c:out value="${line}" /></option> 
      </c:otherwise> 
     </c:choose> 

    </c:forEach> 
</select> 

<c:forEach var="ph" items="${phList}" varStatus="PHstatus"> 
     <div class="row"> 
     <div class="col-md-4"> 
      <form:input path="phList[${PHstatus.index}].holidayDesc" class="form-control col-md-5" value="${ph.holidayDesc}" /> 
     </div> 

     <div class="col-md-3"> 
      <form:input path="phList[${PHstatus.index}].startDate" class="form-control" value="${ph.startDate}" id="calendar1" placeholder="dd/mm/yyyy" onkeypress="return noAlphabet(event)" /> 
     </div> 

     <div class="col-md-3"> 
      <form:input path="phList[${PHstatus.index}].endDate" class="form-control" value="${ph.endDate}" id="calendar2" placeholder="dd/mm/yyyy" onkeypress="return noAlphabet(event)" /> 
     </div> 

     <div class="col-md-2"> 
      <form:checkbox path="phList[${PHstatus.index}].checkboxDel" value="" class="cbposition" /> 
     </div> 
     </div> 
     <br> 
    </c:forEach> 

私はAJAXをトリガするselected_yearを変更した後、それがうまく動作しますが:成功機能(応答)が動作することはできません。私は上記のjspの$ {phList} showを置き換えることによって、既存の$ {phList}を削除し、新しいarraylistで更新したいと考えています。

myJavascript.js

$(function($) { 
    $("#selected_year").change(function(){ 
     var selectedText = $(this).find("option:selected").text(); 
     var $form = $(this); 
     var action = $form.find('.send').val(); 

     var list[]; 
     var array[]; 

     $.ajax("holiday/pubholiday.json?" , { 
      method: "GET", 
      accepts: "application/json", 
      dataType: "json", 
      data: $form.serialize() + '&selectedText=' + selectedText, 
      success: function(response) { 
       $("#phList").remove() 
       $(JSON.stringify(response)) 
    //how to pass the response which is my new arraylist to replace the ${phList} 
       }, 
     }).done(function(data) { 
      console.log(data) 
      alert("Data Sent" + selectedText) 
     }) 
     .fail(function(jqXHR, textStatus, errorThrown) { 
      var errorMessage = ""; 
      if (jqXHR.status == 401) { 
       errorMessage = "Your session has expired. Please <a href=\"<spring:url value='/login'/>\">login</a> again."; 
      }else if(jqXHR.status == 500){ 
       console.log(jqXHR.status); 
        console.log(jqXHR.responseText); 
        console.log(thrownError); 
      }else { 
       try { 
        var errorJson = JSON.parse(jqXHR.responseText); 
        errorMessage = errorJson.error; 

       } catch (e) { 
       errorMessage = errorThrown || textStatus; 
      } 
      } 
      }); 
    }) 
}); 

これは、ArrayListのオブジェクトモデルストアです。各レコードにはオブジェクトモデルデータが含まれます。

model.java

public class PubHoliday { 
    private int year; 
    private String holidayID; 
    private String holidayDesc; 
    private String startDate; 
    private String endDate; 
    private boolean checkboxDel; 
    private String selected_year; 
    private int refreshInd; 

    public int getYear() { 
     return year; 
    } 
    public void setYear(int year) { 
     this.year = year; 
    } 
    public String getHolidayID() { 
     return holidayID; 
    } 
    public void setHolidayID(String holidayID) { 
     this.holidayID = holidayID; 
    } 
    public String getHolidayDesc() { 
     return holidayDesc; 
    } 
    public void setHolidayDesc(String holidayDesc) { 
     this.holidayDesc = holidayDesc; 
    } 
    public String getStartDate() { 
     return startDate; 
    } 
    public String getEndDate() { 
     return endDate; 
    } 
    public void setStartDate(String startDate) { 
     this.startDate = startDate; 
    } 
    public void setEndDate(String endDate) { 
     this.endDate = endDate; 
    } 
    public boolean getCheckboxDel() { 
     return checkboxDel; 
    } 
    public void setCheckboxDel(boolean checkboxDel) { 
     this.checkboxDel = checkboxDel; 
    } 
    public String getSelected_year() { 
     return selected_year; 
    } 
    public void setSelected_year(String selected_year) { 
     this.selected_year = selected_year; 
    } 
    public int getRefreshInd() { 
     return refreshInd; 
    } 
    public void setRefreshInd(int refreshInd) { 
     this.refreshInd = refreshInd; 
    } 
} 
+0

問題について詳しくご説明ください。あなたはかなりのコードを提供していますが、動作しているかしていないか、何が変更必要なのかについての参照はありません – charlietfl

答えて

0

まず、あなたはID、一例でDIVで<c:forEach var="ph" items="${phList}" varStatus="PHstatus">ラッパーする必要があります。

<div id="list_holidays"> 
<c:forEach var="ph" items="${phList}" varStatus="PHstatus"> 
    ....... 
</c:forEach> 
</div> 

そして、成功にAjaxコード - 空のdiv#1 list_holidays - 結果を取得、各行、新しいdivを作成、divに追加#list_holidays

success: function(response) { 
    var wrapper = $('#list_holidays'); 
    wrapper.html(''); 
    //->foreach response result 
    // -> $('div').html(your template).appendTo(wrapper) 
} 
+0

これは半分の動作です。私はラッパーを試した後、それは私の全体のWebページを上書きし、テンプレートループは重複しています。 –

0

JSPはサーバー側のレンダリングです。つまり、リクエストが受信されると、サーバは変数${phList}を使用して動的HTMLページをレンダリングし、そのページをブラウザに送信します。 Ajaxはブラウザに座っているjavascriptによるリクエストです。したがって、ブラウザは変数$(phList}を直接知り、変更してテンプレートに影響を与えることができません。

しかし、あなたが言ったことは達成できます。以下のいずれかの方法

方法1(最も簡単な)で:

のみ、この代わりにJSONで応答holiday/pubholiday.aspを実装します。

<c:forEach var="ph" items="${phList}" varStatus="PHstatus"> 
    <div class="row"> 
    <div class="col-md-4"> 
     <form:input path="phList[${PHstatus.index}].holidayDesc" class="form-control col-md-5" value="${ph.holidayDesc}" /> 
    </div> 
    ... 
    <br> 
</c:forEach> 

この

<div id="container" > 
    <c:forEach var="ph" items="${phList}" varStatus="PHstatus"> 
    ... 
    </c:forEach> 
</div> 
のようなものは、これにメインページで、あなたのAJAX要求を変更

配列項目にコンテナ要素を追加します。 pubholiday.jspからの応答を受け取ったら、#containerの内容をajaxから受け取った内容に置き換えます。

... 
$.ajax("holiday/pubholiday.asp?" , { 
     method: "GET", 
     accepts: "application/html", 
     dataType: "json", 
     data: $form.serialize() + '&selectedText=' + selectedText, 
     success: function(response) { 
      // This is where magic happens 
      $("#container").html(response); 
     }, 
    }).done(function(data) { 
     console.log(data) 
     alert("Data Sent" + selectedText) 
    }) 
... 

方法2

あなたはsuccess callbackで、唯一のJSONする応答が必要な場合はJSONを読み込み、文字列を連結することによって自分自身をHTMLと、その後#container要素を置き換える生成します。

方法3(推奨)

ユーザーHTMLにJSONをレンダリングするために、ポリマーまたはハンドルバーのようなライブラリをレンダリングするいくつかのクライアント側。

+0

古いarraylist $ {phList}はまだ残っていますが、私の新しいarraylistに置き換えることはできません。 –

+0

あなたはどんな方法でしたか?私が助けることができるように、あなたが試みたものについてもっと説明できますか? –

関連する問題