2

I am trying to make a grid by using Struts 2 jquery grid plugin along with struts jquery plugin and struts json plugin. I am beginner to this.

Here is my JSP code:

<s:form action="misinfo">
        <s:textfield name="sdate" label="START DATE"></s:textfield>
        <s:textfield name="edate" label="END DATE"></s:textfield>
        <s:submit value="submit"></s:submit>
        </s:form>
        <s:url var="remoteurl" action="jsontable" />
        <sjg:grid id="gridTable" caption="login ID" dataType="json"
            href="%{remoteurl}" pager="true" gridModel="gridModel"
            rowList="10,15,20" rowNum="15" rownumbers="true" />
        <sjg:gridColumn name="login ID"/>
        <sjg:gridColumn name="select" />

struts.xml

<package name="mypackage" namespace="/" extends="struts-default, json-default">
     <result-types>
            <result-type name="json" class="org.apache.struts2.json.JSONResult" default="true"/>
            <result-type name="dispatcher" class="org.apache.struts2.dispatcher.ServletDispatcherResult" default="true"/>
        </result-types>
<action name="mis" class="com.action.JsonAction">
        <result name="success">/WEB-INF/jsp/mis.jsp</result>
        <result name="input">/WEB-INF/jsp/mis.jsp</result>
        </action>
        <action name="jsontable" class="com.action.JsonAction">
        <result name="success">/WEB-INF/jsp/mis.jsp</result>
        </action>
</package>

Action class

public class JsonAction extends ActionSupport {
    private String gridModel;
    private int rows = 0;
    private int page = 0;
    private String sortAsc;
    private String sortIndex;
    private String searchField;
    private String searchOprtn;
    private int total = 0;
    private int records = 0;

    @Override
    public String execute() throws Exception {

        int to = (rows * page);
        int from = to - rows;
        JsonActionDao jsn = new JsonActionDaoImpl();
        records = jsn.getNoOfRecords();
        gridModel = jsn.getRecords();
        total = (int) Math.ceil((double) records / (double) rows);
        System.out.println("row "+rows+"page "+page+"gridModel "+gridModel);
        return "success";
      // getter and setter for fields.,,,....
    }
}

Exception that I am getting

The following has evaluated to null or missing:
==> parameters.grid  [in template "template/jquery/gridcolumn.ftl" at line 22, column 29]

----
Tip: It's the step after the last dot that caused this error, not those before it.
----
Tip: If the failing expression is known to be legally refer to something that's null or missing, either specify a default value like myOptionalVar!myDefault, or use <#if myOptionalVar??>when-present<#else>when-missing</#if>. (These only cover the last step of the expression; to cover the whole expression, use parenthesis: (myOptionalVar.foo)!myDefault, (myOptionalVar.foo)??
----

----
FTL stack trace ("~" means nesting-related):
    - Failed at: ${parameters.grid?string?replace(".",...  [in template "template/jquery/gridcolumn.ftl" at line 22, column 27]
    - Reached through: #assign escapedOptionId = "\${paramet...  [in template "template/jquery/gridcolumn.ftl" at line 22, column 1]
----

Java stack trace (for programmers):
----
freemarker.core.InvalidReferenceException: [... Exception message was already printed; see it above ...]
Roman C
  • 49,761
  • 33
  • 66
  • 176
Mayank Vaid
  • 330
  • 1
  • 7
  • 18

1 Answers1

1

The grid tag shouldn't be self-closed, it should have a body where you put gridCoumn tags.

The name of the column should be a property of the gridModel, and as a bean's property must be an identifier, i.e. without spaces.

Grid model should be a list of objects that a reserialized to JSON via invoking an action that you use in href attribute.

<sjg:grid id="gridTable" caption="login ID" dataType="json"
    href="%{remoteurl}" pager="true" gridModel="gridModel"
    rowList="10,15,20" rowNum="15" rownumbers="true">
      <sjg:gridColumn name="loginID"/>
      <sjg:gridColumn name="select" />
</sjg:grid>

You can find an example of the grid using the project wiki page for Grid Tag.

Roman C
  • 49,761
  • 33
  • 66
  • 176
  • I did all the changes and that error removed as well but grid doesn't get showed up .... As of from my understanding the columns in grid will be populate through the CustomerModel objects in the list ??? – Mayank Vaid Jul 12 '16 at 18:46
  • In the linked example they are list of `Customer`. `@Actions({ @Action(value = "/jsontable", results = { @Result(name = "success", type = "json") }) })` – Roman C Jul 12 '16 at 20:09