在一个ssh项目里,我使用到了strut2标签,因为不熟练,遇到一系列问题,下面整理出来,与大家共享。
要求是这样:在前台页面上要用select下拉框,下拉框的内容是从后台程序读出来的。
1.首先,来看看前台页面baseinfo.jsp:
<%@ page contentType="text/html; charset=GB2312"%>
<%@taglib prefix="s" uri="/struts-tags"%>
<html>
<head>
<title><s:text name="index"/></title>
</head>
<body>
<br>
<table width="768" border="0" align="center" cellpadding="0" cellspacing="0">
<tr>
<td>
<s:form action="baseinfoProcess.action">
<s:select name="nationality" key="label_nationality" list="nations" listKey="id" listValue="nation"/>
</s:form>
</td>
</tr>
</table>
</body>
</html>
2.建立下拉框内容的对象的类,Nation.java:
package auth.model;
/**
*
* @author weiqi
* @version 0.1 2009-02-25
*/
public class Nation implements java.io.Serializable {
// Fields
private Integer id;
private String nation;
/** default constructor */
public Nation() {
}
/** full constructor */
public Nation(Integer id, String nation) {
this.id = id;
this.nation = nation;
}
// Property accessors
public Integer getId() {
return this.id;
}
public void setId(Integer id) {
this.id = id;
}
public String getNation() {
return this.nation;
}
public void setNation(String nation) {
this.nation = nation;
}
}
3.action类:TestAction.java
package auth.action;
import java.util.*;
import com.opensymphony.xwork2.ActionSupport;
import auth.model.Nation;
/**
*
* @author weiqi
* @version 0.1 2009-02-25
*/
public class TestAction extends ActionSupport {
private List nations ;
public String execute() throws Exception {
List nations =new ArrayList<Nation>();
Nation hz = new Nation(1,"汉族");
Nation tjz = new Nation(2,"土家族");
Nation huiz = new Nation(3,"回族");
nations.add(hz);
nations.add(tjz);
nations.add(huiz);
setNations(nations);
return "success";
}
public void setNations(List nations) {
this.nations = nations;
}
public List getNations() {
return nations;
}
}
4.再来看看struts.xml的配置:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<package name="weiqi" extends="struts-default">
<action name="test" class="auth.action.TestAction">
<result name="success">/WEB-INF/jsp/baseinfo.jsp</result>
<result name="failure">/WEB-INF/jsp/error.jsp</result>
</action>
</package>
</struts>
应该没错了,运行,测试一下,结果报错了:
2009-02-27 00:18:54 [ http-8080-Processor25:76531 ] - [ ERROR ] Servlet.service() for servlet jsp threw exception
tag 'select', field 'list', name 'nationality': The requested list key 'nations' could not be resolved as a collection/array/map/enumeration/iterator type. Example: people or people.{name} - [unknown location]
at org.apache.struts2.components.Component.fieldError(Component.java:231)
at org.apache.struts2.components.Component.findValue(Component.java:293)
at org.apache.struts2.components.ListUIBean.evaluateExtraParams(ListUIBean.java:79)
at org.apache.struts2.components.Select.evaluateExtraParams(Select.java:99)
at org.apache.struts2.components.UIBean.evaluateParams(UIBean.java:780)
at org.apache.struts2.components.UIBean.end(UIBean.java:481)
报错的意思是nations不能转换成/array/map/enumeration/iterator等类型。
仔细查了查,select标签的说明:
---------------------------------------------------------------------------------------------------------------------------
struts2的select标签中,常用的有以下几个属性:
(1)struts2中的select 标签中,必须设置的属性只有一个,即是list。
(2)select标签的list中必须有值,不然会报错。如果没有值,可以加上headerKey, headerValue,这样就可以通过了
其中,即使list中有值,我们也通常会加上headerKey, headerValue,即列表中显示的第一个选项。注意,headerKey不可以为空,不可以为-1
(3)list属性:通常是在action中定义的,必须是一个可以迭代的源,如为一个List, Map, Set等。如果是一个Map,那么map的key就对应于select标签中的value,map中的value就对应于select标签中的option。而如果是一个List或者是一个Set,那么可以通过listKey和listValue指定。
(4)listKey和listValue:listKey即对应于select标签中的value, listValue即对应于select标签中的option。
(5)name属性:即是表单中select的名称。
---------------------------------------------------------------------------------------------------------------------------
我的写法没有问题啊。
后来,我把重点放在了TestAction.java的身上,做了如下改动:
package auth.action;
import java.util.*;
import com.opensymphony.xwork2.ActionSupport;
import auth.model.Nation;
/**
*
* @author weiqi
* @version 0.1 2009-02-25
*/
public class TestAction extends ActionSupport {
private List<Nation> nations ;
public String execute() throws Exception {
List<Nation> nations =new ArrayList<Nation>();
Nation hz = new Nation(1,"汉族");
Nation tjz = new Nation(2,"土家族");
Nation huiz = new Nation(3,"回族");
nations.add(hz);
nations.add(tjz);
nations.add(huiz);
setNations(nations);
return "success";
}
public void setNations(List<Nation> nations) {
this.nations = nations;
}
public List<Nation> getNations() {
return nations;
}
}
再次运行,成功。^_^
希望对大家有帮助。
分享到:
相关推荐
在压缩包中的"example"文件可能包含了一个或多个使用Struts2标签的实际示例,可以参考这些示例来理解和学习Struts2标签的用法。通过实践,你会更好地掌握这些标签的功能和用法,从而在开发过程中更加得心应手。
下面,我们将详细介绍 Struts2 标签库的使用。 4.1 通用标签 通用标签用来控制页面的执行过程,并从 Action 或值堆栈中取得数据。这些标签可以分为控制标签、数据标签和其他标签。 控制标签用来控制程序的执行,...
在Struts中,`html:select`标签是用于创建HTML下拉列表的一个重要元素,特别适用于用户界面中需要选择单一或多个选项的场景。本文将深入探讨`html:select`标签的使用方法及其相关知识点。 首先,我们需要理解`...
在Struts2框架中,实现页面`<select>`标签默认选中的功能是非常实用且常见的需求。这不仅可以提高用户体验,还能让界面看起来更加专业。本文将详细介绍如何通过Struts2的相关标签来实现这一功能。 ### Struts2框架...
在本文中,我们将深入探讨Struts2中`select`标签的三种不同的使用方法,以及如何从Action类动态获取数据填充这些选项。 ### 一、静态定义`select`标签 1. **静态数据**:在简单的场景下,我们可以直接在JSP页面中...
以下是一个简单的示例,展示了如何在Struts2中使用`select`标签与Hibernate配合: ```java // Action类 public class MyAction extends ActionSupport { private List<MyEntity> options; // getter和setter省略 ...
本示例将深入探讨Struts2的表单标签使用方法,帮助开发者更好地理解和应用这些标签。 首先,我们来了解一些基本概念。在Struts2中,表单标签通常与Action类中的属性相对应,用于在JSP页面上创建HTML表单元素。例如...
Struts2 标签库及国际化的使用案例 Struts2 框架提供了强大的标签库和国际化功能,本实验旨在掌握 Struts 2 标签库和国际化功能的使用,并实现用户注册页面的国际化显示。 一、Struts2 标签库 Struts2 框架提供了...
本文将详细介绍Struts2中的表单标签及其使用方法。 #### 二、Struts2表单标签概述 Struts2中的表单标签主要分为基础表单标签和高级表单标签两大类。基础表单标签涵盖了如单选框、复选框、下拉列表等基本元素;而...
"jsp中struts2.0标签应用示例"这个主题主要关注如何在JSP页面中利用Struts2.0提供的标签进行视图层的构建,通过实际例子展示了`<s:form>`、`<s:textfield>`、`<s:password>`、`<s:select>`等常用标签的使用,...
Struts2的UI标签提供了一整套丰富的界面组件,如文本框`<s:textfield>`、下拉框`<s:select>`、复选框`<s:checkbox>`等。这些标签使得表单的创建更加简单,且易于与Action进行数据绑定。 5. 日期和树节点标签 对于...
Struts2的标签API文档详细列出了每个标签的用法、属性、示例以及它们如何与Action上下文交互。通过阅读API,开发者可以了解每个标签的完整功能,包括标签的初始化、属性设置、事件处理等。 四、Struts2标签与OGNL ...
本篇文章将深入探讨“struts2的标签例子”,特别是关于Ajax的标签使用,以及如何实现级联下拉列表的功能。 首先,我们要理解Struts2的标签库。Struts2的标签库主要分为核心标签库(struts-tags)和展示标签库...
Struts2_3800_Tag这个压缩包文件可能包含了Struts2 UI标签的相关源码、文档或示例,可以帮助开发者深入理解这些标签的工作原理,以及如何在项目中有效利用它们。通过学习和实践,开发者可以更好地掌握Struts2框架,...
参考文档是开发者理解和使用Struts2标签的关键资源,它详细阐述了每个标签的功能、属性、用法及示例,有助于快速学习和掌握Struts2的视图层开发。 通过深入学习和实践Struts2的标签API,开发者可以有效地提升Web...
在实际开发中,Struts2标签可以与OGNL(Object-Graph Navigation Language)表达式一起使用,实现动态数据绑定和复杂的逻辑判断。例如,`s:if`标签可以这样使用: ```jsp 欢迎管理员! 欢迎普通用户! ``` ...
给出的示例代码主要展示了如何使用`<html:select>`标签来创建一个下拉列表,并利用`<c:forEach>`标签遍历数据集以填充下拉列表选项。这里涉及到了多个标签的组合使用,下面我们逐一解析: #### `<html:select>`标签...
这个例子展示了如何使用Struts2的`<s:form>`、`<s:textfield>`、`<s:password>`、`<s:email>`和`<s:fielderror>`标签创建一个包含用户输入验证的注册表单。 五、源码与工具 理解Struts2标签的实现原理,可以查看其...
例如,在提供的代码片段中,可以看到`<%@ taglib prefix="s" uri="/struts-tags"%>`引入了Struts2的标签库,这使得在JSP中可以方便地使用OGNL表达式来操作页面上的Java对象。 ```jsp ("sex", Sex.MALE); %> This ...
4. **ValueStack**: Struts2使用ValueStack来存储模型对象,这些对象可以被视图层访问,以展示数据。ActionContext提供了对当前请求上下文的访问,包括ValueStack、Parameters等。 5. **OGNL(Object-Graph ...