19.Struts2_表单标签

来源:互联网 发布:程序员 多个显示器 编辑:程序博客网 时间:2024/06/01 10:32

注意:表单标签(在jsp中使用前需要引入标签库)

概述

表单标签将在 HTML 文档里被呈现为一个表单元素

使用表单标签的优点:
  • 表单回显
  • 对页面进行布局和排版
标签的属性可以被赋值为一个静态的值或一个 OGNL 表达式. 如果在赋值时使用了一个 OGNL 表达式并把它用 %{} 括起来, 这个表达式将会被求值.

表单标签的共同属性

该属性只在没有使用 simple 主题时才可以使用.

1.form 标签

form 标签用来呈现 HTML 语言中的表单元素

默认情况下, form 标签将被呈现为一个表格形式的 HTML 表单. 嵌套在 form 标签里的输入字段将被呈现为一个表格行. 每个表格行由两个字段组成, 一个对应着行标, 一个对应着输入元素. 提交按钮将被呈现为一个横跨两列单元格的行

2.textfield, password, hidden 标签

textfield 标签将被呈现为一个输入文本字段, password 标签将被呈现为一个口令字段, hidden 标签将被呈现为一个不可见字段.

password 标签扩展自 textfield 标签, 多了一个 showPassword 属性. 该属性时布尔型. 默认值为 false, 它决定着在表单回显时是否显示输入的密码.

3.submit 标签

submit 标签将呈现为一个提交按钮. 根据其 type 属性的值. 这个标签可以提供 3 种呈现效果:
        input: <input type=“submim” …/>        button: <input type=“button” …/>        image: <input type=“image” />


4.textarea 标签

textarea 标签将呈现为一个 HTML 文本域元素


练习1:

项目结构:


步骤一:导入struts2所需要的包

步骤二:web.xml
<?xml version="1.0" encoding="UTF-8"?>  <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">    <display-name>Struts2-2</display-name>    <welcome-file-list>      <welcome-file>index.html</welcome-file>      <welcome-file>index.htm</welcome-file>      <welcome-file>index.jsp</welcome-file>      <welcome-file>default.html</welcome-file>      <welcome-file>default.htm</welcome-file>      <welcome-file>default.jsp</welcome-file>    </welcome-file-list>        <!-- 配置过滤器类 -->    <filter>          <filter-name>struts2</filter-name>         <!--  从struts-2.1.3以后,org.apache.struts2.dispatcher.FileDispatcher值被标注为过时,现在是如下写法 -->          <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>      </filter>      <!-- 过滤器用来初始化struts2并处理所有web请求 -->      <filter-mapping>          <filter-name>struts2</filter-name>          <url-pattern>/*</url-pattern>      </filter-mapping>        </web-app>  

步骤三:form.jsp(需要导入标签库)
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"    pageEncoding="ISO-8859-1"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><%@ taglib prefix="s" uri="/struts-tags" %><html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Insert title here</title></head><body><!--表单标签:1.使用和html的form标签的感觉差不多2.Struts2的form标签会生成一个table,以进行自动的排版3.可以对表单提交的值进行回显:从栈顶对象开始匹配属性,并吧匹配的属性值赋到对饮的标签的value中,若栈顶对象没有对应的属性,则依次行下栈相对应的属性。--><s:form action="save"><s:hidden name="userid"></s:hidden><s:textfield name="username" label="username1"></s:textfield><s:password name="password" label="password1"></s:password><s:textarea name="desc" label="desc1"></s:textarea><s:submit></s:submit></s:form></body></html>

步骤四:testtag.java
package struts2;import com.opensymphony.xwork2.ActionContext;public class testtag {private String userid;private String username;private String password;private String desc;public String getUserid() {return userid;}public void setUserid(String userid) {this.userid = userid;}public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}public String getDesc() {return desc;}public void setDesc(String desc) {this.desc = desc;}public String save() {System.out.println(this);testtag ua=new testtag();ua.setUserid("10001");ua.setUsername("dd");ua.setPassword("pp");ua.setDesc("22");ActionContext.getContext().getValueStack().push(ua);return "input";}@Overridepublic String toString() {return "testtag [userid=" + userid + ", username=" + username + ", password=" + password + ", desc=" + desc+ "]";}}

