• form标签是struts2标签中一个重要标签:
  1. 可以生成html标签,使用起来和html的form标签差不多;
  2. Strut2的form标签会生成一个table,进行自动布局;
  3. 可以对表单提交的值进行回填:从栈顶对象开始配置属性,并把匹配的属性值赋到对应的标签value中,若栈顶对象没有对应的属性,则依次向下栈中找对应的属性。
  • 为什么form标签可以实现填充form表单?

示例:写一个这样的form页面,提交form页面后跳转到自身页面

form-tags.jsp页面:

  1. <%@ page language="java" contentType="text/html; charset=UTF-8"
  2. pageEncoding="UTF-8"%>
  3. <%@taglib prefix="s" uri="/struts-tags"%>
  4. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  5. <html>
  6. <head>
  7. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  8. <title>Insert title here</title>
  9. </head>
  10. <body>
  11. <s:debug></s:debug>
  12. <s:form action="formtags.action" method="post">
  13. <s:hidden name="userId" label="UserId"></s:hidden>
  14. <s:textfield name="userName" label="UserName"></s:textfield>
  15. <s:password name="password" label="Password"></s:password>
  16.  
  17. <s:submit name="submit" label="Submit"></s:submit>
  18. </s:form>
  19. </body>
  20. </html>

struts.xml

  1. <action name="formtags" class="com.dx.struts2.FormTagsAction" method="save">
  2. <result name="input">/form-tags.jsp</result>
  3. </action>

FormTagsAction页面:

  1. package com.dx.struts2;
  2.  
  3. import com.opensymphony.xwork2.ActionContext;
  4.  
  5. public class FormTagsAction {
  6. private String userId;
  7. private String userName;
  8. private String password;
  9.  
  10. public String getUserId() {
  11. return userId;
  12. }
  13.  
  14. public void setUserId(String userId) {
  15. this.userId = userId;
  16. }
  17.  
  18. public String getUserName() {
  19. return userName;
  20. }
  21.  
  22. public void setUserName(String userName) {
  23. this.userName = userName;
  24. }
  25.  
  26. public String getPassword() {
  27. return password;
  28. }
  29.  
  30. public void setPassword(String password) {
  31. this.password = password;
  32. }
  33.  
  34. public String save() {
  35. System.out.println(this);
  36.  
  37. FormTagsAction action=new FormTagsAction();
  38. action.setUserId("1001");
  39. action.setUserName("AAA");
  40. action.setPassword("pwd");
  41.  
  42. ActionContext.getContext().getValueStack().push(action);
  43.  
  44. return "input";
  45. }
  46.  
  47. @Override
  48. public String toString() {
  49. return "FormTagsAction [userId=" + userId + ", userName=" + userName + ", password=" + password + "]";
  50. }
  51. }

在浏览器中输入http://localhost:8080/Struts_01/form-tags.jsp在form表单中输入username:bb,password:cc,点击提交按钮,会在后台控制台上输出响应信息:

  1. "FormTagsAction [userId=, userName=bb, password=cc]"

程序会自动跳转到form-tags.jsp页面自身,这是我们发现username被自动填充为AAA,这说明了form表单会自动填充是因为------form标签会从值栈中自动寻找与自身标签相匹配的属性值作为标签值。

  • s:checkbox复选框

用法:

  1. <s:form action="formtags.action" method="post">
  2. <s:checkbox name="married" label="Married"></s:checkbox>
  3.  
  4. <s:submit name="submit" label="Submit"></s:submit>
  5. </s:form>

FormTagsAction.java中追加:属性private String married;实现set,get方法。

使用married字段来接收页面提交的参数。

需要注意点:s:checkbox生成的html比较特殊

  1. <input type="checkbox" name="married" value="true" id="formtags_married"/>
    <input type="hidden" id="__checkbox_formtags_married" name="__checkbox_married" value="true" />
    <label for="formtags_married" class="checkboxLabel">Married</label>

它生成了一个hidden标签,如果缺少了个标签:如果未选中married复选框时,后台代码就接收不了参数值。

  • s:radio、s:select(单选框),s:checkboxlist(复选框):

1、list,listKey,listValue这3个属性对radio,select,checkboxlist等标签非常重要;

2、可以把一个String,一个数据,一个Enumeration,Iterator,Map或Collection赋值给list属性。

