生成HTML元素
: 生成HTML元素
: 生成一组HTML元素
生成一组HTML元素。
生成HTML元素,表示下拉列表框或多选列表。
在标签中可以包含多个,,元素。
标签有以下重要属性
size属性: 指定每次在网页上显示的可选项的数目。
multipe属性: 指定是否支持多项选择,如果设置为true,就表示多选列表,支持多项选择。否则只表示下拉列表。只支持单选操作。默认值false
property属性: 与ActionForm Bean中的某个属性对应,这个属性用来存放用户在列表上选中选项的值。在单项选择的情况下,ActionForm Bean中的对应属性对应该列表上选项的值。在单项选择情况下,
ActionForm Bean对应属性应该定义为简单类型(不能为数组),在多项选择情况下,ActionForm Bean中的对应属性应该定义为数组类型,以便存放用户选择的多个选项。
标签生成HTML元素,这个标签被嵌套在标签中,代表列表的一个可选项的Label,既现在是在页面上的值。这中值有两个来源。
1.直接指定文本内容 Label来源1:直接指定文本内容
2.通过Resource Bundle中的内容。
例如:ApplicationResources.properties资源文件中存在如下键值对:a1=happySelect
标签中通过key关联到资源文件,指定要显示内容。 这样在页面上显示出happySelect
3.通过key,bundle同时指定要显示的内容
bundle与Struts配置文件中元素配置的Resource Bundle的资源文件key匹配
这样在页面上显示出happySelect
把列表的可选项的显示文本存放在Resource Bundle中,而不是直接在JSP文件中指定,有利于实现国际化。
元素的value属性指定可选项的实际值。
标签生成一组HTML标签元素。在元素中可以包含多个元素。
1.使用coolection属性 指定存在某个范围中的集合来生成列表项,注意coolection属性指定的集合,该对象的每一个元素为一个Bean。
例如有如下实体类
package com.pojo;
public class Users {
private String userName; private String userValue; public Users(){} public Users(String userName,String userValue) { this.userName=userName; this.userValue=userValue; } public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } public String getUserValue() { return userValue; } public void setUserValue(String userValue) { this.userValue = userValue; }
}
将实体类实例放入ArrayList列表然后放入reqeust范围内 Users u1=new Users("1","高中"); Users u2=new Users("2","本科"); Users u3=new Users("3","硕士"); Users u4=new Users("4","博士"); ArrayList array=new ArrayList(); array.add(u1); array.add(u2); array.add(u3); array.add(u4); request.setAttribute("xueli",array);
使用标签生成可选项
collection="xueli" property="userName" labelProperty="userValue"/> :
collection指定存放在request范围内的集合
property指定实际值 labelProperty指定显示到页面上的文本。
当使用property属性和labelProperty属性时,会根据属性指定的名称调用相应Bean中的getXXX方法来获得属性值。
生成HTML效果如下
高中 本科 硕士 博士
其中collection为一个集合,一般是个ArrayList,displayName为前台显示的名称,value为后台实际使用的值. 例:2.利用name属性 指定存放在某个范围中的对象,并有property属性指定该对象的某个属性来生成列表项。
例如 Object[] obj=new Object[]{"高中","本科","硕士","博士"}; request.setAttribute("xueli",array);
name="xueli"/> 生成HTML效果如下:
高中 本科 硕士 博士
如果 name="xueli" property="userName" labelProperty="userValue"/>
将报如下异常 javax.servlet.jsp.JspException: No getter method available for property userName for bean under name xueli
3 如果数据是在ActionFormBean中
private String[] addrOpts = { "11", "12", "13" };
private String[] addrLab = { "BJ", "SH", "HK" };
如果使用name属性指定集合那么需要使用标签
标签中可以嵌套多个标签
标签与标签相似,他通过name属性 或property属性 指定一个集合对象,该对象中的每一个元素为一个Bean,并且在Bean中分别具有与标签中label属性和value属性指定的值匹配的getXXX方法。
其中label属性 用来指定列表项的标签(显示给指定的用户),value属性 用来指定实际值(提交给服务器的值)
例如: ArrayList列表然后放入reqeust范围内 Users u1=new Users("1","高中"); Users u2=new Users("2","本科"); Users u3=new Users("3","硕士"); Users u4=new Users("4","博士"); ArrayList array=new ArrayList(); array.add(u1); array.add(u2); array.add(u3); array.add(u4); request.setAttribute("xueli",array);
name="xueli" value="userName" label="userValue"/>
如果使用property属性,那么将使用和表单相关联的FormBean中的xueli属性作为指定的集合。
其中property为ActionForm中的一个属性,为一个集合.displayName为前台显示的名称,value为后台实际使用的值. 例:
-----------------------------------------------------------------------------------------------------------------
意见:
如果要从 数据库去取数据,一般是在 action 里调用 DAO ,把结果存入一个ArrayList作为 request 的一个属性传到页面上; 这时一般用 标签.另外,如果数据不从数据库去取,而是代码固定的,则一般把这种放到 ActionForm 里,作为属性在页面上取,这时一般用