2012-04-21 5 views
0

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

Моего Java код сценарий, где я закодирован для моей сетки данных ::

<script type="text/javascript"> 
function getInfoFromServer(){ 
     $.get("http://localhost:8080/2_8_2012/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/2_8_2012/jsp/SendMailReminder.jsp?Send Mail="+item+"'\">Send Mail</button>"; 

    } 
function deleteact(item) { 
    alert(item); 
     return "<button onclick=http://localhost:8080/2_8_2012/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 я не знаю. Пожалуйста, помогите мне в этом. Спасибо ..

+0

Что вы имеете в виду' выполняет действие на другой странице JSP '? Вы хотите открыть этот другой JSP в всплывающем окне или отправить запрос ajax для выполнения какого-либо действия на стороне сервера или что-то еще? – ivalkeen

+0

На этом JSP SendMailReminder.jsp. У меня есть объект класса Отправить почту.Этот объект вызывает определенную функцию класса, которая отправляет почту на значение, полученное из элемента строки запроса. Поэтому в основном мне нужно передать это значение элемента в качестве параметра вызываемой функции в моем SendMailReminder.jsp. Или что я могу сделать, это вызвать этот метод на этой же странице, не перенаправляя его на SendMailReminder.jsp. Если возможно второе, пожалуйста, предложите мне способ сделать это? Спасибо –

+0

И сэр я продолжаю получать ошибку «Пробовал зарегистрировать id =« что-то », но этот идентификатор уже зарегистрирован». Я знаю, что это довольно распространенная ошибка, и что-то делать с удалением идентификатора из домена dojo или чего-то еще. Но я не понимаю, что это такое. И как преодолеть это. Спасибо .. И я не получаю эту ошибку на моей текущей странице (Ques спрашивается). Но продолжает получать его на некоторых других страницах. –

ответ

1

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

function sendMailHandler(evt, item) { 
    dojo.xhrPost({ 
     url: "/2_8_2012/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-запросов, которые вы можете использовать вместо jQuery's $.get. Вы также можете использовать dojo.xhrGet вместо dojo.xhrPost в моем примере, потому что есть вероятность, что он будет работать с вашим back-end без настройки, но POST (или представление формы ajax) будет более семантически корректным.

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

+0

Это сработало отлично, с первой попытки .. :) Большое спасибо, сэр .. Может, помогите мне и с этой ссылкой, новичок в додзё Получение проблем .. Еще раз спасибо ... http://stackoverflow.com/questions/ 10280815/освежающее-dojogrid –