form-tags.jsp

  1. <s:radio list="#{'0':'male','1':'famel' }" name="gender" label="Gender"></s:radio>
  2. <%
  3.  
  4. List<City> cities=new ArrayList<City>();
  5. cities.add(new City(1001,"City1"));
  6. cities.add(new City(1002,"City2"));
  7. cities.add(new City(1003,"City3"));
  8. cities.add(new City(1004,"City4"));
  9. request.setAttribute("cities", cities);
  10. %>
  11. <s:checkboxlist list="#request.cities" listKey="cityId" listValue="cityName" name="cities" label="City"></s:checkboxlist>
  12.  
  13. <s:select list="#{10:10,20:20,30:30,40:40,50:50}" label="Age" name="age" headerKey="" headerValue="please select ...">
  14. <s:optgroup label="11-19" list="#{11:11,12:12,13:13,14:14,15:15,16:16,17:17,18:18,19:19 }"></s:optgroup>
  15. <s:optgroup label="11-19" list="#{21:21,22:22,23:23,24:24,25:25,26:26,27:27,28:28,29:29 }"></s:optgroup>
  16. </s:select>

需要注意事项:如果后台要接受参数checkboxlist后台类型不能是数据,否则接收参数会失败,需要是List类型最好。

s:select第一个例子:

<s:select list="{'aa','bb','cc'}" theme="simple" headerKey="00" headerValue="00"></s:select>

s:select第二个例子:

<s:select list="#{1:'aa',2:'bb',3:'cc'}"  label="abc" listKey="key" listValue="value"  headerKey="0" headerValue="aabb">

s:select第三个例子:

< %
Java.util.HashMap map = new java.util.LinkedHashMap();
map.put(1,"aaa");
map.put(2,"bbb");
map.put(3,"ccc");
request.setAttribute("map",map);
request.setAttribute("aa","2");
%>
< s:select list="#request.map"  label="abc" listKey="key" listValue="value"
value="#request.aa"  headerKey="0" headerValue="aabb"></
s:select
>
headerKey headerValue 为设置缺省值
摘抄自 http://www.cnblogs.com/modou/articles/1326683.html

s:select第四个例子

  1. public class Program implements Serializable {
  2. private static final long serialVersionUID = 1L;
  3. private int programid;
  4. private String programName;
  5. public int getProgramid() {
  6. return programid;
  7. }
  8. public void setProgramid(int programid) {
  9. this.programid = programid;
  10. }
  11. public String getProgramName() {
  12. return programName;
  13. }
  14. public void setProgramName(String programName) {
  15. this.programName = programName;
  16. }
  17. }
  18.  
  19. xxx extends ActionSupport {
  20. private List<Program> programs ;
  21. public List<Program> getPrograms() {
  22. return programs;
  23. }
  24. public void setPrograms(List<Program> programs) {
  25. this.programs = programs;
  26. }
  27.  
  28.   private MyBean bean;
  29.   public MyBean getBean(){
  30.     return bean;
  31.   }
  32.   public void setBean(MyBean bean){
  33.     this.bean=bean;
  34.   }
  35. }

在jsp页面

<s:select list="programs"  listValue="programName" listKey="programid"  name="program" id="program" headerKey="0l" headerValue=" "   value="bean.programid">

</s:select>  
红色部分为在action里面的list,黄色为<option value="xxx">value</option>对应bean里面的字段programName

绿色部分为<option value="xxx",对应bean里面的字段programid

紫色部分为设定select被选中的值,s:select 会自动在bean选中key对应的值

