私はSpringMVCを初めて使用します。jspページでajaxを使用して、別の選択ボックスの変更イベントで選択ボックスにデータを入力したいと思います。
jspページは次のようなものです。
<c:url var="RatePlanOfClientURL" value="/ratePlansofUser.jav" />
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
<link rel="stylesheet" href="Scripts/jquery-ui-1.8.16/themes/base/jquery-ui.css" type="text/css" />
<link rel="stylesheet" href="Scripts/jquery-ui-1.8.16/themes/base/jquery.ui.autocomplete.css" type="text/css" />
<script src="Scripts/jquery-ui-1.8.16/jquery-1.6.2.js"></script>
<script type="text/javascript" src="Scripts/jquery-ui-1.8.16/ui/jquery-ui.js"></script>
<script type="text/javascript" src="Scripts/jquery-ui-1.8.16/ui/jquery.ui.core.js"></script>
<script type="text/javascript" src="Scripts/jquery-ui-1.8.16/ui/jquery.ui.position.js"></script>
<script type="text/javascript" src="Scripts/jquery-ui-1.8.16/ui/jquery.ui.widget.js"></script>
<script type="text/javascript">
window.scrollTo(0, 1);
</script>
<script type="text/javascript">
$(document).ready(function() {
$("#parentClient").change(function(){
$.getJSON('${RatePlanOfClientURL}', {
clientId : $(this).val(),
ajax : 'true'
},
function(data) {
alert("hai");
var html = '<option value="">Select '+$("#parentClient").val()+'</option>';
var len = data.length;
for ( var i = 0; i < len; i++) {
html += '<option value="' + data[i].rateID + '">' + data[i].rateName
+ '</option>';
}
html += '</option>';
$('#ratePlanList').html(html);
});
});
});
</script>
<fieldset>
<div>
<label> Parent Account</label>
<form:select id="parentClient" path="reseller.clientResellerParentId" class="addDropdown">
<form:option value="0" label="Select Parent"></form:option>
<form:options items="${ClientList}" itemValue="clientId" itemLabel="clientName"/>
</form:select>
</div>
<div>
<label >Rate Plan</label>
<form:select id="ratePlanList" path="reseller.resellerRateplan.ratePlanID" class="addDropdown">
<form:option value="0" label="Select RatePlan"></form:option>
<form:options items="${RatePlanList}" itemValue="rateID" itemLabel="rateName"/>
</form:select>
<form:errors path="reseller.resellerRateplan.ratePlanID" cssStyle="color:red"></form:errors>
</div>
</fieldset>
そして私のコントローラークラスでは
@RequestMapping(value = "/ratePlansofUser.jav", method = RequestMethod.GET)
public @ResponseBody List<RatePlanData> ratePlansForClient(
@RequestParam(value = "clientId", required = true) Integer clientId,
HttpSession session)
{
System.out.println("Reached Controller for "+clientId);
return ratePlanService.getRatePlanForClient(clientId);
}
最後に、私が持っているデータベースコントローラークラス
public List<RatePlanData> getRatePlanForClient(int id)
{
Criteria myCriteria = sessionfactory.getCurrentSession().createCriteria(RatePlanData.class);
myCriteria.add(Restrictions.eq("clientID",id ));
return myCriteria.list();
}
親クライアントの選択ボックスを変更するたびに、コントローラーメソッドが呼び出しています(System.out.println("Reached Controller for "+clientId);
印刷中です)。また、子を持たない親を選択すると、そのスクリプトのアラートボックスが表示されます。しかし、子を持つ親を呼び出すと、それは機能しません(そのアラートボックスは表示されませんがSystem.out.println("Reached Controller for "+clientId);
、コンソールで印刷されます)。
誰かが問題の可能性を指摘できますか?
前もって感謝します..
編集..firebugを使用してスクリプトのajax関数の変数データを確認しました。子を持たない親を選択すると、データの値が「[]」と表示されます。また、関数(データ)に遭遇すると、すべてのスクリプトをスキップします。誰かアイデアがありますか?