【问题标题】:Using a drop-down list in an editable grid column using Struts2-jQuery-grid plugin使用 Struts2-jQuery-grid 插件在可编辑的网格列中使用下拉列表
【发布时间】:2014-03-26 02:14:57
【问题描述】:

我正在尝试使用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 类型)属性赋予此下拉标签(而列表中的category许多其他属性)?

我找不到将java.util.List&lt;E&gt; 映射到&lt;sjg:grid&gt; 的相关示例。


subCategory.category.catNameProduct 实体的嵌套属性。

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

直观地说,catId (subCategory.category.catId) 将被映射到 catName (subCategory.category.catName),如果我能正确地设想,就好像列表已经填充一样。

【问题讨论】:

  • 添加了 struts2-jquery 标签,因为它有 31 个关注者,而您的其他 sj 标签有 3 个关注者...
  • 如果有人有,请添加答案。

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


【解决方案1】:

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

dataUrl

此选项仅对 select 类型的元素有效 - 即, edittype:select 并且应该是获取 AJAX 数据的 URL 选择元素。数据是通过 AJAX 调用获得的,应该是 具有所需选项的有效 HTML 选择元素一个…。您可以使用选项组。

您的操作必须返回有效的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

【讨论】:

  • 如果只有&lt;s:select&gt;,可以这样做。我们可以在网格列中使用&lt;s:select&gt; 吗?
  • 如果我理解正确,select 是在 taglib 内没有 taglib 声明时呈现的,对吧?我确信你在 JSP 中有一些 taglib 声明,你在其中放置了 gridColumn 元素,那么它可以在 Product.jsp 内没有额外声明的情况下工作。
  • 您能否结合&lt;sjg:grid&gt; 进行演示?我无法想象这件事。我已经在 J​​SF 和它的组件库 PrimeFaces 中实现了这样的东西,其中 &lt;p:dataTable&gt; 内部有一个 &lt;p:rowEditor&gt;,我们可以在其中放置我们选择的组件,例如 &lt;p:selectOneMenu&gt;。这是一个不同的场景。
【解决方案2】:

在 Struts 2 中,HTML 下拉列表可以通过&lt;s:select&gt; 标签呈现。要为下拉列表自动选择默认值,只需在标签中声明“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()方法返回一个默认的搜索引擎值。

许多操作都有共同的关注点。某些操作需要输入验证。其他操作可能需要对文件上传进行预处理。另一个 Action 可能需要防止双重提交。许多操作需要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 标签中启用 jQuery Grid 插件

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

【讨论】:

  • 我知道这个流浪者&lt;s:select&gt;,但我需要&lt;sjg:gridColumn&gt; 中的下拉列表。这应该与属性editoptions="{dataUrl : '%{dataURL}'}" 或其他东西有关。
  • editoptions 是动态的。它们应该从数据库中填充。给定问题中的示例,catId 作为值,catName 作为&lt;select&gt;&lt;option&gt;&lt;/option&gt;&lt;/select&gt; 的标签。这怎么可能是动态的 - editoptions="{value:'France:France;USA:USA;Australia:Australia;Norway:Norway;Spain:Spain'}"
  • 该列表填充在CategoryList 类中。它应该映射到editoptionscatId 作为值,catName 作为&lt;select&gt;&lt;option&gt;&lt;/option&gt;&lt;/select&gt; 的标签。这个可以吗?
  • 这无法完成。你确定吗?该列表应在&lt;sjg:gridColumn&gt; 内,并且是动态的:) 此外,在编辑行时应检索此列表的 选定 值。
猜你喜欢
  • 1970-01-01
  • 2014-03-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多