Я пишу JSP, который отображает список клубов в сетке. Сетка показывает название клуба вместе с его широтой, долготой, веб-сайтом и описанием.Объявление переменных в DOJO
Фактические данные для отображения хранятся в переменной (dojo.data.ItemFileWriteStore), называемой clubStore.
При загрузке страницы выполняется вызов сервлета для извлечения данных. Затем функция обработки удаляет все элементы, хранящиеся в хранилище, и добавляет новые элементы, возвращаемые сервлетом.
Код JSP, как показано ниже:
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Clubs</title>
<style type="text/css">
@import "./dojoroot/dojo/resources/dojo.css";
@import "./dojoroot/dijit/themes/tundra/tundra.css";
@import "./dojoroot/dojox/grid/resources/Grid.css";
@import "./dojoroot/dojox/grid/resources/nihiloGrid.css";
</style>
<script type="text/javascript" src="dojoroot/dojo/dojo.js"
djConfig="parseOnLoad: true, isDebug: false">
</script>
<script language="JavaScript" type="text/javascript">
dojo.require("dojo.parser");
dojo.require("dojo.data.ItemFileWriteStore");
var clubData={
items:[{name:'No Clubs', lat:'---', lon:'---', webSite:'---', description:'---'}]
};
var layoutClub=[{field:"name", name:"Name", width:10},
{field:"lat", name:"Lat", width:5},
{field:"lon", name:"Long", width:5},
{field:"webSite", name:"Web Site", width:10},
{field:"description", name:"Description", width:'auto'}];
var clubStore=new dojo.data.ItemFileWriteStore(data:clubData});
</script>
<link rel="stylesheet" href="dojoroot/dijit/themes/claro/claro.css" />
<link rel="stylesheet" href="dojoroot/dojox/widget/Dialog/Dialog.css" />
</head>
<body class="tundra">
<%@include file="header.jsp"%>
<div id="clubGrid"
style="width: 800px;"
autoHeight="true"
data-dojo-type="dojox/grid/DataGrid"
data-dojo-props="store:clubStore,
structure:layoutClub,
query:{},
queryOptions:{'deep':true},
rowsPerPage:40">
</div>
<br>
<script>
var urlString="http://localhost:8080/BasicWeb/ClubsServlet";
dojo.xhrGet({
url: urlString,
handleAs: "text",
load: function(data) {
// remove items...
var allData=clubStore._arrayOfAllItems;
for (i=0; i<allData.length; i++) {
if (allData[i]!=null) {
clubStore.deleteItem(allData[i]);
}
}
var jsonClubArray=JSON.parse(data);
for (var i=0; i<jsonClubArray.clubs.length; i++) {
var club=jsonClubArray.clubs[i];
var newClub={name: club.clubname, lat:club.lat, lon:club.lon, webSite: club.website, description: club.description};
clubStore.newItem(newClub);
}
clubStore.save();
}
});
</script>
</body>
</html>
Сценарий, чтобы обработать ответ сервлета иногда не потому, что clubStore не определено (отладки с помощью Firebug). Это похоже на ложную ошибку, поскольку иногда все работает отлично.
Любая помощь в понимании того, как определить переменную clubStore, будет оценена по достоинству.
Спасибо.
James.
Во-первых, я бы рекомендовал вам не смешивать JSP и JS. Вы можете создать отдельный JS-файл и включить его так же, как и с dojo.js. – Jess
Не могли бы вы прояснить часть «иногда не получается»? какой-либо конкретный браузер? Кроме того, на какой строке происходит сбой?(Я предполагаю, что «var allData = clubStore._arrayOfAllItems;», но просто хотел быть уверенным). Наконец, можете ли вы подтвердить, что «clubStore» определен, если вы разрешаете всем скриптам (и ошибкам) заканчивать и проверять консоль? –
«Иногда не получается» часть была (другой) ошибкой с моей стороны. В более ранней версии кода я скопировал пример из Интернета, где переменная store была объявлена в объекте DOM. Это вызвало ложную ошибку, поскольку сценарий работал до того, как объект DOM завершил загрузку (т. Е. Проблема, предложенная Джессемом ниже). Когда я переместил объявление в скрипт, я ввел синтаксическую ошибку, но предположил, что ошибка все еще была ложной - это было не так. Все исправлено. Спасибо за вашу помощь. – user1936427