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 下载本章 ...
随机推荐
- C/C++ 修改控制台程序文字颜色
可以修改前景色(字体颜色)和背景色. 示例代码如下: #include <iostream> #include <Windows.h> //需要引用Windows.h usin ...
- python:类与对象命名空间、面对对象的组合用法
1,类里可以定义两种属性: #静态属性 #静态属性就是直接在类中定义的变量 #动态属性 #动态属性就是定义在类中的方法 class Course: language = ['Chinese']#静态属 ...
- 【[SCOI2009]粉刷匠】
这好像是个暴力? 但是跑的挺快的 我们设\(dp[i][j][k]\)表示在第\(i\)行我们最远染到的位置是\(j\),这一行上一共染了\(k\)次最多能染对多少个格子 理性分析一下啊,每一行最多也 ...
- 【[SDOI2010]粟粟的书架】
第一问的做法好像不太一样 首先第二问非常简单,直接在主席树上二分就好了,单次查询的复杂度\(O(logn)\) 第一问并没有想到有二分这种神仙操作,依旧用的是主席树 我们可以对矩阵建出主席树,也就是像 ...
- PHP设计模式——责任链模式
<?php /** * 责任链模式 * 组织一个对象链处理一个请求,每个处理对象知道自己能处理哪些请求,并把自己不能处理的请求交下一个处理对象 * * 适用场景: * 1.有多个对象可以处理同一 ...
- 【Calculus 微积分の一些个人理解】
微积分 微积分(Calculus)是高等数学中研究函数的微分(Differentiation).积分(Integration)以及有关概念和应用的数学分支.它是数学的一个基础学科.内容主要包括极限.微 ...
- Android学习笔记_JNI hello world
1.需要准备的工具,eclipse,cdt(c++)插件,cygwin(unix)和 android ndk. 在cygwin的etc目录下将ndk的路径引入到profile文件中,可以在cygwin ...
- bat 批处理变量
@echo off setlocal enabledelayedexpansion d: rem 更改d:\bat为当前目录 cd /d bat rem 变量使用 + echo %a% echo %C ...
- JavaEE权限管理系统的搭建(八)--------角色的增删改
如下图所示,添加角色的同时,要给角色分配权限菜单,关于权限数的显示,我实现了两种方式,普通方式和Ztree方式, 普通方式展示树: 主要代码部分: /** * 进入角色添加页面 * @param mo ...
- AngularJS 使用 even 和 odd 表格
<!DOCTYPE html><html><head><meta http-equiv="Content-Type" content=&q ...