问题
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 ...]
回答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.
来源:https://stackoverflow.com/questions/38320028/exception-parameters-grid-in-template-template-jquery-gridcolumn-ftl