如何在表单提交中使用struts2网格
我已经在Stackoverflow上搜索过了,但运气不好 我想制作一个用户输入数据的过滤表单,根据该数据,我想在Struts2 jQGrid中显示结果 默认情况下,当页面加载时,Struts2 jQGrid已经具有包含所有数据的操作url 我试着设置表单和如何在表单提交中使用struts2网格,struts2,struts2-jquery,struts2-jquery-grid,Struts2,Struts2 Jquery,Struts2 Jquery Grid,我已经在Stackoverflow上搜索过了,但运气不好 我想制作一个用户输入数据的过滤表单,根据该数据,我想在Struts2 jQGrid中显示结果 默认情况下,当页面加载时,Struts2 jQGrid已经具有包含所有数据的操作url 我试着设置表单和的目标,但没有成功 见代码: 这是我的网格: <sjg:grid gridModel="items" href="%{itemsUrl}"
的目标,但没有成功
见代码:
这是我的网格:
<sjg:grid gridModel="items"
href="%{itemsUrl}"
caption="Items"
id="filterGrid"
dataType="json"
rownumbers="true"
pager="true"
navigator="false"
rowList="10, 15, 20"
rowNum="10"
viewrecords="true"
loadonce="true"
formIds="filterForm"
>
<sjg:gridColumn name="item.itemname" title="Item Name"></sjg:gridColumn>
<sjg:gridColumn name="shelves.shelfname" title="Shelf Name"></sjg:gridColumn>
<sjg:gridColumn name="quantity" title="Available Qauntity"></sjg:gridColumn>
<sjg:gridColumn name="item.itemprice" title="Item Price"></sjg:gridColumn>
</sjg:grid>
实际上,我在另一个stackoverflow问题()中看到过这种风格,我不知道在上面的函数中写什么
多谢各位
编辑#1
我已将代码修改为:
<sj:a targets="filterGrid"
button="true"
key="global.item.list.form.submit"
formIds="filterForm"
onSuccessTopics="reloadGrid" />
<sjg:grid gridModel="items"
href="%{itemsUrl}"
caption="Items"
id="filterGrid"
dataType="json"
rownumbers="true"
pager="true"
navigator="false"
rowList="10, 15, 20"
rowNum="10"
viewrecords="true">
现在有什么问题我不明白。。。
Plz为我提供解决方案..Plz您必须使用过滤器来过滤列,并且根据过滤器,网格将填充数据 试试这样的方法
<sjg:grid gridModel="items"
href="%{itemsUrl}"
caption="Items"
id="filterGrid"
dataType="json"
rownumbers="true"
pager="true"
navigator="false"
rowList="10, 15, 20"
rowNum="10"
viewrecords="true"
loadonce="true"
formIds="filterForm"
filter="true"
filterOptions="{stringResult :true,
searchOnEnter : true,
enableClear : true}"
>
<sjg:gridColumn name="item.itemname" title="Item Name"></sjg:gridColumn>
<sjg:gridColumn name="shelves.shelfname" title="Shelf Name"></sjg:gridColumn>
<sjg:gridColumn name="quantity" title="Available Qauntity"></sjg:gridColumn>
<sjg:gridColumn name="item.itemprice" title="Item Price"></sjg:gridColumn>
</sjg:grid>
然后在每个列上应用过滤器,这将非常方便地过滤网格您在Struts2 jQuery插件展示中看到网格部分了吗?谢谢Andrea先生,我从中得到了很多帮助。但还是有问题。我将代码修改为:表单被提交,json数据也被接收,但网格没有显示任何内容,即使通过重新加载您在哪里定义
%{itemsUrl}
和%{filterUrl}
?张贴两个
(如果存在)。如果他们没有,那么我们已经解决了(其中一个)问题。不,我定义了他们:就在表格上方,就在表格上方,这没有问题,正如我告诉action Successful get Execution,在action中,我暂时使用SOP打印项目列表,列表成功显示列表中的2个项目。。。当返回到jsp页面时,网格没有显示任何内容…filterUrl也是吗?请使用“编辑”按钮将信息添加到问题中,而不是添加到评论中;)您好,您是否仔细阅读了我提供的信息??,我已经告诉您,我只需要使用表单进行筛选。所以当用户点击表单提交按钮时,我想让它在网格中显示数据。所以请给我一个解决方案。
<sj:a targets="filterGrid"
button="true"
key="global.item.list.form.submit"
formIds="filterForm"
onSuccessTopics="reloadGrid" />
<sjg:grid gridModel="items"
href="%{itemsUrl}"
caption="Items"
id="filterGrid"
dataType="json"
rownumbers="true"
pager="true"
navigator="false"
rowList="10, 15, 20"
rowNum="10"
viewrecords="true">
<s:url id="filterUrl" action="ListItemFilter" />
<s:form id="filterForm" action="%{filterUrl}">
<table style="width:100%">
<tr>
<td colspan="4">
<s:textfield key="global.item.list.name" name="nameContains" />
</td>
</tr>
<tr>
<td colspan="2"> <s:textfield key="global.item.list.pricefrom" name="priceFrom" /> </td>
<td colspan="2"> <s:textfield key="global.item.list.priceto" name="priceTo" /> </td>
</tr>
<tr>
<td colspan="4">
<s:select
cssStyle="width: 100%"
id="SelectCategoryList"
multiple="true"
list = "categoryList"
listKey = "categoryId"
listValue = "categoryType"
headerKey="-1"
headerValue="Select Type"
key = "global.add.item.type"
loadingText="Item Types Loading..."
/>
</td>
</tr>
<tr>
<td colspan="4">
<div id="fields"></div>
</td>
</tr>
<tr>
<td colspan="4"> <sj:a targets="filterGrid"
button="true"
key="global.item.list.form.submit"
formIds="filterForm"
onSuccessTopics="reloadGrid"
/>
</tr>
</table>
</s:form>
<s:url id="itemsUrl" action="ListItems" />
<div class="gridSection">
<sjg:grid gridModel="items"
href="%{itemsUrl}"
caption="Items"
id="filterGrid"
dataType="json"
rownumbers="true"
pager="true"
navigator="false"
rowList="10, 15, 20"
rowNum="10"
viewrecords="true"
>
<sjg:gridColumn name="item.itemname" title="Item Name"></sjg:gridColumn>
<sjg:gridColumn name="shelves.shelfname" title="Shelf Name"></sjg:gridColumn>
<sjg:gridColumn name="quantity" title="Available Qauntity"></sjg:gridColumn>
<sjg:gridColumn name="item.itemprice" title="Item Price"></sjg:gridColumn>
</sjg:grid>
</div>
<action name="ListItems" class="com.acty.libsys.actions.ListItemsAction">
<result name="success" type="json"></result>
</action>
<action name="ListItemFilter" class="com.acty.libsys.actions.ListItemsAction" method="filter">
<result name="success" type="json"></result>
</action>
public class ListItemsAction extends ActionSupport {
private static final long serialVersionUID = 1L;
private List<ItemCategory> categoryList;
public List<ItemCategory> getCategoryList() {
return categoryList;
}
public void setCategoryList(List<ItemCategory> categoryList) {
this.categoryList = categoryList;
}
public String execute() {
serviceProvider.openConnection();
/*This will be available to select box of ListItem.jsp*/
categoryList = serviceProvider.getItemCategoryMapper().selectByExample(null);
items = serviceProvider.getShelfItemsMapper().selectItemsFromShelf();System.out.println("fidddds "+items);
serviceProvider.closeConnection();
return SUCCESS;
}
public String filter() {
ShelfItemsExample example = new ShelfItemsExample();
if(!("".equals(nameContains)))
example.createCriteria().andItemnameIsLike(nameContains);
if(priceFrom != null && priceTo != null)
example.createCriteria().andItemPriceBetween(priceFrom, priceTo);
System.out.println("nameContains "+nameContains + " priceFrom " + priceFrom);
if(itemCategoryFields != null && !(itemCategoryFields.isEmpty())) {
List<String> fieldIds = new ArrayList<String>();
List<String> fieldValues = new ArrayList<String>();
for(Map.Entry<String, String> entry: itemCategoryFields.entrySet()){
fieldIds.add(entry.getKey());
fieldValues.add(entry.getValue());
}
example.createCriteria().andFieldIdIn(fieldIds);
example.setCondition(fieldValues);
}
serviceProvider.openConnection();
items = serviceProvider.getShelfItemsMapper().selectFiltered(example);
System.out.println("fids "+items);
serviceProvider.closeConnection();
return SUCCESS;
}
public void setItems(List<ShelfItems> items) {
this.items = items;
}
/* Used when filter button clicked*/
private String nameContains;
private BigDecimal priceFrom;
private BigDecimal priceTo;
private Map<String, String> itemCategoryFields;
public String getNameContains() {
return nameContains;
}
public void setNameContains(String nameContains) {
this.nameContains = nameContains;
}
public BigDecimal getPriceFrom() {
return priceFrom;
}
public void setPriceFrom(BigDecimal priceFrom) {
this.priceFrom = priceFrom;
}
public BigDecimal getPriceTo() {
return priceTo;
}
public void setPriceTo(BigDecimal priceTo) {
this.priceTo = priceTo;
}
public Map<String, String> getItemCategoryFields() {
return itemCategoryFields;
}
public void setItemCategoryFields(Map<String, String> itemCategoryFields) {
this.itemCategoryFields = itemCategoryFields;
}
/* used when first the form loads*/
private List<ShelfItems> items;
public List<ShelfItems> getItems() {
return items;
}
private DataServiceProviderInterface serviceProvider;
public DataServiceProviderInterface getServiceProvider() {
return serviceProvider;
}
public void setServiceProvider(DataServiceProviderInterface serviceProvider) {
this.serviceProvider = serviceProvider;
}
}
$.subscribe("reloadGrid", function(){
$("filterGrid").trigger("reloadGrid");alert("DF");
});
<sjg:grid gridModel="items"
href="%{itemsUrl}"
caption="Items"
id="filterGrid"
dataType="json"
rownumbers="true"
pager="true"
navigator="false"
rowList="10, 15, 20"
rowNum="10"
viewrecords="true"
loadonce="true"
formIds="filterForm"
filter="true"
filterOptions="{stringResult :true,
searchOnEnter : true,
enableClear : true}"
>
<sjg:gridColumn name="item.itemname" title="Item Name"></sjg:gridColumn>
<sjg:gridColumn name="shelves.shelfname" title="Shelf Name"></sjg:gridColumn>
<sjg:gridColumn name="quantity" title="Available Qauntity"></sjg:gridColumn>
<sjg:gridColumn name="item.itemprice" title="Item Price"></sjg:gridColumn>
</sjg:grid>