当前位置 : 主页 > 编程语言 > java >

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

来源:互联网 收集:自由互联 发布时间:2021-06-25
我正在尝试使用 Struts2-jQuery-grid-3.7.0插件填充网格列中的下拉列表,如下所示. s:url id="dataURL" action="CategoryList" namespace="/admin_side"/sjg:gridColumn name="subCategory.category.catName" index="subCategory.cate
我正在尝试使用 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类型)属性给这个下拉标签(列表中的类别有许多其他属性)?

我没有找到相关的例子来映射java.util.List< E>到< sjg:grid>.

subCategory.category.catName是Product实体的嵌套属性.

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

直观地说,catId(subCategory.category.catId)将被映射到catName(subCategory.category.catName)这是错误的,如果我可以正确设想好像列表已经填充.

在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"%>

在Head Tag中启用jQuery Grid Plugin

<sj:head jqueryui="true" jquerytheme="redmond" />

更新:

在JSP中指定编辑URL

<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>
网友评论