Выполнение действия события нажатия кнопки, кнопка помещается внутрь dojox.grid.DataGrid.

У меня есть dojox.grid.DataGrid. В этом набор значений отображается вместе с последними 2 столбцами, заполненными buttons, которые создаются динамически в соответствии с данными, извлекаемыми из базы данных с использованием свойства formatter в gridStruture. Теперь я получаю свою сетку в порядке. Кнопки тоже встают нормально. Что мне нужно сделать сейчас, так это то, что когда я нажимаю определенную кнопку в событии нажатия этой кнопки, я перенаправляю ее на новый URL-адрес с определенным значением (A), которое передается в качестве параметра строки запроса в этом URL-адресе. И я не хочу, чтобы моя страница обновлялась. Это похоже на то, когда нажимается кнопка, она выполняет действие на какой-либо другой странице JSP и отображает сообщение alert("Action is being performed").

Мой код java-скрипта, в котором я закодировал свою сетку данных ::

<script type="text/javascript">
function getInfoFromServer(){
        $.get("http://localhost:8080/2Email2012/jsp/GetJson.jsp?random=" + new Date().getTime(), function (result) {
        success:postToPage(result),
        alert('Load was performed.');
            },"json");
    }


    function postToPage(data){
    alert(data);    
    var storedata = {
        identifier:"ActID",
        items: data
        };
    alert(storedata);

    var store1 = new dojo.data.ItemFileWriteStore({data: storedata}) ;
    var gridStructure =[[

                          { field: "ActID",
                                name: "Activity ID",

                                classes:"firstName"
                          },
                          {
                              field: "Assigned To",
                              name: "Assigned To",

                              classes: "firstName"
                          },
                          { field: "Activity Type",
                                name: "Activity Type",

                                classes:"firstName"
                          },
                          {
                              field: "Status",
                              name: "Status",

                              classes: "firstName"
                          },
                          {
                              field: "Assigned Date",
                              name: "Assigned Date",

                              classes: "firstName"
                          },
                          {
                              field: "Assigned Time",
                              name: "Assigned Time",

                              classes: "firstName"
                          },
                          {
                              field: "Email",
                              name: "Send Mail",
                              formatter: sendmail,
                              classes: "firstName"

                          },
                          {
                              field: "ActID",
                              name: "Delete",
                              formatter: deleteact,
                                classes: "firstName"
                          }

                    ]
              ];
    //var grid = dijit.byId("gridDiv");
    //grid.setStore(store1);

    var grid = new dojox.grid.DataGrid({

        store: store1,
        structure: gridStructure,
        rowSelector: '30px',
        selectionMode: "single",
        autoHeight:true,
        columnReordering:true

        },'gridDiv');

    grid.startup();
    dojo.connect(grid, "onRowClick", grid, function(){
                var items = grid.selection.getSelected();
                dojo.forEach(items, function(item){
                    var v = grid.store.getValue(item, "ActID");
                    getdetailsfordialog(v);

                    function showDialog() {
                        dojo.require('dijit.Tooltip');
                        dijit.byId("terms").show();
                    }

                    showDialog();
                    }, grid);

            });
}

function sendmail(item) {
    alert(item);
      return "<button onclick=http://localhost:8080/2Email2012/jsp/SendMailReminder.jsp?Send Mail="+item+"'\">Send Mail</button>";

    }
function deleteact(item) {
    alert(item);
      return "<button onclick=http://localhost:8080/2Email2012/jsp/DeleteActivity.jsp?Activity ID="+item+"'\">Delete</button>";
    }
</script>

Я получаю данные сетки, используя вызов $.get. В приведенном выше коде поля Email и ActID на самом деле являются кнопками, которые создаются каждый раз, когда функции sendmail и deleteact вызываются в formatter. Отображается сетка. Также значение alert(item) в обеих функциях подходит правильно, то есть есть соответствующие значения. Например, для alert(item) в Delete я получаю ActID и alert(item) в sendmail получаю "[email protected]" Теперь я хочу, чтобы на определенной button click(кнопка в столбце Sendmail) моей страницы

