1、表单标签<s:form>
将会在页面上呈现一个表单元素
2、优点:
(1)回显,提交或跳转到同一个页面的时候,可以便捷地把提交前地数据作为默认值显示
(2)对页面进行排版,<s:form>
标签会自动用html的table标签排版
3、<s:form>
必须参数
属性及用途
action:提交表单是将要触发的action
method:表单提交方法
namespace:提交便当将要触发action所在命名空间
onsubmit:js的onsubmit属性
label:指定表单元素在页面中的行标
name:html name属性,将会被映射到一个Action属性
value:指定的表单元素值
cssClass:用于呈现元素的css类,html元素中的class属性 如:<input type='text' class='css类名>
cssStyle:用于呈现元素的css样式,html元素中的type属性 如:<input type='text' class='css类名>
title:指定html title属性
disabled:指定html的disabled属性,html中禁用某个元素用,用了之后,这个元素不可编辑,值不会被提交
required*:这个属性表明当前行标是否要加上星号,true/false
labelPostition:行标位置,top/left
requiredposition:标签位置,left/right
4、<s:textfield>
相当于html的<input type="text">
5、<s:textfield><s:password><s:hidden>
的属性
属性及用途
maxlength:元素所能容纳字符最大个数,integer整型数据
readonly:元素是否可读
size:元素尺寸属性
6、<s:textarea>
的属性
属性及用途
cols: html cols属性
rows:html rows属性
wrap:html wap属性
readonly:元素是否可读
7、<s:checkbox>
呈现一个html的复选框元素,用于提交一个boolean值,还有要注意的是:action类里面对应这个元素的参数的初始值一定要为false
8、<s:radio>
单选按钮的标签,使用这个标签实现多选一
9、<s:select>
是一个select元素
属性及用途
emptyOption:在选项列表里面,第一个选项要不要插入空白选项,true/false
headerKey:选项列表中第一个选项的键
headerValue:选项列表中第一个选项的值
list:充当选项来源的可遍历对象,用List<Object>
数组对象
listKey:提供选项对象值的键
listValue:提供选项对象的值
multiple:是否允许多选,true/false
size:同事显示在选项框的个数
10、<s:optgroup>
对应select元素提供的选项进行分组,每个<s:optgroup>
都有自己的来源
属性及用途
list:充当选项来源的可遍历对象
listKey:提供选项对象值的键
listValue:提供选项对象的值
11、<s:checklist>
呈现一组多选框
属性及用途
list:充当选项来源的可遍历对象
listKey:提供选项对象值的键
listValue:提供选项对象的值
注意:如果提供的多选框的选项一个都没有选中,则相对应的属性将赋值为一个空数组
12、struts.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<constant name="struts.action.extension" value="action,do,"></constant>
<constant name="struts.enable.DynamicMethodInvocation" value="true"></constant>
<package name="default" namespace="/" extends="struts-default">
<action name="TestForm" class="com.demo.sshtest.TestForm" method="doForm">
<result>/index1.jsp</result>
</action>
</package>
</struts>
13、index.jsp调用action进入表单页面,不然会导致<s:checkbox><s:checkboxlist><s:radio><s:select>
这些标签报错说来源为空(是报错空值,而不是报错说空数组,因为数据来源可以空数组但是不可以空值)
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<constant name="struts.action.extension" value="action,do,"></constant>
<constant name="struts.enable.DynamicMethodInvocation" value="true"></constant>
<package name="default" namespace="/" extends="struts-default">
<action name="TestForm" class="com.demo.sshtest.TestForm" method="doForm">
<result>/index1.jsp</result>
</action>
</package>
</struts>
14、表单页面index1.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page language="java" import="java.net.*,java.io.*,java.text.*, java.util.*" %>
<%@ taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
<script src="js/jquery-1.4.2.min.js"></script>
<script>
$(document).ready(function() {
var mydate = new Date();
var charactors="1234567890";
var value='',i;
for(j=1;j<=5;j++){
i = parseInt(10*Math.random());
value = value + charactors.charAt(i);
}
if($("#pid").val()==""||$("#pid").val()==null){
$("#pid").val(value); //月日時分秒+兩個隨機數
}
})
</script>
</head>
<body>
<!-- s:form标签会自动用html中的table标签包着s:form里面的标签 -->
<s:form action="TestForm" method="post">
<s:hidden name="userId" value="666"></s:hidden>
<!-- label用于在标签前面显示文字说明 -->
<s:password name="pswd" label="PSWD"></s:password>
<s:textarea name="pDesc" label="PDesc" value="222"></s:textarea>
<s:textfield id="pid" name="pid" label="PID"></s:textfield>
<s:textfield name="pName" label="PNAME" value="333"></s:textfield>
<s:checkbox name="checkbox" label="CheckBox"></s:checkbox>
<!-- 这里s:radio的list可以用 下面s:checkboxlist的ListIterator数组-->
<s:radio name="Gender" list="#{'1':'Male','2':'Female' }" label="Gender"></s:radio>
<s:checkboxlist name="checkboxlist" list="ListIterator" listKey="IteratorId" listValue="IteratorName" label="CheckBoxLIST"></s:checkboxlist>
<s:select name="selects" list="SelectIterator" listKey="selectsId" listValue="selectsName" headerKey="0" headerValue="please selcet" emptyOption="true" multiple="false" size="1" label="SELECT">
<!-- 这里的s:optgroup标签作用就是为select标签组的选项做分组操作,在全部选项下面增加显示对应的分组 -->
<s:optgroup label="1-2" list="#{1:'selects1',2:'selects2' }"></s:optgroup>
<s:optgroup label="3-4" list="#{3:'selects3',4:'selects4' }"></s:optgroup>
<s:optgroup label="5-6" list="#{5:'selects5',6:'selects6' }"></s:optgroup>
</s:select>
<s:submit></s:submit>
</s:form>
<br>
<s:debug></s:debug>
</body>
</html>
15、action类TestForm.java
package com.demo.sshtest;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.TreeMap;
public class TestForm {
public int pid = 0;//input type="text"
public String pName = "";//input type="text"
public String userId = "";//input type="hidden"
public String pswd = "";//input type="password"
public String pDesc = "";//input type="textarea"
public boolean checkbox = false;//input type="checkbox"
public String Gender = "";//input type="radio"
//Struts的checkbox标签组(循环添加多个checkbox)
//用于被标签组循环读取,循环创建html标签的时候,都用List装着
//因为<s:checkboxlist>和<s:select>这些标签都有listKey,listValue属性,用于读取对应key和value
public List<TestForm> ListIterator = new ArrayList<TestForm>();
public int IteratorId = 0;//用于被listKey使用
public String IteratorName = "";//用于被listValue使用
public List<Object> checkboxlist = new ArrayList<Object>();//用于回显时,存储标签数值
public int getPid() {
return pid;
}
public void setPid(int pid) {
this.pid = pid;
}
public String getpName() {
return pName;
}
public void setpName(String pName) {
this.pName = pName;
}
public String getUserId() {
return userId;
}
public void setUserId(String userId) {
this.userId = userId;
}
public String getPswd() {
return pswd;
}
public void setPswd(String pswd) {
this.pswd = pswd;
}
public String getpDesc() {
return pDesc;
}
public void setpDesc(String pDesc) {
this.pDesc = pDesc;
}
public boolean getCheckbox() {
return checkbox;
}
public void setCheckbox(boolean checkbox) {
this.checkbox = checkbox;
}
public String getGender() {
return Gender;
}
public void setGender(String gender) {
Gender = gender;
}
public int getIteratorId() {
return IteratorId;
}
public void setIteratorId(int iteratorId) {
IteratorId = iteratorId;
}
public String getIteratorName() {
return IteratorName;
}
public void setIteratorName(String iteratorName) {
IteratorName = iteratorName;
}
public List<Object> getCheckboxlist() {
return checkboxlist;
}
public void setCheckboxlist(List<Object> checkboxlist) {
this.checkboxlist = checkboxlist;
}
public List<TestForm> getListIterator() {
return ListIterator;
}
public void setListIterator(List<TestForm> listIterator) {
ListIterator = listIterator;
}
//下面四个参数是给<s:select>用的 跟上面checkbox的参数一样用法
//ListIterator <==> SelectIterator
//checkboxlist <==> selects
//IteratorId <==> selectsId
//IteratorName <==> selectsName
public String selectsId = "";
public String selectsName = "";
public List<Object> selects = new ArrayList<Object>();
public List<TestForm> SelectIterator = new ArrayList<TestForm>();
public List<Object> getSelects() {
return selects;
}
public void setSelects(List<Object> selects) {
this.selects = selects;
}
public String getSelectsId() {
return selectsId;
}
public void setSelectsId(String selectsId) {
this.selectsId = selectsId;
}
public String getSelectsName() {
return selectsName;
}
public void setSelectsName(String selectsName) {
this.selectsName = selectsName;
}
public List<TestForm> getSelectIterator() {
return SelectIterator;
}
public void setSelectIterator(List<TestForm> SelectIterator) {
this.SelectIterator = SelectIterator;
}
public TestForm(){}
public TestForm(int IteratorId,String IteratorName){
super();
this.IteratorId = IteratorId;
this.IteratorName = IteratorName;
}
public TestForm(String selectsId, String selectsName) {
super();
this.selectsId = selectsId;
this.selectsName = selectsName;
}
public String doForm(){
System.out.println("-----------------------------------------");
System.out.println(getPid()+"\r\n"
+"getpName():"+getpName()+"\r\n"
+"getPswd():"+getPswd()+"\r\n"
+"getUserId():"+getUserId()+"\r\n"
+"getpDesc():"+getpDesc()+"\r\n"
+"getCheckbox():"+getCheckbox()+"\r\n"
+"getGender():"+getGender()+"\r\n"
+"getIteratorId():"+getIteratorId()+"\r\n"
+"getIteratorName():"+getIteratorName()+"\r\n"
+"getCheckboxlist():"+getCheckboxlist()+"\r\n"
+"getSelectsId():"+getSelectsId()+"\r\n"
+"getSelectsName():"+getSelectsName()+"\r\n"
+"getSelectIterator():"+getSelectIterator()+"\r\n"
+"getSelects():"+getSelects());
System.out.println("-----------------------------------------");
//为<s:checkbox>添加数据
ListIterator.add(new TestForm(1,"list1"));
ListIterator.add(new TestForm(2,"list2"));
ListIterator.add(new TestForm(3,"list3"));
ListIterator.add(new TestForm(4,"list4"));
ListIterator.add(new TestForm(5,"list5"));
ListIterator.add(new TestForm(6,"list6"));
//为<s:select>添加数据
SelectIterator.add(new TestForm("1", "selects1"));
SelectIterator.add(new TestForm("2", "selects2"));
SelectIterator.add(new TestForm("3", "selects3"));
SelectIterator.add(new TestForm("4", "selects4"));
SelectIterator.add(new TestForm("5", "selects5"));
SelectIterator.add(new TestForm("6", "selects6"));
System.out.println("getSelectsId:"+getSelectsId());
System.out.println("getSelectsName:"+getSelectsName());
System.out.println("testIterator:"+getSelectIterator());
System.out.println("getSelects:"+getSelects());
return "success";
}
}
16、运行效果
17、项目目录
注意事项
- 标签的属性名不要写错,特别是listKey、listValue,该大写的大写,不然会导致action拿到的是一个对象,而不是数值(因为如果listKey和listValue为空的时候Struts2会自己用对象填补对应的数值)
- 使用
<s:checkbox><s:checkboxlist><s:radio><s:select>
这些标签的时候,数据源要是可遍历对象,最好是List