Struts2中的网格使用struts2-jquery-grid插件

时间:2014-02-21 06:43:06

标签: json struts2 struts2-jquery-grid

我正在使用struts2-jquery-grid-3.7.0插件尝试使用Struts jQuery网格,如showcase网格(可编辑/多选)所示。

Struts形式:

<s:form namespace="/admin_side" action="Test" validate="true" id="dataForm" name="dataForm">
    <s:url id="remoteurl" action="TestGrid" namespace="/admin_side"/>
    <s:url id="editurl" action="edit-grid-entry"/>
    <sjg:grid
        id="gridmultitable"
        caption="Example (Editable/Multiselect)"
        dataType="json"
        href="%{remoteurl}"
        pager="true"
        navigator="true"
        navigatorSearchOptions="{sopt:['eq','ne','lt','gt']}"
        navigatorAddOptions="{height:280, width:500, reloadAfterSubmit:true}"
        navigatorEditOptions="{height:280, width:500, reloadAfterSubmit:false}"
        navigatorEdit="true"
        navigatorView="true"
        navigatorViewOptions="{height:280, width:500}"
        navigatorDelete="true"
        navigatorDeleteOptions="{height:280, width:500,reloadAfterSubmit:true}"
        gridModel="gridModel"
        rowList="5,10,15"
        rowNum="5"
        rownumbers="true"
        editurl="%{editurl}"
        editinline="true"
        multiselect="true"
        onSelectRowTopics="rowselect"
        >

        <sjg:gridColumn name="countryId" index="countryId" title="Id" formatter="integer" editable="false" sortable="true" search="true" sorttype="integer" searchoptions="{sopt:['eq','ne','lt','gt']}"/>
        <sjg:gridColumn name="countryName" index="countryName" title="Country Name" editable="true" edittype="text" sortable="true" search="true" sorttype="text"/>
        <sjg:gridColumn name="countryCode" index="countryCode" title="Country Code" sortable="true" search="true" editable="true" sorttype="text"/>

    </sjg:grid>
</s:form>

动作类:

@Namespace("/admin_side")
@ResultPath("/WEB-INF/content")
@ParentPackage(value = "json-default")
@InterceptorRefs(@InterceptorRef(value = "store", params = {"operationMode", "AUTOMATIC"}))
public final class TestAction extends ActionSupport implements Serializable
{
    @Autowired
    private final transient CountryService countryService=null;
    private static final long serialVersionUID = 1L;
    // Result List
    private List<Country> gridModel;
    // Get how many rows we want to have into the grid - rowNum attribute in the grid
    private Integer rows=5;
    // Get the requested page. By default grid sets this to 1.
    private Integer page=1;
    // sorting order - asc or desc
    private String sord;
    // get index row - i.e. user click to sort.
    private String sidx;
    // Search Field
    private String searchField;
    // The Search String
    private String searchString;
    // The Search Operation ['eq','ne','lt','le','gt','ge','bw','bn','in','ni','ew','en','cn','nc']
    private String searchOper;
    // Your Total Pages
    private Integer total;
    // All Records
    private Integer records;

    @Action(value = "TestGrid",
    results = {
        @Result(name = ActionSupport.SUCCESS, type = "json", params = {"includeProperties", "gridModel\\[\\d+\\]\\.countryId, gridModel\\[\\d+\\]\\.countryName, gridModel\\[\\d+\\]\\.countryCode", "excludeNullProperties", "true"})},
    interceptorRefs = {
        @InterceptorRef(value = "json")})
    public String execute() {
        records=countryService.rowCount().intValue();
        total=new BigDecimal(records).divide(new BigDecimal(rows), 0, BigDecimal.ROUND_CEILING).intValue();
        gridModel=countryService.getList(page, rows, null, null);

        System.out.println("records "+records+" total "+total+" Page " + getPage() + " Rows " + getRows() + " Sort Order " + getSord() + " Index Row :" + getSidx()+"Search :" + searchField + " " + searchOper + " " + searchString);
        return SUCCESS;
    }

    public String getJSON() {
        return execute();
    }

    public Integer getRows() {
        return rows;
    }

    public void setRows(Integer rows) {
        this.rows = rows;
    }

    public Integer getPage() {
        return page;
    }

    public void setPage(Integer page) {
        this.page = page;
    }

    public Integer getTotal() {
        return total;
    }

    public void setTotal(Integer total) {
        this.total = total;
    }

    public Integer getRecords() {
        return records;
    }

    public void setRecords(Integer records) {
        this.records = records;            
    }

    public List<Country> getGridModel() {
        return gridModel;
    }

    public void setGridModel(List<Country> gridModel) {
        this.gridModel = gridModel;
    }

    public String getSord() {
        return sord;
    }

    public void setSord(String sord) {
        this.sord = sord;
    }

    public String getSidx() {
        return sidx;
    }

    public void setSidx(String sidx) {
        this.sidx = sidx;
    }

    public void setSearchField(String searchField) {
        this.searchField = searchField;
    }

    public void setSearchString(String searchString) {
        this.searchString = searchString;
    }

    public void setSearchOper(String searchOper) {
        this.searchOper = searchOper;
    }

    @Action(value = "Test",
    results = {
        @Result(name = ActionSupport.SUCCESS, location = "Test.jsp"),
        @Result(name = ActionSupport.INPUT, location = "Test.jsp")},
    interceptorRefs = {
        @InterceptorRef(value = "defaultStack", params = {"validation.validateAnnotatedMethodOnly", "true", "validation.excludeMethods", "load"})})
    public String load() throws Exception {
        return ActionSupport.SUCCESS;
    }
}

下一页和之前的分页链接始终处于停用状态,如following快照所示。

enter image description here

表示第1页,共1页。没有更多的页面。因此,链接被禁用。

但是,在execute()方法中,records已初始化为31total已初始化为7 Page1 Rows5。无论是否单击用于排序,搜索,编辑,添加行的链接/按钮,所有其他属性都始终为空。

我在这里俯瞰什么?

1 个答案:

答案 0 :(得分:1)

您忘记在json结果中包含网格正常运行所必需的字段。改为

@Result(type = "json", params = {"includeProperties", "gridModel\\[\\d+\\]\\.countryId, gridModel\\[\\d+\\]\\.countryName, gridModel\\[\\d+\\]\\.countryCode, total, records, rows, page, sord, sidx, searchField, searchString, searchOper",  "excludeNullProperties", "true"})

此外,json拦截器不是必需的,但需要params

@InterceptorRef("params")