步骤五:struts.xml
<!DOCTYPE struts PUBLIC          "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"          "http://struts.apache.org/dtds/struts-2.0.dtd">            <struts> <package name="struts" namespace="" extends="struts-default">   <action name="save" class="struts2.testtag" method="save"><result name="input">/form.jsp</result></action></package>  </struts>

在form.jsp页面中输入aa,qq,11
结果显示:


结论:
表单标签:
1.使用和html的form标签的感觉差不多
2.Struts2的form标签会生成一个table,以进行自动的排版
3.可以对表单提交的值进行回显:从栈顶对象开始匹配属性,并吧匹配的属性值赋到对饮的标签的value中,若栈顶对象没有对应的属性,则依次行下栈相对应的属性。


5.checkbox 标签

checkbox 标签将呈现为一个 HTML 复选框元素. 该复选框元素通常用于提交一个布尔值.

当包含着一个复选框的表单被提交时, 如果某个复选框被选中了, 它的值将为 true, 这个复选框在 HTTP 请求里增加一个请求参数.但如果该复选框未被选中, 在请求中就不会增加一个请求参数.

checkbox 标签解决了这个局限性, 它采取的办法是为单个复选框元素创建一个配对的不可见字段
代码:
<s:checkbox name="married" label="married" ></s:checkbox>


查看源文件查看源文件
<input type="checkbox" name="merried" value="true" checked="checked" id="save_merried"/><input type="hidden" id="__checkbox_save_merried" name="__checkbox_merried" value="true" /> <label for="save_merried" class="checkboxLabel">是否已婚</label> </td>

6.radio标签

radio标签将呈现一组单选按钮,单选按钮的个数与程序员通过list属性提供的选项的个数相同。
一般地,使用radio标签实现“多对一”,对于“真/假”则使用checkbox标签。
示例:
<s:radio name="gender"list="#{'1':'Male','0':'Female'}" label="Gender"></s:radio>
结果显示:


7.checkboxlist标签

checkboxlist 标签将呈现一组多选框.


form.jsp:
</head><body><% List<City> cities=new ArrayList<City>();cities.add(new City(1,"AA"));cities.add(new City(2,"BB"));cities.add(new City(3,"CC"));cities.add(new City(4,"DD"));request.setAttribute("city1",cities);%><s:form action="save">    <s:checkboxlist name="city777" list="#request.city1" listKey="cityId" listValue="cityName" label="City6"></s:checkboxlist>    <s:submit></s:submit></s:form></body></html>

