Как разместить список сложных объектов в Struts2 - PullRequest
0 голосов
/ 18 апреля 2011

Я хочу отправить список объектов 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; 
}
}

У меня вопрос почему действие не может получить данные? Iзахватить данные из firebug и данные были опубликованы.Так какой-нибудь намек или что-то не так?Я был смущен здесь два дня, пожалуйста, помогите.

Ответы [ 3 ]

1 голос
/ 18 апреля 2011

Если вы используете jQuery 1.4, вы должны учитывать, что в сериализации параметров есть изменения.JQuery предоставляет новый флаг в $ .ajax, чтобы переопределить поведение по умолчанию (и вернуться к использованию старого способа сериализации параметров): «традиционный» параметр в $ .ajax. Поэтому вы должны попробовать это для отправки данных через Ajax в JQuery:

....
$.ajax({
    url:"save.action",
    data:param,
    type:'post',
    traditional: true,
....
0 голосов
/ 19 апреля 2011

Можете ли вы опубликовать оставшуюся часть вашего jsp, действия и именно то, что вы публикуете обратно в свои действия. Не видя остального, я бы догадался, что вы не корректно обрабатываете обновление списка на месте. Если бы вы использовали «традиционный» HTML, я бы ожидал увидеть ссылку на индекс списка пользователей как в HTML, так и в возвращаемых данных, чтобы Struts знал, какие элементы списка нужно обновить / создать.

С уважением

0 голосов
/ 19 апреля 2011

Если Firebug указывает, что данные успешно публикуются, то я бы порекомендовал вам выполнить некоторую отладку на стороне Java, чтобы подтвердить это.

Попробуйте установить точку останова и просмотреть фактический HttpServletRequestпараметры, которые входят, чтобы убедиться, что они установлены правильно.Если это так, убедитесь, что ваш setUsers(List<User> user) метод вызывается.Это должно указывать, где именно происходит сбой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...