我正在尝试使用Struts2-jQuery-grid-3.7.0插件在网格列中填充下拉列表,如下所示。
<s:url id="dataURL" action="CategoryList" namespace="/admin_side"/>
<sjg:gridColumn name="subCategory.category.catName"
index="subCategory.category.catName"
edittype="select"
searchtype="select"
formoptions="{label:'Select'}"
surl="%{dataURL}"
editoptions="{dataUrl : '%{dataURL}'}"
editrules="{required: true}"
title="Category" width="200"
sortable="true" search="true"
editable="true" sorttype="text"/>
CategoryList
动作映射的动作如下:
@Namespace("/admin_side")
@ResultPath("/WEB-INF/content")
@ParentPackage(value="struts-default")
public final class CategoryList extends ActionSupport implements Serializable {
@Autowired
private final transient Service service = null;
private List<Category>categories = new ArrayList<Category>();
private static final long serialVersionUID = 1L;
public List<Category> getCategories() {
return categories;
}
@Action(value = "CategoryList",
results = {
@Result(name = ActionSupport.SUCCESS, location = "Product.jsp"),
@Result(name = ActionSupport.INPUT, location = "Product.jsp")},
interceptorRefs = {
@InterceptorRef(value = "defaultStack", params = {"validation.validateAnnotatedMethodOnly", "true", "validation.excludeMethods", "load"})})
public String load() throws Exception {
System.out.println("load called...");
categories = service.getCatgeoryList();
return ActionSupport.SUCCESS;
}
}
当点击网格上的给定编辑链接时,将执行load()
方法,其中从数据库加载类别列表。
然而,网格中的列表在编辑模式下(单击编辑链接时)不显示任何内容。我找不到可能证明这种事情的相关例子。
如何填充此下拉列表,尤其是如何使用catName
属性和值分别使用catId
(Long
类型)属性来提供此下拉标签(while {列表中的{1}}还有很多其他属性)?
我找不到将category
映射到java.util.List<E>
的相关示例。
<sjg:grid>
是subCategory.category.catName
实体的嵌套属性。
在这种情况下,即使填充列表后,还应注意此列的显示值为Product
(String类型的类别名称)。但是,要设置为catName
实例的所选项的值应为Product
(类型为Long的类型ID),这似乎不可能,因为此列的名称为{{1 }} 子>
直观地,catId
(subCategory.category.catName
)会被映射到catId
(subCategory.category.catId
)这是错误的,如果我可以正确设想,就像列表一样已经填充了。
答案 0 :(得分:3)
在Struts 2中,HTML下拉列表可以通过<s:select>
标记呈现。要自动选择下拉列表的默认值,只需在标记中声明“value”
属性,并相应地设置默认值。
示例:强> 的
用于生成下拉框选择选项的Java列表。
//...
public class SelectAction extends ActionSupport {
private List<String> searchEngine;
private String yourSearchEngine;
//set default value
public String getDefaultSearchEngine() {
return "yahoo.com";
}
public SelectAction() {
searchEngine = new ArrayList<String>();
searchEngine.add("google.com");
searchEngine.add("bing.com");
searchEngine.add("yahoo.com");
searchEngine.add("baidu.com");
}
//...
}
标记用于呈现HTML下拉框。 value=”defaultSearchEngine”
将调用对应的Action类getDefaultSearchEngine()
方法以返回默认搜索引擎值。
许多行动都有共同的担忧。某些操作需要输入验证。其他操作可能需要预处理文件上载。另一个行动可能需要保护双重提交。在页面显示之前,许多操作需要预先填充drop-down lists和其他控件。
<s:select label="What's your favor search engine"
headerKey="-1" headerValue="Select Search Engines"
list="searchEngine"
name="yourSearchEngine"
value="defaultSearchEngine" />
在此示例中,下拉框将自动选择“yahoo.com”作为默认选项。
将Struts2 jQuery插件标记库添加到JSP
<%@ taglib prefix="s" uri="/struts-tags"%>
<%@ taglib prefix="sj" uri="/struts-jquery-tags"%>
<%@ taglib prefix="sjg" uri="/struts-jquery-grid-tags"%>
在标题中启用jQuery Grid插件
<sj:head jqueryui="true" jquerytheme="redmond" />
的更新强> 的
在JSP中指定编辑网址
<s:url var="editurl" action="edit-grid-entry"/>
通过在JSP中设置以下属性来启用编辑
<sjg:grid ... editurl="%{editurl}" ...>
然后定义哪个列应该可编辑
<sjg:gridColumn ...
editable="true"
edittype="<type>"
editoptions="{<options>}"
editrules="{<rules>}"
... />
编辑选项的示例:
<sjg:gridColumn
name="country"
index="country"
title="Country"
editable="true"
edittype="select"
editoptions="{value:'France:France;USA:USA;Australia:Australia;Norway:Norway;Spain:Spain'}"/>
编辑规则的示例:
<sjg:gridColumn name="creditLimit"
index="creditLimit"
title="Credit Limit"
editable="true"
editrules="{
number: true,
required: true,
minValue : 100.0,
maxValue : 10000.0
}"
formatter="currency"/>
的更新:1 强> 的
<select name="catid" size="15" id="dataURL" multiple="multiple">
<option value="1 - One ">1 - One </option>
<option value="2 - Two">2 - Two</option>
<option value="3 - Three">3 - Three</option>
<option value="4 - Four">4 - Four</option>
<option value="5 - Five">5 - Five</option>
</select>
答案 1 :(得分:0)
关于与gridColumn
和editoptions
属性相关联的文档:
<强> dataUrl 强>
此选项仅对select类型的元素有效 - 即 edittype:select并且应该是获取AJAX数据的URL 选择元素。数据是通过AJAX调用获得的,应该是a 带有所需选项的有效HTML select元素One ....您可以使用选项组。
您的操作必须返回有效的select
元素。
这意味着,您的Product.jsp
结果需要如下所示:
<%@ taglib prefix="s" uri="/struts-tags"%>
<s:select list="categories" key="id" value="name"/>
参考:http://www.trirand.com/jqgridwiki/doku.php?id=wiki:common_rules