struts2的select标签使用例子

在一个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;
	}
}

 再次运行,成功。^_^

希望对大家有帮助。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值