У меня есть jgrid struts2, и я хочу иметь возможность обновлять информацию с помощью кнопки отправки формы. Я пытался следовать этому (сообщение SO) [динамическая перезагрузка данных в сетку jquery struts2 при отправке формы], но немного смущен тем, почему мой процесс не работает должным образом. Действие updateRPJson возвращает тип json в качестве ответа, а модель сетки имеет все геттеры/сеттеры и атрибуты, необходимые для работы.
При первой загрузке веб-страницы, содержащей эту сетку, вызывается метод действия, и информация извлекается правильно. Я ожидаю, что кнопка «Обновить», присутствующая внутри формы, отправит информацию из формы в класс действий, а затем повторно заполнит сетку полученным ответом. Я думал, что кнопка обновления опубликует тему «reloadMyGrid», которая затем заставит сетку перезагрузиться, что приведет к вызову действия из href сетки. Я добавил операторы console.info, чтобы определить, что вызывалось, а что нет, а также добавил точки останова внутри моего класса действий, чтобы увидеть, когда он вызывается.
Я обнаружил, что при нажатии кнопки обновления консоль получает «Test2», указывающий, что reloadMyGrid «опубликован» (я не думаю, что это правильный термин), однако мой класс действий никогда не вызывается. Отсутствие «Тест» в консоли говорит о том, что сама форма также не отправляется.
Если бы я заменил кнопку формы обратно на <sj:submit/> и изменил формы onSubmit на action=updateRPJson, страница отображала бы правильную информацию как чистый json (а не внутри сетки). Это наводит меня на мысль, что если действие будет вызвано после нажатия кнопки, это сработает, а не в самом действии.
Я понимаю, что это многословный, несколько конкретный вопрос, но любое понимание того, как процесс обновления jqgrid struts с помощью кнопки отправки формы будет оценен, поскольку я не полностью понимаю пост, на который я ссылался выше, я предполагаю.
Теги:
<%@ page contentType = "text/html; charset=UTF-8"%>
<%@ taglib prefix = "s" uri = "/struts-tags"%>
<%@ taglib prefix = "sj" uri = "/struts-jquery-tags"%>
<%@ taglib prefix = "sjg" uri = "/struts-jquery-grid-tags" %>
Форма:
<s:form id = "getRPInstance" name = "getRPInstance" onSubmit = "return reloadGrid();" >
<div class = "type-text" align = "center" style = "width:50%;text-align:right;float:left">
<s:select
name = "location"
id = "location"
list = "#{'unit':'Unit', 'acceptance':'Acceptance', 'integration':'Integration','production':'Production'}"
value = "%{#session.location}"
required = "true"/>
<s:select
name = "realm"
id = "realm"
list = "#{'int':'Internal', 'ext':'External', 'cld':'Cloud' }"
value = "%{#session.realm}"
required = "true"/>
<div id = "buttonDiv" class = "type-button" align = "center">
<sj:a button = "true" onClickTopics = "reloadMyGrid">Refresh</sj:a>
</div>
</div>
</s:form>
Скрипты:
<script>
$.subscribe('reloadMyGrid',function()
{
console.info("Test2");
$( '#gridError' ).html( "" );
});
function reloadGrid() {
console.info("Test");
$('#gridtable').trigger('reloadMyGrid');
return false;
}
</script>
Сетка:
<s:url var = "remoteurl" action = "updateRPJson"/>
<sjg:grid
id = "gridtable"
caption = "Reverse Proxy"
dataType = "json"
href = "%{remoteurl}"
pager = "true"
gridModel = "proxies"
rowList = "10,15,20,50"
rowNum = "20"
rownumbers = "true"
reloadTopics = "reloadMyGrid"
formIds = "getRPInstance"
height = "600"
width = "650"
loadonce = "true"
>
<sjg:gridColumn name = "name" index = "name" title = "Name" key = "true" hidden = "true" sortable = "false"/>
<sjg:gridColumn name = "label" index = "label" title = "Label" sortable = "true"/>
</sjg:grid>




Я понял, проблема кроется в самой сетке распорок. Это было исправлено установкой для loadonce значения false.