介绍

在本教程中,我们将探索其他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标签的更多相关文章

  1. struts2官方 中文教程 系列十二:控制标签

    介绍 struts2有一些控制语句的标签,本教程中我们将讨论如何使用 if 和iterator 标签.更多的控制标签可以参见 tags reference. 到此我们新建一个struts2 web 项 ...

  2. struts2官方 中文教程 系列十四:主题Theme

    介绍 当您使用一个Struts 2标签时,例如 <s:select ..../>  在您的web页面中,Struts 2框架会生成HTML,它会显示外观并控制select控件的布局.样式和 ...

  3. struts2官方 中文教程 系列十一:使用XML进行表单验证

    在本教程中,我们将讨论如何使用Struts 2的XML验证方法来验证表单字段中用户的输入.在前面的教程中,我们讨论了在Action类中使用validate方法验证用户的输入.使用单独的XML验证文件让 ...

  4. struts2官方 中文教程 系列七:消息资源文件

    介绍 在本教程中,我们将探索使用Struts 2消息资源功能(也称为 resource bundles 资源绑定).消息资源提供了一种简单的方法,可以将文本放在一个视图页面中,通过应用程序,创建表单字 ...

  5. struts2官方 中文教程 系列九:Debugging Struts

    介绍 在Struts 2 web应用程序的开发过程中,您可能希望查看由Struts 2框架管理的信息.本教程将介绍两种工具,您可以使用它们来查看.一个工具是Struts 2的配置插件,另一个是调试拦截 ...

  6. struts2官方 中文教程 系列八:异常处理

    在本教程中,我们将探讨如何启用Struts 2框架处理web应用程序生成的任何未捕获的异常.Struts 2提供了健壮的异常处理,包括能够自动记录任何未捕获的异常,并将用户重定向到错误web页面. 贴 ...

  7. struts2官方 中文教程 系列十三:利用通配符选择方法

    介绍 在本教程中,我们将介绍如何在struts.xml中配置action节点以达到仅使用一个action节点将几个不同的url关联到特定action类的特定方法.这样做的目的是减少struts.xml ...

  8. struts2官方 中文教程 系列三:使用struts2 标签 tag

    避免被爬,先贴上本帖地址:struts2 官方系列教程一:使用struts2 标签 tag http://www.cnblogs.com/linghaoxinpian/p/6901316.html 本 ...

  9. struts2官方 中文教程 系列五:处理表单

    先贴个本帖的地址,免得其它网站被爬去了struts2教程 官方系列五:处理表单  即 http://www.cnblogs.com/linghaoxinpian/p/6906298.html 下载本章 ...

随机推荐

  1. Windows 系统 Unicode 文件名操作(新建、重命名、枚举、复制)全攻略

    常见的那些文件操作函数都不支持,于是为了达到目的,需要各种方法配合,应该是不如其他语言方便.我只是想看看Perl到底是否适合做这件事,于是折腾了一回. 文件的建立: 模块:Win32 Code: [全 ...

  2. Kubernetes Helm入门指南

    什么是Helm?这可不是暗黑破坏神里装备的名称:头盔,而是Kubernetes的一个包管理工具,用来简化Kubernetes应用的部署和管理.我们Helm和Kubernetes的关系,我们可以理解成y ...

  3. csu 1965

    Description You are a boss who has N employers. One day, you have a message and you want to tell it ...

  4. Positioning-Based Photo Retrieval

    MMAI 2015 FINAL PROJECT   To Know Where We Are: Positioning-based Photo Retrieval   2015/12/16 Updat ...

  5. Android学习笔记_55_Tween动画 (渐变、缩放、位移、旋转)

    Android 平台提供了两类动画. 一类是Tween动画,就是对场景里的对象不断的进行图像变化来产生动画效果(旋转.平移.放缩和渐变).第二类就是 Frame动画,即顺序的播放事先做好的图像,与gi ...

  6. 读取静态的json文件

    <!DOCTYPE html><html><head><meta http-equiv="Content-Type" content=&q ...

  7. Vue nodejs商城-地址模块

    一.地址列表渲染 ,则不可以点击. src/views/Cart.vue <a class="btn btn--red" v-bind:class="{'btn-- ...

  8. 7.Vue-Quill-Editor图片插入自定义

    Vue-Quill-Editor图片插入自定义 前言: 因为在项目中前端采用了Vue来实现,正好用到了富文本编辑器这一块,于是,经过技术上的选择,决定使用Vue-Quill-Editor. 使用的过程 ...

  9. Struts2 第一讲 -- Struts2开发前奏

    我们在学习Struts之前,先来复习一下Servlet,众所周知Servlet是JavaWeb的三大组件.我们发送一个请求,这个请求交给Servlet处理,Servlet将处理的结果返还给浏览器.每个 ...

  10. WKWebView简单使用及关于缓存的问题

    Xcode8发布以后,编译器开始不支持IOS7,所以很多应用在适配IOS10之后都不在适配IOS7了,其中包括了很多大公司,网易新闻,滴滴出行等.因此,我们公司的应用也打算淘汰IOS7.支持到IOS8 ...