SSH笔记-Struts2的表单标签

本文详细介绍了Struts2中的表单标签,包括其优点、必须参数及各种标签属性。如<form>标签的action、method、namespace等,还有<input>、<textarea>、<select>等标签的特性和用途。强调了标签属性的重要性,如listKey、listValue,并提醒注意数据源应为可遍历对象,确保正确映射Action属性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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、项目目录
项目目录

注意事项

  1. 标签的属性名不要写错,特别是listKey、listValue,该大写的大写,不然会导致action拿到的是一个对象,而不是数值(因为如果listKey和listValue为空的时候Struts2会自己用对象填补对应的数值)
  2. 使用<s:checkbox><s:checkboxlist><s:radio><s:select>这些标签的时候,数据源要是可遍历对象,最好是List
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值