//struts.xml
<package name="ajax" namespace="/" extends="struts-default,json-default">
<action name="CheckUserAction" class="com.controller.ajax.AjaxAction">
<result type="json">
<param name="root">jsonData</param>
</result>
</action>
</package>
//Action Class
public class AjaxAction extends ActionSupport {
private String capacity;
private String greeting;
private List<String> countryList;
private Map<String, Object> jsonData;
public String execute() throws Exception {
jsonData = new LinkedHashMap<String, Object>();
greeting = "HI " + "AMIT";
countryList = new ArrayList<String>();
countryList.add("US");
countryList.add("UK");
countryList.add("Russia");
jsonData.put("capacity", this.getCapacity());
jsonData.put("countryList", countryList);
jsonData.put("countryMap", countryMap);
jsonData.put("greeting", greeting);
return SUCCESS;
}
//Getter and setters
}
//Script
$(document).ready(function() {
$("#capacity").change(function() {
var capacity = $("#capacity").val();
$.getJSON('CheckUserAction.action', {
capacity : capacity
}, function(data) {
$('#abc').append('<br>' + data.capacity);
$('#abc').append('<br>' + data.countryList);
$('#xyz').attr('value', data.greeting);
$('#pqr').attr('list', data.countryList);
});
return false;
});
});
//JSP code
<table border="0">
<tr>
<td><s:label for="capacity" value="Capacity" /></td>
<td><s:textfield name="capacity" placeholder="100" id="capacity"
value="abc"></s:textfield></td>
</tr>
<tr>
<td><s:label for="dynamic" value="Ajax" /></td>
<td><s:textfield name="dynamic" value="learning" id="xyz"></s:textfield></td>
</tr>
<tr>
<td><s:label for="flightId" value="Flights" /></td>
<td><s:select list="#{'1':'1' }" name="fightId" id="pqr"></s:select></td>
</tr>
</table>
<div id="abc">Initial</div>
我想用json返回列表countryList填充列表(id:pqr),我能够更改textfield(id:xyz)的属性值,我还将它附加到div(id:abc)但我不能更改struts选择标记的属性列表。 它是否与如何在HTML中填充struts标记有关。
此外,我不使用struts-jquery插件也不使用dojo插件。 感谢
答案 0 :(得分:0)
您在data.countryList中收到了哪些数据?你可以发布这些数据吗?我希望没有名为 list 的attr属性用于下拉列表。列表属性由Struts提供。您可以为下拉列表撰写数据,如
<option value="1">India</option>
<option value="2">United States</option>
<option value="3">United Kingdom</option>
如果您要发送新列表,可以填写countryList,
$('#pqr').html(composed_country_list);
此外,您正在更新counrty意味着您可以将数据附加到下拉列表,
$('#pqr').append(composed_country_list);
如果这有帮助,请告诉我。
答案 1 :(得分:0)
以下代码对我有用
//JSP
<s:select list="{}" name="fightId" id="pqr"></s:select>
脚本文件
$(document).ready(function() {
$("#capacity").change(function() {
var capacity = $("#capacity").val();
$.getJSON('CheckUserAction.action', {
capacity : capacity
}, function(data) {
countryListItem = data.countryList;
});
return false;
});
});
var pqr = $('#pqr');
pqr.find('option').remove();
pqr.append('<option value=-1>--Select--</option>');
for(var i = 0; i < countryListItem .length; i++) {
var opt = document.createElement('option');
opt.innerHTML = countryListItem [i];
opt.value = countryListItem [i];
pqr.append(opt);
}
使用javascript通过创建选项属性来填充列表。 struts select标签实际上在内部生成这种HTML。