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 下载本章 ...
随机推荐
- typescript import需要注意的地方以及一点疑问
在使用 import {XXX} from './xxx'的时候,到浏览器上会报错,提示找不到xxx文件,原因在于没有加入后缀,这时候要写成import {XXX} from './xxx.js'注意 ...
- 两个list相加
>>> a = ['] >>> b = ['] >>> a+b ['] >>> a = [1,2] >>> b ...
- 【转】Java类加载原理解析
原链接 1 基本信息 每个java开发人员对java.lang.ClassNotFoundExcetpion这个异常肯定都不陌生,这背后就涉及到了java技术体系中的类加载. Java的类加载机制是j ...
- CF821E 【Okabe and El Psy Kongroo】
首先我们从最简单的dp开始 \(dp[i][j]=dp[i-1][j]+dp[i-1][j+1]+dp[i-1][j-1]\) 然后这是一个O(NM)的做法,肯定行不通,然后我们考虑使用矩阵加速 \( ...
- 【luogu P2455 [SDOI2006]线性方程组】 题解
题目链接:https://www.luogu.org/problemnew/show/P2455 无解:最后一列对应元素不为0,前面全是0. 无穷解:一行全是0. 嗯...在消元过程中不要直接拿矩阵元 ...
- 让网页显示ajax的查询数据
今天下午做一个项目小练习.需要把查询日志的内容显示到网页上来.一开始陷入了一个误区. 一直以来我这个小项目需要访问ashx来生成html的代码.后台用的Razor模板引擎. 刚开始显示用户列表时.因为 ...
- Angularjs基础(八)
AngularJS Bootstrap AngularJS 的首选样式表是 Twitter Bootstrap ,Twitter Bootstrap 是目前最受欢迎的前端框架 Bootstrap 你可 ...
- Javascript中的内存泄漏
最新博客站点:欢迎来访 一.内存泄漏 由于某些原因不再需要的内存没有被操作系统或则空闲内存池回收.编程语言中有多种管理内存的方式.这些方式从不同程度上会减少内存泄漏的几率,高级语言嵌入了 ...
- SAP HCM 前台字段显示与隐藏
https://blog.csdn.net/qq_29475437/article/details/82107452 1.在hcm屏幕上 确定 程序名称 与屏幕编号 2.SM30 输入 T588M,如 ...
- 19-2-28Python的了解以及变量、常量、数据类型、if语句的结构
Python目前有两个大版本,一个是2.x版本,一个是3.x版本. Python2x:源码冗余,混乱:且默认ASCII码,只能识别英文字母数字. Python3x:源码整合,美观,清晰,简单.默认ut ...