Как загрузить результат json в сетку после отправки формы struts2
У меня есть сетка, которая отображает данные о загрузке страницы, а также форма, которая при отправке получает переменные из DatePicker и, наконец, вызывает действие. Я хочу, чтобы новый результат json загружался по сетке выше, но вместо этого я получаю элементы объекта json на пустой странице ({"JSON":"SUCCESS","endDate":"28/03/2012","listOfLogs":[{"date":"27-03-2012"... и т. д.)
Это мой код:
<s:url id="getCurrentDateLogs" action="getCurrentDateLogs"/>
<sjg:grid
id="getLogs"
dataType="json"
href="%{getCurrentDateLogs}"
gridModel="listOfLogs"
onSelectRowTopics="rowselect"
loadonce="true"
>
<sjg:gridColumn name="userid" index="userid" title="User ID" sortable="true" align="center"/>
<sjg:gridColumn name="username" index="username" title="Username" sortable="true"/>
<sjg:gridColumn name="logaction" index="logaction" width="600" title="Action" sortable="true"/>
<sjg:gridColumn name="date" index="date" title="Date" sortable="true" sorttype="date" align="center"/>
<sjg:gridColumn name="time" index="time" title="Time" sortable="true" sorttype="time" align="center"/>
</sjg:grid>
<s:form action="getLogsByDates" id="form2" theme="simple" cssClass="yform">
<table class="">
<tr><td>from:</td>
<td><sj:datepicker value="yesterday" id="from" name="startDate" displayFormat="dd/mm/yy" label="from" /></td>
</tr>
<tr><td>to:</td>
<td><sj:datepicker value="today" id="to" name="endDate" displayFormat="dd/mm/yy" label="to" /></td>
</tr>
<tr><td colspan="2">
<sj:submit
value="Search"
button="true"
indicator="indicator"
/>
</td></tr>
</table>
</s:form>
я использую следующие библиотеки: struts2 2.3.1.2 struts2-jquery 3.3.0 struts2-jquery-grid-plugin 3.3.0
Какие-либо предложения? Спасибо!
2 ответа
По крайней мере, ваш sj:submit должен установить атрибут target ="getLogs". Вы также можете пропустить другие вещи, хотя.
Во-первых, вы должны указать идентификатор формы и тему, которая перезагружает значения сетки, в теге sjg:grid. Если вы сделаете это, он отправит значения внутри формы и перезагрузит сетку. Что означает, что ваш метод execute() для действия getCurrentDateLogs должен возвращать JSON. Или вы можете просто переместить метод execute() для действия getLogsByDates в другой метод getCurrentDateLogs.
Так и должно быть:
public class GetCurrentDateLogs extends ActionSupport
{
public execute()
{
return INPUT;
}
public String getLogsByDates()
{
//Your code, sets listOfLogs, page, total etc...
return JSON;
}
}
И в вашем JSP:
<s:url id="getCurrentDateLogs" action=GetCurrentDateLogs" method="getLogsByDates"/>
<sjg:grid
id="getLogs"
formIds="form2"
reloadTopics="reloadMyGrid"
И вы должны изменить <sj:submit>
в <sj:a>
и установите для атрибута кнопки значение true. Это может работать с <sj:submit>
тег, но я никогда не пробовал.
Наконец, кнопка должна быть изменена на:
<sj:a button="true" buttonIcon="yourIcon" onClickTopics="reloadMyGrid">Search</sj:a>
Надеюсь это поможет.