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