struts2官方 中文教程 系列十:Form标签
介绍
在本教程中,我们将探索其他Struts 2表单控件。在前面的教程中,我们介绍了如何使用Struts 2表单(处理表单、表单验证和消息资源文件),我们介绍了如何使用Struts 2 head, form, textfield 控件和key属性。本教程将探索使用Struts 2 select, radio, checkbox, and checkboxlist form 控件
贴个本帖的地址,以免被爬:struts2官方 中文教程 系列九:Debugging Struts 即 http://www.cnblogs.com/linghaoxinpian/p/6916619.html
本章节将建立一个如下的页面

新建文件 edit.jsp、EditAction.java、src/model/State.java
并在/struts_basic/src/action/package.properties 添加如下内容:

后面中文被编码后的内容,Myeclipse的特性,具体是什么中文内容,参见上一张图(姓氏、名字、性别。。。)
修改struts.xml文件,添加edit的映射:

修改Person类,添加属性
package model;
public class Person {
private String firstName;
private String lastName;
private String email;
private int age;
private String sport;
private String residency;
private boolean over21;
private String carModel;
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String toString() {
return "First Name: " + getFirstName() + " Last Name: " + getLastName() +
" Email: " + getEmail() + " Age: " + getAge() ;
}
public String getSport(){
return "football";
}
public void setSport(String sport) {
this.sport = sport;
}
public String getResidency() {
return "zh";
}
public void setResidency(String residency) {
this.residency = residency;
}
public boolean isOver21() {
return true;
}
public void setOver21(boolean over21) {
this.over21 = over21;
}
public String getCarModel() {
return "Ford";
}
public void setCarModel(String carModel) {
this.carModel = carModel;
}
}
edit.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s" %>
<!DOCTYPE>
<html>
<head>
<title>edit.jsp</title>
</head>
<body>
<s:form action="edit">
<s:textfield key="personBean.firstName"/>
<s:textfield key="personBean.lastName"/>
<s:textfield key="personBean.gender"/>
<s:select key="personBean.sport" list="sports"></s:select>
<s:radio key="personBean.gender" list="genders" />
<s:select key="personBean.residency" list="states" listKey="stateAbbr" listValue="stateName"/>
<s:checkbox key="personBean.over21" />
<s:checkboxlist key="personBean.carModel" list="carModelAvailable" />
</s:form>
</body>
</html>
EditAction.jsp
package action; import java.util.ArrayList;
import java.util.List; import com.opensymphony.xwork2.ActionSupport; import model.Person;
import model.State; public class EditAction extends ActionSupport { private Person personBean;
public String execute(){
personBean=new Person();
return SUCCESS;
}
//----------getter-setter start------------
public Person getPersonBean() {
return personBean;
} public void setPersonBean(Person personBean) {
this.personBean = personBean;
}
//----------getter-setter end------------ //获取 "运动列表"
public List<String> getSports(){
List<String> list=new ArrayList<String>();
list.add("basketball");
list.add("baseball");
list.add("football");
return list;
} //获取 "性别类表"
public String[] getGenders(){
return new String[]{"男","女","保密"};
} //获取 "居住地列表"
public List<State> getStates(){
List<State> list=new ArrayList<State>();
list.add(new State("zh","中国"));
list.add(new State("en", "English")); return list;
} //是否检查 "满21岁"
public boolean getOver21(){
return true;
} //获取"汽车模型列表"
public List<String> getCarModelAvailable(){
List<String> list=new ArrayList<String>();
list.add("Ford");
list.add("Chrysler");
return list;
}
}
Struts2 select 标签
<s:select key="personBean.sport" list="sports"></s:select>
我们使用了在第七章的教程中讨论的key属性。key属性由Struts 2框架用于生成其他属性的值(例如name和label)。我们还使用与EditAction类相关联的属性文件(这里我们使用的是包级别的属性文件package.properties)
注意,Struts 2表单标记有很多属性,其中大部分都反映了与标记相关的HTML属性。您可以通过查阅Struts 2的文档来了解Struts 2表单标记的所有属性。
list属性的值被框架用来确定要调用的操作类的方法,以便创建选项值。在我们的示例应用程序中,“sports”的list属性值在调用类EditAction的getSports方法得到结果。该方法返回一个包含“football”, “baseball”, and “basketball”的字符串数组。这些值用于在select标签中创建选项标签。
Struts 2框架决定通过使用key属性的值来调用personBean对象上的方法来预先选择哪个选项。因为key属性的值是“personBean.sport”。这个框架调用了personBean对象的getSport方法()。如果该方法返回的值匹配一个选项值(我们返回的是football),那么该选项将被标记为“选中”。
Struts2 Radio标签
<s:radio key="personBean.gender" list="genders" />
同样,key属性的值决定了name和label性的值。标签的文本来自于属性文件(package.properties)。就像Struts 2的select标签一样,Struts 2 Radio标签的list属性使框架调用了EditAction类的genders方法。返回的字符串对象数组用于创建单独的单选按钮。
Struts 2 select标签-对象支持
您可能需要创建一个Struts 2 select标签,其中显示给用户的值与实际的值是不同的(即key-value)。在示例应用程序中,用户的居住地存储为两个字母的缩写(如value=“zh”),在页面上应该显示完整的名称(中国),即如下效果:
<tr>
<td class="tdLabel">
<label for="save_personBean_residency" class="label">State resident:</label>
</td>
<td>
<select name="personBean.residency" id="save_personBean_residency">
<option value="zh">中国</option>
<option value="en">English</option>
</select>
</td>
</tr>
要在Struts 2中创建这样一个选择框,您可以使用以下代码:
<s:select key="personBean.residency" list="states" listKey="stateAbbr" listValue="stateName" />
list值告诉框架调用EditAction类的getStates方法。该方法返回State象的ArrayList。每个State对象都有getStateAbbr和getStateName方法。listKey属性告诉框架使用调用getStateAbbr方法返回的值作为HTML选项标签的value属性的值,以及通过调用getStateName方法返回给用户显示的值。
State类
package model;
public class State {
private String stateAbbr; //实际值
private String stateName; //显示值
public State(String stateAbbr,String stateName){
this.stateAbbr=stateAbbr;
this.stateName=stateName;
}
public String getStateAbbr() {
return stateAbbr;
}
public void setStateAbbr(String stateAbbr) {
this.stateAbbr = stateAbbr;
}
public String getStateName() {
return stateName;
}
public void setStateName(String stateName) {
this.stateName = stateName;
}
}
通过调用personBean对象的getResidency 方法返回的值,确定选择标记的选项标记中哪些是被选中的。在我们的例子中,由于getresi等号返回“KS”,所以其value属性等于“zh”的选项标记被标记为被选中。
Struts 2 Checkbox 标签
<s:checkbox key="personBean.over21" />
Struts 2复选框标签用于创建HTML复选框标签。key属性的值告诉框架需要调用什么方法来确定复选框是否被选中。这个方法是isOver21(第66行)
当表单被提交并且复选框没有选中时,复选框将没有任何值(这是HTML表单的工作方式)。由于Struts 2框架需要更新personBean的over21实例字段的值,因为检查框没有值null,所以框架需要一种方法来确定在表单提交之后复选框是否被选中。如果您查看由Struts 2 checkbox标签创建的HTML代码,您将看到它创建了一个与 personBean.over21 相关联的隐藏字段。当Struts 2框架拦截该表单的提交时,它将使用这个隐藏的表单字段来检查相关的复选框字段是否存在于表单数据中。如果该复选框字段不存在,那么Struts 2框架将知道将personBean对象的over21实例变量的值更新为false。
struts2 Checkboxlist(复选框)标签
<s:checkboxlist key="personBean.carModels" list="carModelsAvailable" />
checkboxlist标签中的list属性值告诉Struts 2框架,要调用哪个方法来获得汽车模型列表。在这个示例应用程序中,框架将调用EditAction类的getCarModelsAvailable方法。该方法返回一个字符串数组。对于数组的每个元素,Struts 2框架创建一个复选框(包括上面所描述的相关隐藏字段)。checkboxlist标签中的key属性值告诉Struts 2框架调用personBean对象的getCarModels方法(与前面都一样),list属性值是调用EditAction类的getCarModelsAvailable方法(第57行),同理上面的标签无区别。
总结
还有其他一些Struts 2表单控件,您应该研究一下。如果您需要更多关于Struts 2表单标记的信息,请参考Struts 2的文档,http://stru.apache.org。
struts2官方 中文教程 系列十:Form标签的更多相关文章
- struts2官方 中文教程 系列十二:控制标签
介绍 struts2有一些控制语句的标签,本教程中我们将讨论如何使用 if 和iterator 标签.更多的控制标签可以参见 tags reference. 到此我们新建一个struts2 web 项 ...
- struts2官方 中文教程 系列十四:主题Theme
介绍 当您使用一个Struts 2标签时,例如 <s:select ..../> 在您的web页面中,Struts 2框架会生成HTML,它会显示外观并控制select控件的布局.样式和 ...
- struts2官方 中文教程 系列十一:使用XML进行表单验证
在本教程中,我们将讨论如何使用Struts 2的XML验证方法来验证表单字段中用户的输入.在前面的教程中,我们讨论了在Action类中使用validate方法验证用户的输入.使用单独的XML验证文件让 ...
- struts2官方 中文教程 系列七:消息资源文件
介绍 在本教程中,我们将探索使用Struts 2消息资源功能(也称为 resource bundles 资源绑定).消息资源提供了一种简单的方法,可以将文本放在一个视图页面中,通过应用程序,创建表单字 ...
- struts2官方 中文教程 系列九:Debugging Struts
介绍 在Struts 2 web应用程序的开发过程中,您可能希望查看由Struts 2框架管理的信息.本教程将介绍两种工具,您可以使用它们来查看.一个工具是Struts 2的配置插件,另一个是调试拦截 ...
- struts2官方 中文教程 系列八:异常处理
在本教程中,我们将探讨如何启用Struts 2框架处理web应用程序生成的任何未捕获的异常.Struts 2提供了健壮的异常处理,包括能够自动记录任何未捕获的异常,并将用户重定向到错误web页面. 贴 ...
- struts2官方 中文教程 系列十三:利用通配符选择方法
介绍 在本教程中,我们将介绍如何在struts.xml中配置action节点以达到仅使用一个action节点将几个不同的url关联到特定action类的特定方法.这样做的目的是减少struts.xml ...
- struts2官方 中文教程 系列三:使用struts2 标签 tag
避免被爬,先贴上本帖地址:struts2 官方系列教程一:使用struts2 标签 tag http://www.cnblogs.com/linghaoxinpian/p/6901316.html 本 ...
- struts2官方 中文教程 系列五:处理表单
先贴个本帖的地址,免得其它网站被爬去了struts2教程 官方系列五:处理表单 即 http://www.cnblogs.com/linghaoxinpian/p/6906298.html 下载本章 ...
随机推荐
- 用一个实际例子理解Docker volume工作原理
要了解Docker Volume,首先我们需要理解Docker文件系统的工作原理.Docker镜像是由多个文件系统的只读层叠加而成.当一个容器通过命令docker run启动时,Docker会加载只读 ...
- ABAP正则表达式 vs SPLIT INTO
需求: 把如下通过"/"连接起来的三个字符串分别解析出来. 传统的做法见下图第98行的function module SKWF_UTIL_IO_FIND_BY_KEY: 这个fun ...
- Android(java)学习笔记39:Android 修改字体
首先如果android内部自带的字体不是我们需要的字体,那我们就需要字体文件导入到android开发工程中,下午我们详细讲述: 1.我们首先分析知道,我想要TextView控件中文字的字体是:华文楷体 ...
- STL - priority_queue(优先队列)
参考:http://www.cnblogs.com/xzxl/p/7266404.html 一.基本定义: 优先队列容器与队列一样,只能从队尾插入元素,从队首删除元素.但是它有一个特性,就是队列中最大 ...
- hibermate一对一关联
在hibernate.cfg.xml配置<mapping class="oneToOne.IDCard" />,以及实体类的get和set方法省略了. User类 @E ...
- PSROIAlign的代码实现
https://github.com/afantideng/R-FCN-PSROIAlign
- Struts2学习笔记——Struts2搭建和第一个小程序
1.新建web项目 2.配置Struts2核心过滤器 (1)打开web.xml文件,做以下配置: <?xml version="1.0" encoding="UTF ...
- 四、IntelliJ IDEA 之 HelloWorld 项目创建及相关配置文件介绍
咱们通过创建一个 Static Web 项目大致了解了 IntelliJ IDEA 的使用界面,接下来,趁着这个热乎劲,咱们来创建第一个 Java 项目“HelloWorld”,进入如下界面: 如上图 ...
- asp.net 过滤器
asp.net 制作过滤器原理:重写ASP.net管道事件 1.通过HttpApplicationFactory创建一个HttpApplication对象,负责处理整个请求. 2.调用ProcessR ...
- sql server 语句获取表的描述,主键等等
sql语句添加表,字段的描述 --添加表的描述 --格式如右:execute sp_addextendedproperty 'MS_Description','字段备注信息','user','dbo' ...