City.java:
package struts2;public class City {private Integer cityId;private StringcityName;public Integer getCityId() {return cityId;}public void setCityId(Integer cityId) {this.cityId = cityId;}public String getCityName() {return cityName;}public void setCityName(String cityName) {this.cityName = cityName;}//有参构造器public City(Integer cityId, String cityName) {super();this.cityId = cityId;this.cityName = cityName;}//无参构造器public City() {}}

testtag.java:
package struts2;import java.util.Map;import org.apache.struts2.interceptor.RequestAware;import com.opensymphony.xwork2.ActionContext;public class testtag implements RequestAware {private String userid;private String username;private String password;private String desc;private boolean married;public String getUserid() {return userid;}public void setUserid(String userid) {this.userid = userid;}public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}public String getDesc() {return desc;}public void setDesc(String desc) {this.desc = desc;}public boolean isMarried() {return married;}public void setMerried(boolean married) {this.married = married;}public String save() {System.out.println(this);testtag ua=new testtag();ua.setUserid("10001");ua.setUsername("dd");ua.setPassword("pp");ua.setDesc("22");ActionContext.getContext().getValueStack().push(ua);return "input";}@Overridepublic String toString() {return "testtag [userid=" + userid + ", username=" + username + ", password=" + password + ", desc=" + desc+ ", married=" + married + "]";}private Map<String,Object> request3;@Overridepublic void setRequest(Map<String, Object> arg0) {// TODO Auto-generated method stubthis.request3=arg0;}}

运行结果:


8.select标签

select 标签将呈现一个 select 元素.


9.optiongroup 标签

optiongroup 标签对 select 元素所提供的选项进行分组. 每个选项有它自己的来源.


标签8.9的实例:
<s:select list="{11,12,13,14,15}"headerKey=""headerValue="qingxuanze"name="age"label="Age"><s:optgroup  label="21-30" list="#{21:21,22:333}"></s:optgroup><s:optgroup  label="31-40" list="#{31:31}"></s:optgroup>




页面显示:


总结:

本节练习代码:

1.form.jsp
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"    pageEncoding="ISO-8859-1"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><%@ taglib prefix="s" uri="/struts-tags" %><%@ page import="java.util.ArrayList" %><%@ page import="java.util.List" %><%@ page import="struts2.City" %><html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Insert title here</title></head><body><% List<City> cities=new ArrayList<City>();cities.add(new City(1,"AA"));cities.add(new City(2,"BB"));cities.add(new City(3,"CC"));cities.add(new City(4,"DD"));request.setAttribute("city1",cities);%><!--表单标签:1.使用和html的form标签的感觉差不多2.Struts2的form标签会生成一个table,以进行自动的排版3.可以对表单提交的值进行回显:从栈顶对象开始匹配属性,并吧匹配的属性值赋到对饮的标签的value中,若栈顶对象没有对应的属性,则依次行下栈相对应的属性。--><s:form action="save"><s:hidden name="userid"></s:hidden><s:textfield name="username" label="username1"></s:textfield><s:password name="password" label="password1"></s:password><s:textarea name="desc" label="desc1"></s:textarea><s:checkbox name="married" label="married1" ></s:checkbox><s:radio name="gender"list="#{'1':'Male','0':'Female'}" label="Gender"></s:radio><s:checkboxlist name="city777" list="#request.city1" listKey="cityId" listValue="cityName" label="City6"></s:checkboxlist><s:select list="{11,12,13,14,15}"headerKey=""headerValue="qingxuanze"name="age"label="Age"><s:optgroup  label="21-30" list="#{21:21,22:333}"></s:optgroup><s:optgroup  label="31-40" list="#{31:31}"></s:optgroup></s:select><s:submit></s:submit></s:form></body></html>

2.testtag.java
package struts2;import java.util.Arrays;import java.util.Map;import org.apache.struts2.interceptor.RequestAware;import com.opensymphony.xwork2.ActionContext;public class testtag implements RequestAware {private String userid;private String username;private String password;private String desc;private boolean married;private String gender;private String[] city777;private String age;public String getUserid() {return userid;}public void setUserid(String userid) {this.userid = userid;}public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}public String getDesc() {return desc;}public void setDesc(String desc) {this.desc = desc;}public boolean isMarried() {return married;}public void setMerried(boolean married) {this.married = married;}public String getGender() {return gender;}public void setGender(String gender) {this.gender = gender;}public String[] getCity777() {return city777;}public void setCity777(String[] city777) {this.city777 = city777;}public String getAge() {return age;}public void setAge(String age) {this.age = age;}public String save() {System.out.println(this);testtag ua=new testtag();ua.setUserid("10001");ua.setUsername("dd");ua.setPassword("pp");ua.setDesc("22");ActionContext.getContext().getValueStack().push(ua);return "input";}@Overridepublic String toString() {return "testtag [userid=" + userid + ", username=" + username + ", password=" + password + ", desc=" + desc+ ", married=" + married + ", gender=" + gender + ", city777=" + Arrays.toString(city777) + ", age="+ age + "]";}@Overridepublic void setRequest(Map<String, Object> arg0) {// TODO Auto-generated method stub}}

3.City.java
package struts2;public class City {private Integer cityId;private StringcityName;public Integer getCityId() {return cityId;}public void setCityId(Integer cityId) {this.cityId = cityId;}public String getCityName() {return cityName;}public void setCityName(String cityName) {this.cityName = cityName;}//有参构造器public City(Integer cityId, String cityName) {super();this.cityId = cityId;this.cityName = cityName;}//无参构造器public City() {}}

运行form.jsp,
输入:passwod1为qq

页面显示:(回显的结果)



(form.jsp中checkboxlist标签中的name属性


testtag.java中的属性city777

)


原创粉丝点击