Как загрузить результат 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>

Надеюсь это поможет.

Другие вопросы по тегам