在一个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;
}
}
再次运行,成功。^_^
希望对大家有帮助。
分享到:
相关推荐
<%@ taglib uri="/struts-tags" prefix="s" %> 结合例子,重点掌握以下标签的用法 (1) (2) (3) <s:if> 、、 (4) (5) (6) 、 (7) 、、、 (8) <s:select>、、<s:checkboxlist>
本书是广受赞誉的Struts 2优秀教程,它全面而深入地阐述了Struts 2的各个特性,并指导开发人员如何根据遇到的问题对症下药,选择使用最合适的特性。作者处处从实战出发,在丰富的示例中直观地探讨了许多实用的技术,...
这个是自己试验的实例,不多,只有s:textfield和s:select。里面有注释,页面、xml和action里的注释序号都是相互对应的。jar都在,直接去掉注释就可以运行。我用的开发环境是jdk5和myeclipes5
<%@ taglib uri="/struts-tags" prefix="s" %> 结合例子,重点掌握以下标签的用法 (1) (2) (3) <s:if> 、、 (4) (5) (6) 、 (7) 、、、 (8) <s:select>、、<s:checkboxlist>
jsp 开发之struts2中s:select标签的使用 1.第一个例子: <s list={ theme=simple headerKey=00 headerValue=00></s> 2.第二个例子: 3.第三个例子 <s:select theme=simple name
8.Select标签 7 9.Checkbox 10 10.checkboxlist 12 11.combobox 14 12.datepicker 17 9.总结 21 10.国际化资源文件占位符 为资源文件传参数 22 没有JUNIT 22 OGNL 22 技巧一 30 Action类及Action Name的命名规范 ...
我就是靠这个文档实现logic:iterate的循环的 struts 标签 logic:iterate使用 logic:iterate <br>第一页 是struts官方的说明, 第二页 是个例子 第三页 是我实现的arrayList放入标签的方法。 这是页面...
5.13 select标签 76 5.14 用optgroup标签对选项进行分组 79 5.15 checkboxlist标签 82 5.16 combobox标签 83 5.17 updownselect标签 85 5.18 optiontransferselect标签 87 5.19 doubleselect标签 90 5.20 主题 92 ...
使用struts2,jquery,jquery插件treeview以及json动态生成一棵目录树,下载后可以直接运行,供学习使用
select标签 13.9.10. option标签 13.9.11. options标签 13.9.12. textarea标签 13.9.13. hidden标签 13.9.14. errors标签 13.10. 处理异常 13.11. 惯例优先原则(convention over configuration) 13.11.1....
select标签 13.9.10. option标签 13.9.11. options标签 13.9.12. textarea标签 13.9.13. hidden标签 13.9.14. errors标签 13.10. 处理异常 13.11. 惯例优先原则(convention over configuration) 13.11.1....
select标签 13.9.8. option标签 13.9.9. options标签 13.9.10. textarea标签 13.9.11. hidden标签 13.9.12. errors标签 13.10. 处理异常 13.11. 惯例优先原则(convention over configuration) 13.11.1. 对...
select标签 13.9.8. option标签 13.9.9. options标签 13.9.10. textarea标签 13.9.11. hidden标签 13.9.12. errors标签 13.10. 处理异常 13.11. 惯例优先原则(convention over configuration) 13.11.1. 对控制器的...
select标签 13.9.8. option标签 13.9.9. options标签 13.9.10. textarea标签 13.9.11. hidden标签 13.9.12. errors标签 13.10. 处理异常 13.11. 惯例优先原则(convention over configuration) 13.11.1. 对...
\contentsline {chapter}{Contents}{2}{section*.1} {1}Java基础}{17}{chapter.1} {1.1}基本语法}{17}{section.1.1} {1.2}数字表达方式}{17}{section.1.2} {1.3}补码}{19}{section.1.3} {1.3.1}总结}{23}{...
4.2 使用select已映射语句 70 4.2.1 使用内联参数(用#做占位符) 70 4.2.2 使用内联参数(用$做占位符) 71 4.2.3 SQL注入简介 72 4.2.4 自动结果映射 73 4.2.5 联结相关数据 74 4.3 映射参数 75 4.3.1 外部参数映射 75...
2.28.2 Struts2校验框架应用 71 2.28.2.1 校验配置文件 71 2.28.2.2 角色Insert页面示例 71 2.28.2.3 用户Query页面示例 73 2.28.2.4 多行输入域校验 75 2.29 多语言管理 77 2.29.1 定义输入域的name属性和资源文件 ...
国内知名的高端IT技术作家,已出版《Spring 2.0宝典》、《基于J2EE的Ajax宝典》、《轻量级J2EE企业应用实战》、《Struts 2权威指南》、《Ruby On Rails敏捷开发最佳实践》等著作。 目录: 第0章 学习Java...