Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java EE (J2EE) и Spring > Javascript и обьекты Java


Автор: oson 18.8.2008, 00:30
Пытаюсь прикрутить Ajax к Struts.
Использую DWR.
Вызов метода через DWR в самом ActionForm проходит нормально.
Но вот вырисовать результат без перезагрузки никак не получается.
В документации DWR нет такой возможности чтоб просто обозначить часть страницы каким-то <div id="smth"... и асинхронно перезагрузить ее. Или есть?
Предлагается примерно такой вариант
Код



public class Person
{
    private int id;
    private String name;
    private String address;
    private float salary;

    // Getters, setters, equals and toString omitted
}

 public class People {
    // Java класс возвращает Set объектов
    public Set getAllPeople() {
        return people;
    }
//где каждый обьект в Set people является обьектом класса Person

 //Javascript их читает
function fillTable() {
  People.getAllPeople(function(people) {
  var person, id;
  for (var i = 0; i < people.length; i++) {
      person = people[i];
      id = person.id;
      //и достает поля этого Java обьекта прямо в Javascripte через вызовы типа person.name
      dwr.util.setValue("tableName" + id, person.name);
      dwr.util.setValue("tableSalary" + id, person.salary);
      dwr.util.setValue("tableAddress" + id, person.address);
}
  });



Когда я пытаюсь делать похожее - то Javascript говорит 'people has no properties'
То есть этот Javascript обьект не имеет никаких полей name, salary и тд и то есть совсем не объект?
В чем же тут проблема?

Автор: check 18.8.2008, 13:03
У меня в свое время тоже не получилось обратиться через DWR к полям бина как к свойствам JavaScript объекта,  хотя в документации и заявлена такая возможность.  Пришлось ограничиться передачей примитивов.

 А класс, в котором находится метод getAllPeople(),  это не struts-экшен, конечно?

Автор: oson 18.8.2008, 16:18
getAllPeople() он вызывает из ActionForm

Интересно, а есть возможность просто проапдейтить часть страницы?
То есть через DWR вызвать метод например delete(Person p)
а потом на странице например сделать так

Код

<div id="idForUpdate">
 <logic:iterate myForm.people>
  //показать лист этих person
</logic:iterate>
</id>

и как то проапдейтить асинхронно только вот эту часть заключенную в div?

Автор: check 18.8.2008, 18:06
"Асинхронно проапдейтить" значит выполнить действие на сервере, а на клиенте обновить эту часть страницы средствами JavaScript.
А это 
Код

 <logic:iterate myForm.people>
  //показать лист этих person
</logic:iterate>
делается на сервере и требует перезагрузки страницы.


Чтобы средствами JS найти строку которую ты удаляешь на сервере и что-то с ней сделать у неё на клиенте должен быть идентификатор.
Что-то такое:   <tr id="ID_записи_в_БД">.....</tr>


Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)