Struts(十四):通用标签-form表单的更多相关文章

  1. FastAPI 学习之路(十六)Form表单

    系列文章: FastAPI 学习之路(一)fastapi--高性能web开发框架 FastAPI 学习之路(二) FastAPI 学习之路(三) FastAPI 学习之路(四) FastAPI 学习之 ...

  2. Spring MVC(十四)--SpringMVC验证表单

    在Spring MVC中提供了验证器可以进行服务端校验,所有的验证都必须先注册校验器,不过校验器也是Spring MVC自动加载的,在使用Spring MVC校验器之前首先要下载相关的jar包,下面是 ...

  3. iView学习笔记(四):Form表单操作

    1.后端准备 环境说明 python版本:3.6.6 Django版本:1.11.8 数据库:MariaDB 5.5.60 新建Django项目,在项目中新建app,配置好数据库 2.后端代码(基于C ...

  4. 五十四:WTForms表单验证之自定义表单验证器

    如果想要对表单中的某个字段进行自定义验证,则需要对这个字段进行单独的验证1.定义一个方法,命名规则为:validate_字段名(self, filed)2.在方法中,使用filed.data获取字段的 ...

  5. Form表单提交数据的几种方式

    一.submit提交 在form标签中添加Action(提交的地址)和method(post),且有一个submit按钮(<input type='submit'>)就可以进行数据的提交, ...

  6. 天河微信小程序入门《四》:融会贯通,form表单提交数据库

    天河在阔别了十几天之后终于又回来了.其实这篇文章里的demo是接着(天河微信小程序入门<三>)后面就做了的,但是因为最近在做别的项目,所以就偷懒没有发出来.放到今天来看,从前台提交数据到数 ...

  7. 参数传递的四种形式----- URL,超链接,js,form表单

    什么时候用GET,  查,删, 什么时候用POST,增,改  (特列:登陆用Post,因为不能让用户名和密码显示在URL上) 4种get传参方式 <html xmlns="http:/ ...

  8. 6.form表单四种提交方式

    一.使用jquery的ajax方式提交: 二.使用easyui的form组件内置的submit方法提交: 三.先定义表单,然后使用submit方法提交: 四.先定义表单,然后按下enter键时提交:

  9. ***四种参数传递的形式——URL,超链接,js,form表单

    什么时候用GET,  查,删 什么时候用POST,增,改  (特列:登陆用Post,因为不能让用户名和密码显示在URL上) 4种get传参方式 <html xmlns="http:// ...

随机推荐

  1. 【Android】你知道还可以通过 View.animate() 来实现动画么

    这次想来讲讲 View.animate(),这是一种超好用的动画实现方式,用这种方式来实现常用的动画效果非常方便,但在某些场景下会有一个坑,所以这次就来梳理一下它的原理. 基础 首先,先来看一段代码: ...

  2. 排序算法Java实现(快速排序)

    算法描述:对于一组给定的记录,通过一趟排序后,将原序列分为两部分,其中前一部分的所有记录均比后一部分的所有记录小,然后再依次对前后两部分的记录进行快速排序,递归该过程,直到序列中的所有记录均有序为止. ...

  3. poj-3185-开关问题

    描述 牛一行20他们喝的水碗.碗可以那么(面向正确的为清凉水)或颠倒的(一个位置而没有水).他们希望所有20个水碗那么,因此用宽鼻子翻碗. 嘴太宽,他们不仅翻转一碗还碗的碗两侧(总共三个或三个——在两 ...

  4. MySQL详解--锁,事务

    http://www.cnblogs.com/jukan/p/5670950.html http://blog.csdn.net/xifeijian/article/details/20313977 ...

  5. 【jQuery】 JQ和HTML以及JQ遍历元素

    JQ & HTML JQ作为一个JS库,很好地继承了JS和HTML互动的特点,并且还给出了包装得更好,操作层次更高的方法.和之前JQ的内容一样,方法的表现形式是$(selector).acti ...

  6. nginx域名跳转技巧

    1.地址重写:访问server_name的时候跳转到http://www.cnblogs.com/qinyujie/ 修改nginx配置文件.加入到server{...}字段或者location字段里 ...

  7. Spring Cloud Contract

    http://www.infoq.com/cn/news/2017/04/spring-cloud-contract 在默认情况下,我们希望用户以JAR文件的形式将生产者存根和契约发布到Maven库. ...

  8. SQL注入之Sqli-labs系列第二篇

    废话不在多说  let's go!   继续挑战第二关(Error Based- String) 同样的前奏,就不截图了 ,and 1=1和and 1=2进行测试,出现报错 还原sql语句 查看源代码 ...

  9. 巨人大哥谈Web应用中的Session(session详解)

    巨人大哥谈Web应用中的Session(session详解) 虽然session机制在web应用程序中被采用已经很长时间了,但是仍然有很多人不清楚session机制的本质,以至不能正确的应用这一技术. ...

  10. JAVA入门——Generic/泛型

    在台科大的第二次JAVA作业,老师课上讲的内容是泛型. 泛型(generic),泛型是Java SE 1.5的新特性,泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数.这种参数类型可以 ...