У меня есть Struts2 JGrid, который я хотел бы иметь возможность обновить информацию с помощью кнопки отправки формы. Я пытался следить за этим (SO post) [ динамическая перезагрузка данных в сетку jquery Struts2 при отправке формы ], но меня немного смущает, почему мой процесс работает не так, как ожидалось. Действие updateRPJson возвращает тип json в качестве ответа, а у gridmodel есть все методы получения / установки и атрибуты, необходимые для работы.
При первой загрузке веб-страницы, содержащей эту сетку, вызывается метод действия и информация корректно извлекается. Я ожидаю, что кнопка «Обновить», присутствующая внутри формы, отправит информацию из формы в класс действий, а затем снова заполнит сетку полученным ответом. Я думал, что кнопка «Обновить» опубликует тему «reloadMyGrid», которая затем заставит сетку перезагружаться, вызывая действие, которое вызывается из части сетки. Я добавил операторы console.log, чтобы определить, что вызывалось, а что нет, а также добавил точки останова внутри моего класса действий, чтобы увидеть, когда он вызывается.
Я обнаружил, что после нажатия кнопки обновления консоль получает «Test2», указывающий, что reloadMyGrid «опубликован» (я не думаю, что это правильный термин), однако мой класс действий никогда не вызывается. Отсутствие «Test» в консоли указывает на то, что сама форма также не отправляется.
Если бы я изменил кнопку формы обратно на <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.log("Test2");
$( '#gridError' ).html( "" );
});
function reloadGrid() {
console.log("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>