1

私はjQueryが初めてで、ネットを十分に調査しましたが、この問題の解決策が見つからないようです。2 つのタブがあり、それぞれが異なる JSP からロードされます。メイン JSP (デフォルトのもの) には、すべてのスクリプト ファイルが含まれています。しかし、JSP2 から jQuery 関数を呼び出すと、それらはトリガーされません。私の理解では、JSP2 にはこれらの関数が表示されません。必要な jQuery 関数を jsp2 にコピー ペーストすると、すべてが期待どおりに機能します。しかし、スクリプト ファイルを 2 つの場所に配置する必要がある理由がわかりません。各 JSP は、個別に実行すると期待どおりに動作します。

メイン JSP のコードの一部を次に示します。

<div id="tabs">
<ul>
<li><a href="#tabs-1">Tab one</a></li>
<li><a href="config.jsp" title="test">Tab two</a></li>
</ul>

<div id="tabs-1">
blah blah </div>
</div>

JQuery:

$(document).ready(function() {

$('#tabs').tabs();
}

function updateGrid(){
url = "www.google.com";
jQuery("#logGrid").clearGridData();
cache : false,
$.post(url,
function(data) {
    if (data != null) {
         var mygrid = jQuery("#logGrid")[0];
         for (var i = 0; i < data.length; i++) {
             jQuery("#logGrid").addRowData(i, data[i]);
         }
  }
});
  }

  jQuery("#logGrid").jqGrid(
       {
          url : '',
          mtype : 'POST',
          datatype : "json",
          rownumbers : true,
          colNames: ["Logger Name","Logger Parent ", "Current Log Level", "Update Log Level To"],
          colModel: [
                       { name: 'loggerName', index: "loggerName", width: 215, editable: true},
                       { name: "loggerParent", index: "loggerParent", width: 100, editable: true },
                       { name: "loggerEffectiveLevel", index: "loggerEffectiveLevel", width: 100, editable: true},
                       { name: "changedLogLevel", index: "changedLogLevel", width: 35, editable: true, edittype:"select", editoptions:{value:"DEBUG:DEBUG;INFO:INFO;WARN:WARN;ERROR:ERROR;FATAL:FATAL"} }
                       ],
          autowidth: true,
          rownumWidth: 40,
          height : $(window).innerHeight(),
          viewrecords: true,
          caption:"Log4j Configuration Log Level",
          cellEdit: true,
          cellsubmit: 'clientArray',
          afterSaveCell: function (rowid, cellname, value) {

                    var targetLogLevel = jQuery('#logGrid').getCell(rowid, "changedLogLevel");
                    var targetLogger = jQuery('#logGrid').getCell(rowid, "loggerName");
                    updateLog(targetLogger, targetLogLevel);

  }

});

そしてJSP2は

<script type="text/javascript">
  updateGrid();
</script>
<div id="test">
<form id="logGridForm">
    <table id="logGrid"></table>
</form>
 </div>

スクリプト関数を各jspにコピーしたくありません..冗長になり、乱雑に見えます。それを回避する方法はありますか。ここで何か間違ったことをしていますか?

データの入力に使用される jqGrid を含めるように質問を編集しました。これは、次の例外で失敗します: Message: 'this.p.rownumbers' is null or not an object URI: localhost:7001/imgRepository/js/jquery.jqGrid.min.js

メソッドをローカルで JSP2 にコピーすると、すべて正常に動作します。

4

1 に答える 1

0

置く

 <script type="text/javascript">
  updateGrid();
</script>

in your first jsp, as jsp compiles at runtime. your second jsp can call that script from first page also.
于 2013-03-13T16:03:53.673 に答える