Как разместить список сложных объектов в Struts2
Я хочу отправить список объектов User в действие, пока у пользователя есть имя и адрес поля.
Пример кода такой: Веб-страница динамически управляется с помощью jquery. есть пример кода веб-страницы.
<form id="create">
<tr id="1"> <td> <input type='text' name='name'/></td><td><input type='text' name='address'/></td></tr>
<tr id="3"> <td> <input type='text' name='name'/></td><td><input type='text' name='address'/></td></tr>
</form>
<input type='submit' onclick="submit()"/>
<script>
function submit() {
var results = [];
$("#create tr").each(function(index, tr) {
var user = {
name: tr.find('input[name="name"]').val(),
address: tr.find('input[name="address"]').val()
}
results.push(user);
});
var param = {users:results};
$.ajax({
url: "save.action",
data: param,
type: 'post',
success: function() {
alert('success');
},
error: function() {
alert('error');
}
});
}
</script>
Код действия вроде этого:
@ParentPackage('json-default')
public class UserAction extends ActionSupport {
private List<User> users;
public List<User> getUsers(){
return users;
}
public void setUsers(List<User> users){
this.users = users;
}
@Action(name="save", results={@Result{name="success",location="/webpage/addUser.jsp"}})
public String execute(){
for(User user: Users){
System.out.println(user.getName()+" address: "+ user.getAddress());
}
return SUCCESS;
}
}
У меня вопрос, почему акция не может получить данные? Я собираю данные из firebug и данные были опубликованы. Так какой-нибудь намек или что-то не так? Я был смущен здесь два дня, пожалуйста, помогите.
3 ответа
Если вы используете jQuery 1.4, вы должны учитывать, что в сериализации параметров есть изменения. JQuery предоставляет новый флаг в $.ajax, чтобы переопределить поведение по умолчанию (и вернуться к использованию старого способа сериализации параметров): "традиционный" параметр в $.ajax. Поэтому вы должны попробовать это для отправки данных через Ajax в JQuery:
....
$.ajax({
url:"save.action",
data:param,
type:'post',
traditional: true,
....
Если Firebug указывает, что данные успешно публикуются, то я бы порекомендовал вам выполнить отладку на стороне Java, чтобы подтвердить это.
Попробуйте установить точку останова и просмотреть фактическую HttpServletRequest
параметры, которые входят, чтобы убедиться, что они установлены правильно. Если они есть, то убедитесь, что ваш setUsers(List<User> user)
метод вызывается. Это должно указывать, где именно происходит сбой.
Можете ли вы опубликовать оставшуюся часть вашего JSP, действия и именно то, что вы публикуете обратно в свои действия. Не видя остального, я бы догадался, что вы не корректно обрабатываете обновление списка на месте. Если бы вы использовали "традиционный" HTML, я бы ожидал увидеть ссылку на индекс списка пользователей как в HTML, так и в возвращаемых данных, чтобы Struts знал, какие элементы списка нужно обновить / создать.
С уважением