使用表单提交重新加载 struts jqGrid
Reloading a struts jqGrid with a form submission
我有一个 struts2 jgrid,我希望能够使用表单提交按钮刷新信息。我一直在尝试遵循这个 (SO post) [dynamic data reload to struts2 jquery grid on form submit ] 但我对为什么我的过程没有按预期工作有点困惑。操作 updateRPJson returns json 类型作为响应,网格模型具有工作所需的所有 getters/setters 和属性。
第一次加载包含此网格的网页时,将调用操作方法并正确检索信息。我期待表单内部的 "Refresh" 按钮将信息从表单发送到操作 class,然后用它收到的响应重新填充网格。我认为刷新按钮会发布 "reloadMyGrid" 主题,然后会强制网格重新加载,导致从网格的 href 调用操作。我添加了 console.log 语句来确定调用的内容和未调用的内容,并在我的操作中添加了断点 class 以查看它何时被调用。
我发现在单击刷新按钮后,控制台收到 "Test2" 指示 reloadMyGrid 是 "published"(我认为这是不正确的术语),但是我的操作 class 永远不会被调用。控制台中缺少 "Test" 表示表单本身也未提交。
如果我将表单按钮改回 <sj:submit/>
并将表单 onSubmit
更改为 action=updateRPJson
,页面显示的正确信息为纯 json (而不是在网格内部)。这使我相信,如果在单击按钮后调用该操作,这是可行的,而不是操作本身的问题。
我意识到这是一个冗长的特定案例问题,但是任何关于如何使用表单提交按钮更新 struts jqgrid 的过程的见解都将不胜感激,因为我不完全理解post 我假设上面链接了。
标签:
<%@ page contentType="text/html; charset=UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<%@ taglib prefix="sj" uri="/struts-jquery-tags"%>
<%@ taglib prefix="sjg" uri="/struts-jquery-grid-tags" %>
表格:
<s:form id="getRPInstance" name="getRPInstance" onSubmit="return reloadGrid();" >
<div class="type-text" align="center" style="width:50%;text-align:right;float:left">
<s:select
name="location"
id="location"
list="#{'unit':'Unit', 'acceptance':'Acceptance', 'integration':'Integration','production':'Production'}"
value="%{#session.location}"
required="true"/>
<s:select
name="realm"
id="realm"
list="#{'int':'Internal', 'ext':'External', 'cld':'Cloud' }"
value = "%{#session.realm}"
required = "true"/>
<div id="buttonDiv" class="type-button" align="center">
<sj:a button="true" onClickTopics="reloadMyGrid">Refresh</sj:a>
</div>
</div>
</s:form>
脚本:
<script>
$.subscribe('reloadMyGrid',function()
{
console.log("Test2");
$( '#gridError' ).html( "" );
});
function reloadGrid() {
console.log("Test");
$('#gridtable').trigger('reloadMyGrid');
return false;
}
</script>
网格:
<s:url var="remoteurl" action="updateRPJson"/>
<sjg:grid
id="gridtable"
caption="Reverse Proxy"
dataType="json"
href="%{remoteurl}"
pager="true"
gridModel="proxies"
rowList="10,15,20,50"
rowNum="20"
rownumbers="true"
reloadTopics="reloadMyGrid"
formIds="getRPInstance"
height="600"
width="650"
loadonce="true"
>
<sjg:gridColumn name="name" index="name" title="Name" key="true" hidden="true" sortable="false"/>
<sjg:gridColumn name="label" index="label" title="Label" sortable="true"/>
</sjg:grid>
我已经弄清楚了,问题出在 struts 网格本身。这是通过将 loadonce 设置为 false 来解决的。
我有一个 struts2 jgrid,我希望能够使用表单提交按钮刷新信息。我一直在尝试遵循这个 (SO post) [dynamic data reload to struts2 jquery grid on form submit ] 但我对为什么我的过程没有按预期工作有点困惑。操作 updateRPJson returns json 类型作为响应,网格模型具有工作所需的所有 getters/setters 和属性。
第一次加载包含此网格的网页时,将调用操作方法并正确检索信息。我期待表单内部的 "Refresh" 按钮将信息从表单发送到操作 class,然后用它收到的响应重新填充网格。我认为刷新按钮会发布 "reloadMyGrid" 主题,然后会强制网格重新加载,导致从网格的 href 调用操作。我添加了 console.log 语句来确定调用的内容和未调用的内容,并在我的操作中添加了断点 class 以查看它何时被调用。
我发现在单击刷新按钮后,控制台收到 "Test2" 指示 reloadMyGrid 是 "published"(我认为这是不正确的术语),但是我的操作 class 永远不会被调用。控制台中缺少 "Test" 表示表单本身也未提交。
如果我将表单按钮改回 <sj:submit/>
并将表单 onSubmit
更改为 action=updateRPJson
,页面显示的正确信息为纯 json (而不是在网格内部)。这使我相信,如果在单击按钮后调用该操作,这是可行的,而不是操作本身的问题。
我意识到这是一个冗长的特定案例问题,但是任何关于如何使用表单提交按钮更新 struts jqgrid 的过程的见解都将不胜感激,因为我不完全理解post 我假设上面链接了。
标签:
<%@ page contentType="text/html; charset=UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<%@ taglib prefix="sj" uri="/struts-jquery-tags"%>
<%@ taglib prefix="sjg" uri="/struts-jquery-grid-tags" %>
表格:
<s:form id="getRPInstance" name="getRPInstance" onSubmit="return reloadGrid();" >
<div class="type-text" align="center" style="width:50%;text-align:right;float:left">
<s:select
name="location"
id="location"
list="#{'unit':'Unit', 'acceptance':'Acceptance', 'integration':'Integration','production':'Production'}"
value="%{#session.location}"
required="true"/>
<s:select
name="realm"
id="realm"
list="#{'int':'Internal', 'ext':'External', 'cld':'Cloud' }"
value = "%{#session.realm}"
required = "true"/>
<div id="buttonDiv" class="type-button" align="center">
<sj:a button="true" onClickTopics="reloadMyGrid">Refresh</sj:a>
</div>
</div>
</s:form>
脚本:
<script>
$.subscribe('reloadMyGrid',function()
{
console.log("Test2");
$( '#gridError' ).html( "" );
});
function reloadGrid() {
console.log("Test");
$('#gridtable').trigger('reloadMyGrid');
return false;
}
</script>
网格:
<s:url var="remoteurl" action="updateRPJson"/>
<sjg:grid
id="gridtable"
caption="Reverse Proxy"
dataType="json"
href="%{remoteurl}"
pager="true"
gridModel="proxies"
rowList="10,15,20,50"
rowNum="20"
rownumbers="true"
reloadTopics="reloadMyGrid"
formIds="getRPInstance"
height="600"
width="650"
loadonce="true"
>
<sjg:gridColumn name="name" index="name" title="Name" key="true" hidden="true" sortable="false"/>
<sjg:gridColumn name="label" index="label" title="Label" sortable="true"/>
</sjg:grid>
我已经弄清楚了,问题出在 struts 网格本身。这是通过将 loadonce 设置为 false 来解决的。