http://localhost:8080/2_8_2012/jsp/SendMailReminder.jsp?Send Mail="+item+"'

и button click в столбце Delete на этой странице

http://localhost:8080/2_8_2012/jsp/DeleteActivity.jsp?Activity ID="+item+"'\"

открывается со значением элементов, извлекаемых из базы данных. Я также применил событие rowClick, которое также вызывает проблему, поскольку, когда я нажимаю кнопку u, мое событие Rowclick срабатывает вместо события нажатия кнопки. Как это сделать. Я подумал о применении события click к каждой кнопке в сетке. Но там ID я не знаю. Пожалуйста, помогите мне в этом. Спасибо..


person Shantanu Tomar    schedule 21.04.2012    source источник
comment
Что вы имеете в виду под performs action on some other JSP page? Вы хотите открыть этот другой JSP во всплывающем окне или отправить запрос ajax для выполнения какого-либо действия на стороне сервера или что-то еще?   -  person ivalkeen    schedule 22.04.2012
comment
На этом JSP SendMailReminder.jsp. У меня есть объект класса Отправить почту. Этот объект вызывает определенную функцию класса, которая отправляет почту на значение, полученное из элемента в строке запроса. Поэтому в основном мне нужно передать это значение элемента в качестве параметра вызываемой функции в моем SendMailReminder.jsp. Или то, что я могу сделать, это вызвать этот метод только на этой же странице, не перенаправляя его на SendMailReminder.jsp. Если второй возможен, пожалуйста, предложите мне способ сделать это? Спасибо   -  person Shantanu Tomar    schedule 23.04.2012
comment
И сэр, я продолжаю получать сообщение об ошибке. Пытался зарегистрировать идентификатор = что-то, но этот идентификатор уже зарегистрирован. Я знаю, что это довольно распространенная ошибка, и она как-то связана с удалением идентификатора из реестра додзё или чего-то в этом роде. Но я не понимаю ясно, что это такое. И как это побороть. Спасибо .. И я не получаю эту ошибку на моей текущей странице (вопрос задается). Но продолжает получать его на некоторых других страницах.   -  person Shantanu Tomar    schedule 23.04.2012


Ответы (1)


Я думаю, что вам нужно настроить код на стороне сервера для обработки почтовых запросов ajax для отправки почты и использовать метод dojo.xhrPost, когда пользователь нажимает кнопку. Ваш JS-код может выглядеть так:

  function sendMailHandler(evt, item) {
    dojo.xhrPost({
      url: "/2dojo.xhrGet2012/jsp/SendMailReminder.jsp",
      content: {
        'SendMail': item
      },
      error: function() {
        alert("Sent failure");
      },
      load: function(result) {
        alert("Email sent with result: " + result);
      }
    });

    dojo.stopEvent(evt);
  }

  function sendmail(item) {
    return "<button onclick='sendMailHandler(arguments[0], \"" + item +  "\")'>Send Mail</button>";
  }

Обратите внимание, что dojo.stopEvent(evt); в sendMailHandler используется для остановки всплытия событий и предотвращения возникновения RowClick.

Существует также dojo.xhrGet с аналогичным синтаксисом для выполнения запросов ajax GET, которые вы можете использовать вместо $.get jQuery. Вы также можете использовать dojo.xhrGet вместо dojo.xhrPost в моем примере, потому что есть шанс, что он будет работать с вашим сервером без настройки, но POST (или отправка формы ajax) будет более семантически правильным.

А по поводу "Пытался зарегистрировать id="что-то", вы должны изменить свой код, чтобы избежать дублирования идентификаторов, или показать свой код, вызывающий ошибки.

person ivalkeen    schedule 23.04.2012
comment
Это сработало нормально, с первой попытки.. :) Большое спасибо, сэр.. Можете ли вы помочь мне с этой ссылкой, новичок в додзё. Получение проб.. Еще раз спасибо... stackoverflow.com/questions/10280815/refreshing-dojogrid - person Shantanu Tomar; 23.04.2012