使用Struts2-jQuery-grid插件在可编辑网格列中使用下拉列表

时间:2014-02-24 12:09:48

标签: jsp struts2 struts2-jquery struts2-jquery-grid struts2-jquery-plugin

我正在尝试使用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属性和值分别使用catIdLong类型)属性来提供此下拉标签(while {列表中的{1}}还有很多其他属性)?

我找不到将category映射到java.util.List<E>的相关示例。


<sjg:grid>subCategory.category.catName实体的嵌套属性。

在这种情况下,即使填充列表后,还应注意此列的显示值为Product(String类型的类别名称)。但是,要设置为catName实例的所选项的值应为Product(类型为Long的类型ID),这似乎不可能,因为此列的名称为{{1 }}

直观地,catIdsubCategory.category.catName)会被映射到catIdsubCategory.category.catId)这是错误的,如果我可以正确设想,就像列表一样已经填充了。

2 个答案:

答案 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)

关于与gridColumneditoptions属性相关联的文档:

  

<强> 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