最近一直在研究struts2,看了sturts2和博客的相关文章,学习了Struts2 Map嵌套List实现,下面是是示例演示:
要求:一个业务线对应一个目录树
过程:
1.页面前一个Action中实现ServletRequestAware接口
2.在Action中将serviceTypesCategories 放入request中
private Map<String, List<Category>> serviceTypesCategories = new HashMap<String, List<Category>>();
request.setAttribute("serviceTypesCategories", serviceTypesCategories);
3.JSP页面代码
<s:iterator value="%{serviceTypesCategories.keySet()}" id="serviceTypeString" >
<s:set name="serviceTypeRequest" scope="request" value="#serviceTypeString"/>
<s:text name="preferential_servicestype"/>:<s:property value="serviceTypeString"/><br>
<%
Map<String, List<Category>> serviceTypesCategories = (Map<String, List<Category>>) request
.getAttribute("serviceTypesCategories");
String servicetype = (String) request.getAttribute("serviceTypeRequest");
PreferentialCheckTreeUtil util = new PreferentialCheckTreeUtil();
List<Category> myCategories = serviceTypesCategories.get(servicetype);
List<Category> rootCategories = new ArrayList<Category>();
out.println(" <script language=\"JavaScript\">");
out.println("var check" + treeIndex + " = new CheckTree('check" + treeIndex + "');");
out.println("</script>");
out.println(" <ul id=\"tree-check" + treeIndex + "\" class=\"checktree\">");
for (Category category : myCategories) {
if (category.getLevel() == 1) {
rootCategories.add(category);
}
}
final PrintWriter mcpsOut = response.getWriter();
for (Category rootCategory : rootCategories) {
// out.println(rootCategory.getName());
//判定是否是当前层的最后一个节点
if (rootCategory.getId() == rootCategories.get(rootCategories.size() - 1).getId()) {
util.printCategoryWithCheck(rootCategory, out, true);
}
else {
util.printCategoryWithCheck(rootCategory, out, false);
}
}
out.println("</ul>");
treeIndex++;
%>
</s:iterator>
注意:这里使用了<S:SET/>标签,并且设置scope为request,如果不放入request中,会出现页面偶尔显示不出来的情况,
原因是: <s:iterator value="%{serviceTypesCategories.keySet()}" id="serviceTypeString" >
默将serviceTypeString放入stack context中,并非reqeust中.
分享到:
相关推荐
在处理复杂数据结构时,Struts框架提供了灵活的数据绑定能力,其中包括在List中嵌套Map的情况。这个主题主要涉及到如何在Struts的ActionForm或者Action类中接收并处理这种复杂的数据结构,以及在JSP页面上进行展示。...
本资源“struts2 表单数据绑定map、list等.rar”着重讲解了Struts2如何处理表单数据,特别是如何将表单数据绑定到Map和List等集合类型。了解这些内容对于构建动态、复杂的Web应用至关重要。 在Struts2中,数据绑定...
在Struts2框架中,`iterator`标签是一个非常重要的组件,用于遍历各种集合对象,如List、Map等。在上述描述中,开发者遇到了一个关于`iterator`标签嵌套使用的问题,涉及到`LinkedHashMap`存储的数据结构。让我们...
`<s:iterator>`标签是Struts2中最常用的标签之一,它可以用来遍历集合(如List、Set、Map等)。但是,如果想要实现类似Java中的`for`循环功能,可以利用`org.apache.struts2.util.Counter`类来实现。 ### 实现步骤 ...
10. **s:iterator标签**:用于迭代集合,常用于遍历列表、数组或Map,可以在循环内部嵌套其他Struts2标签。 11. **s:property标签**:用于显示Action类属性的值,可以格式化输出,支持EL表达式。 12. **s:debug...
6. **数据绑定**:在Struts2 Action中,你需要准备一个数据集(如List或Map),这将与Excel模板的占位符对应起来。Jxls会根据模板的结构自动填充数据。 7. **文件流处理**:在Struts2中,使用`response....
它还支持动态构造容器,如`{"green", "red", "blue"}`创建List,`{"key1" : "value1", "key2" : "value2", "key3" : "value3"}`创建Map。 5. **静态方法和变量的访问**: 要调用类的静态方法或访问静态变量,可以...
- **迭代遍历**: `<s:iterator value="userList" ...>`用于遍历集合如List或Map,配合`<s:property>`展示集合中的每个元素。 - **URL生成**: `<s:url action="" ...>`用于生成URL并可通过`s:param`子元素传递参数。...
6. 表达式嵌套:OGNL支持复杂的嵌套表达式,如`object.property1.property2`。 四、Struts2中的OGNL安全问题 虽然OGNL提供了极大的灵活性,但这也带来了安全隐患。著名的“Struts2 OGNL注入”漏洞就源于对用户输入...
Struts2是一个基于MVC设计模式的Java web框架,它极大地简化了开发过程,并提供了强大的功能。在Struts2中,OGNL(Object Graph Navigation Language)是表达式语言,用于在视图层与模型层之间进行数据绑定和交互。...
### Struts2 OGNL 基本用法详解 #### 一、访问值栈中的Action及对象属性 OGNL(Object-Graph Navigation Language)是Struts2框架中用于访问和操作Java对象的一种强大表达式语言。在Struts2中,OGNL主要用于访问值...
Struts2 JSON插件是Java开发中用于处理JSON数据的一个工具,主要目的是为了方便Web应用在前后端交互时,能够快速地将Action对象转换为JSON格式的字符串,从而实现Ajax或者JSONP请求的响应。JSON(JavaScript Object ...
本文将深入讲解如何使用OGNL遍历Map对象,以展示Struts2在处理复杂数据结构时的灵活性。 首先,让我们来看一下`MapAction`类的代码。在这个例子中,我们定义了四个不同类型的Map对象: 1. `private Map, String> ...
`<s:iterator>`:这是最常用的标签之一,用于遍历集合(如List、Map等),并可以嵌套使用其他标签。 M. `<s:merge>`:合并遍历集合的值,方便处理集合数据。 N. `<s:optgroup>` 和 `<s:option>`:在下拉框中创建...
通过这些不同类型的Form Bean,开发者可以在Struts框架下灵活地处理各种用户输入,实现复杂的数据验证和业务逻辑。实践中的选择应根据具体的应用场景和需求来确定,以达到最佳的代码组织和维护性。在实际项目中,...
2. **EL与Map** - EL也可以用于访问Map类型的对象。 - 示例:`("map", map) %>`, `${map.key1}` 访问`key1`对应的值。 通过以上介绍可以看出,合理利用Struts框架提供的工具和技术,可以有效地组织代码结构,提高...
5. **迭代标签`<s:iterator>`**:这个标签用于遍历集合,如`<s:iterator value="userList" id="user" status="u">`,其中`value`属性指定要迭代的集合(如List或Map),`id`属性用于在循环内部引用当前项,`status`...
至于循环控制,可以通过嵌套`<s:iterator>`标签实现。 总的来说,OGNL是Struts2中强大的表达式语言,它简化了视图层与模型数据之间的交互,使得开发者能够更便捷地操作和展示业务逻辑中的各种数据。通过学习和熟练...
### 常用Struts1遍历方法 在Struts框架中,对于数据集合...无论是简单的List还是复杂的Map,甚至是多层嵌套的结构,都能够很好地支持。掌握这些遍历技巧,能够帮助开发者更加高效地处理数据,提升Web应用的用户体验。
6. `<logic:iterate>`: 遍历集合对象,如数组、List或Map,常用于循环输出。 7. `<tiles:insert>`: 插入一个预定义的页面模板或组件。 8. `<html:errors>`: 显示ActionForm中验证错误消息。 三、使用Struts ...