webwork表单提交中有一个很有用的技巧,在提交成组的类似
person[0].name,person[1].name的表单中,可以利用conversion使xwork自动装配对象属性到action中:
form 代码:
Html代码
1.
person类:
Java代码
1.public Class Person{
2.public String name;
3.public Long id;
4.getXXX...
5.setXXX...
6.}
然后在action类同层次创建conversion文件,ClassName-conversion.properties,这里用SavePersonAction-conversion.properties:
Java代码
1.Element_persons=Person
2.CreateIfNull_persons=true
这里面配置文件的含义就是页面中persons名字样式的数组表单提交会被xwork转换成一个个对象放入list中,如果list是空的话xwork会自己创建一个.
action的代码如下:
Java代码
1.public Class SavePersonAction extends ActionSupport{
2. List persons=new ArrayList();
3.}
这样,form中提交的数组形式的属性,会由xwork转换成person对象并放入list中,供action使用.
但这样的验证表单的数据就会与传统xwork的验证不同.传统xml的validation类似如下样子:
Xml代码
1.
2.
3.
4.
5.
6.
7.
这里的field name必须精确匹配表单中提交的名字,由于我们表单中的name是name 形式的,并不能确定提交哪个person[?].name , 就要用到xwork的一个测试的validation,叫collection,配置方法如下,在SavePersonAction-validation.xml中加入:
Xml代码
1.
2.
3.
4.https://www.wendangku.net/doc/c2401229.html,
5.required
6.Must be Strin
g
7.
8.
9.
10.
11.
我想实验用collection去使用regex验证,没有成功,可能还有问题,最后还是将表单提交到action层进行正则验证.
conversion会有一个问题,如果person中有一个id声明为long类型,但页面提交的时候这个属性如果包括了字母和数字,就会产生一个conversion error,由于xwork的xml验证是在conversion转换成对象之后进行,无法在之前拦截到, 如果页面操作比较复杂,需要button提交数据到action进行各种操作,会在提交前产生conversion error,不能进入action层进行操作,在开发中需要注意.
表单 表单form是Internet和服务器之间进行信息交流的一种重要工具。包括按钮、文本框、单选按钮、复选按钮等,它们被称之为表单对象。表单的使用包括两部分:一是用户界面,提供用户输入数据的元件;另一部分是处理程序,可以是客户端程序而在浏览器执行,也可以是服务器程序,处理用户提交的数据,返回结果。 一.可插入的表单对象 Dreamweaver中,在“插入”面板中,有一个“表单”分类,选择该分类,可插入的表单对象快捷按钮就会出现。如下图: 可插入的对象,从左至右,包括: ?表单 ?文本字段 ?隐藏域 ?文本区域 ?复选框 ?单选按钮 ?单选按钮组 ?列表/菜单 ?跳转菜单 ?图像域 ?文件域 ?按钮 1.插入表单域 要在网页中插入表单对象,首先应该插入一个表单域,否则服务器将无法处理用户填写的信息。操作步骤如下: 步骤1:“插入”面板中,选择“表单”分类,单击左边第1个“表单”按钮,随即插入到网页中一个表单域,表单域在设计视图中显示为一个红色虚线框的范围。如图所示: 如果没有红色虚线框,执行菜单栏“查看/可视化助理/不可见元素”命令即可。 步骤2:设置表单域属性。使用鼠标单击虚线的边框,此时虚线框内出现黑色区域,表示该表单域被选中,属性面板如下: 表单域属性面板包括:
?表单名称:标识表单的唯一名称。 ?动作:指定处理该表单的动态页或脚本的路径。可以键入完整的路径,也可以单击“浏览文件”按钮指定到同一站点中包含该脚本或应用程序页的相应文件夹。如果没有相关程序支持的话,也可以使用E-mail的方式来传输表单信息,这种方式在动作文本框中键入:“mailto:电子邮件地址”。表示提交的信息将会发送到作者的邮箱中。比如 ?方法:用于选择表单数据传输到服务器的方法。可选择速度快但携带数据量小的GET方法,或者数据量大的POST方法。一般使用POST方法。 ?目标:指定打开窗口的方式。 ?MIME类型:指定对提交给服务器进行处理的数据使用MIME编码类型。 ?类:定义好的CSS样式。 2.插入文本域 当浏览者浏览网页需要输入文字资料时,像姓名、地址、E-mail或稍长一些的个人介绍等栏目,在制作时就可以使用文本域,它在浏览器中将显示为一个文本框。 具体操作如下: 步骤1:插入文本域前请确定首先插入了一个表单域,并且将光标放入表单域中。如果在表单域外插入文本域,Dreamweaver会弹出提示框,是否创建一个表单域。 步骤2:在“插入”面板中,选择“表单”分类,单击左边第2个“文本字段”按钮,随即插入到网页中一个文本域。可以在文本域前加入说明的文字,如“用户名”,告知浏览者需要填入的内容的类型。 步骤3:单击文本域,对文本域的属性面板进行设置: 文本域:输入文本字段的名称,该名称在该网页中是唯一的名称。名称不能包含空格或 特殊字符,可以使用字母数字字符和下划线的任意组合。 字符宽度:设置文本域中最多可显示的字符数。 最多字符数:设置单行文本域中所能输入的最多字符数。如果是空白,则可以输入任意 数量的文本。(最好对不同内容的文本域进行不同数量的限制,防止个别浏览者恶意输入大量数据,维护系统的稳定性。) 初始值:输入文本域中默认状态时显示的内容,当浏览者键入资料时初始文本被替代。 类型:显示了当前文本域的类型,包括“单行”、“多行”和“密码”。其中, ---单行是默认选项,只显示一行文本。 ---多行表示插入的文本可显示多行(如图)。
实验3.8 表单的应用 【相关知识】 1. 表单是用于申请或提交某些信息而填写的交互网页,属于网页动态元素。它是网站 管理者与浏览者之间沟通的桥梁。 2. 表单域是具有相互联系的、能够完成一定功能的表单对象的集合。一个网页中可有 多个表单域。 3. 表单对象指表单域中专门处理用户输入数据的元素。表单对象一般都添加在表单域 中。网页中的表单对象包括文本域、单选按钮、复选框、下拉列表、按钮等。 4. 表单不能嵌套,但是一个网页中可以有多个表单。 5. 提交表单的方法有两种:POST和GET。POST方法将在HTTP请求中嵌入表单数据, 通常用来传送大量数据。GET方法将表单数据附加在请求页面的URL地址后面,通常用来传送少量数据。 一、实验目的和要求 掌握使用表单设计新用户注册页面的方法。页面的设计效果如图3-8所示。 图3-8 “新用户注册”页面的效果图
二、实验步骤 1. 新建一个网页文档 启动Dreamweaver。单击【文件】→【新建】菜单命令,新建一个网页文档。 2. 插入表单域 (1)将光标放在网页上要插入表单域的位置。 (2)单击【插入】→【表单】→【表单】菜单命令,或者打开【表单插入栏】,单击上面的【表单】按钮。在网页中插入表单域。 3. 插入表格 (1)将光标放在表单域中,单击【文件】→【表格】菜单命令,打开【表格】对话框。 (2)在对话框中,设置【行数】为“13”;设置【列数】为“2”;设置【表格宽度】为“600像素”;单击【确定】按钮。插入一个13行2列的表格。 (3)选中该表格。在属性面板的【对齐】下拉列表中选择“居中对齐”。 4. 添加表单对象 (1)将光标放在第1行第1列的单元格中。单击【插入】→【表单】→【文本域】菜单命令,或者单击【表单插入栏】上面的【文本字段】按钮,插入一个文本域。在【输入标签辅助功能属性】对话框的【标签文字】文本框中输入“会员号”。选中该文本域,在属性面板中,设置【字符宽度】为“20”;设置【最多字符数】为“20”;在【类型】处选择“单行”。将光标放在第1行第2列的单元格中,输入文字“(必填)”。 (2)将光标放在第2行第1列的单元格中。单击【插入】→【表单】→【文本域】菜单命令,或者单击【表单插入栏】上面的【文本字段】按钮,插入一个文本域。在【输入标签辅助功能属性】对话框的【标签文字】文本框中输入“密码”。选中该文本域,在属性面板的【类型】处选择“密码”;设置【字符宽度】为“10”;设置【最多字符数】为“10”。将光标放在第2行第2列的单元格中,输入文字“(必填)”。 (3)将光标放在第3行第1列的单元格中。输入文字“性别”。单击【插入】→【表单】→【单选按钮】菜单命令,或者单击【表单插入栏】上面的【单选按钮】按钮,插入一个单选按钮。在【输入标签辅助功能属性】对话框的【标签文字】文本框中输入“男”。 用同样的方法插入另一个单选按钮。在【输入标签辅助功能属性】对话框的【标签文字】文本框中输入“女”。 (4)将光标放在第4行第1列的单元格中。单击【插入】→【表单】→【列表/菜单】菜单命令,或者单击【表单插入栏】上面的【列表/菜单】按钮,插入一个列表/菜单。 在【输入标签辅助功能属性】对话框的【标签文字】文本框中输入“常住地点”。选中该列表/菜单对象,在属性面板的【类型】处选择“列表”;设置【高度】为“2”;选中【允许多选】复选项。单击【列表值】按钮,打开【列表值】对话框。单击按钮,输入如表3-3所示的“常住地点”列表值数据。 表3-3 “常住地点”列表值数据 项目标签值 北京 1 上海 2 天津 3 广东 4
第八章表单 表单是网页中提供的一种交互式操作手段,在网页中的使用十分广泛。无论是提交搜索的信息,还是网上注册等都需要使用表单。用户可以通过提交表单信息与服务器进行动态交流。表单主要可以分为两部分:一是用HTML源代码描述的表单,可以直接通过插入的方式添加到网页中;二是提交后的表单处理,需要调用服务器端编写好的脚本对客户端提交的信息作出回应。 1 表单的概念 表单通常用来做调查表、注册登录界面、搜索界面等。通过表单收集到的用户反馈信息,通常是以某种分隔符分隔的文字形式提交到服务器。 表单使用的
之间的部分就是一个表单。 表单form基本语法: ?name:给定表单名称,表单命名之后就可以用脚本语言(如JavaScript 或VBScript)对它进行控制。 ?action:指定处理表单信息的服务器端应用程序。 ?method:用于指定表单向服务器提交数据的方法,method的值可以为get或是post,默认方式是get。 (1)get方法,使用get方法提交数据,浏览器将把表单中的各个值添加 到action指定的URL后(这两者之间用问号进行分隔)并向服务器发 送get请求,每个值之间用符号“&”链接。 (2)post方法,如果采用post方法,浏览器将首先与action属性中指定 的表单处理程序建立联系,一旦建立连接之后,浏览器就会按分段 传输的方法将数据发送给服务器。 (3)get将表单中的数据按照“变量=值”的形式,添加到action所指向 的URL后面,并且两者使用“?”连接,而各个变量之间使用“&” 连接;post是将表单中的数据放在表单的数据体中,按照变量和值相 对应的方式,传递到action所指向的URL。 (4)get是不安全的,post的所有操作对用户来说都是不可见的。 (5)post可以传输大量的数据,所以在上传文件时只能使用post。 (6)get是表单的默认方法。 2 输入 是个单标记,它必须嵌套在表单标记中使用,用于定义一个用户的输入项。 格式:Java中,当表单含有文件上传时,提交数据的如何读取 当提交表单里包含文件上传的时候,即Form的enctype属性值为multipart/form-data时,后台是无法像普通表单那样通过request.getParameter来获取用户提交的数据的。(说实话,我经常因为忘记这个问题而浪费好多调查时间。) 1.// 判断enctype属性是否为multipart/form-data 2.boolean isMultipart = ServletFileUpload.isMultipartContent(request); 3. 4.// Create a factory for disk-based file items 5.DiskFileItemFactory factory = new DiskFileItemFactory();
7.// 当上传文件太大时,因为虚拟机能使用的内存是有限的,所以此时要通过临时文件来实现 上传文件的保存 8.// 此方法是设置是否使用临时文件的临界值(单位:字节) 9.factory.setSizeThreshold(yourMaxMemorySize); 10. 11.// 与上一个结合使用,设置临时文件的路径(绝对路径) 12.factory.setRepository(yourTempDirectory); 13. 14.// Create a new file upload handler 15.ServletFileUpload upload = new ServletFileUpload(factory); 16. 17.// 设置上传内容的大小限制(单位:字节) 18.upload.setSizeMax(yourMaxRequestSize); 19. 20.// Parse the request 21.List> items = upload.parseRequest(request); 22. 23.Iterator iter = items.iterator(); 24.while (iter.hasNext()) { 25.FileItem item = (FileItem) iter.next(); 26. 27.if (item.isFormField()) { 28.//如果是普通表单字段 29.String name = item.getFieldName(); 30.String value = item.getString(); 31.... 32.} else { 33.//如果是文件字段 34.String fieldName = item.getFieldName(); 35.String fileName = item.getName(); 36.String contentType = item.getContentType(); 37.boolean isInMemory = item.isInMemory(); 38.long sizeInBytes = item.getSize(); 39....
禁止表单多次提交 <!--此特效来源来互联网,由https://www.wendangku.net/doc/c2401229.html, 收集整理--> <!--禁止表单多次提交--> <h4>禁止表单多次提交,表单提交一次后提交键变灰色</h4> <script> function submitonce(theform){ //if IE 4+ or NS 6+ if (document.all||document.getElementById){ //screen thru every element in the form, and hunt down "submit" and "reset" for (i=0;i<theform.length;i++){ var tempobj=theform.elements[i] if(tempobj.type.toLowerCase()=="submit"||tempobj.type.to LowerCase()=="reset") //disable em tempobj.disabled=true } } } </script>
<form method="POST" onSubmit="submitonce(this)"> <input type=input name="asdf"> <input type=submit name="OK"> </form> 1. 利用javascript : 1.1 document.form1.submit();后加 document.body.innerHtml = "<center> Waiting...</center>"; //当然这里的html代码就由你发挥了,还可把这段写成函数,这样维护就方便了!这一处理,就让用户在等待提交时不会误以为没提交而重复按提交按钮! 1.2 按钮设置 <SCRIPT LANGUAGE="JavaScript"> function changesubmit() { document.aa.B1.disabled = "true"; } </script> …… <form method="POST" action="aa.jsp" name="aa"
做java的web开发有段日子了,有个问题老是困扰着我,就是乱码问题,基本上是网上查找解决方案(网上资料真的很多),都是一大堆的介绍如何解决此类的乱码问题,但是没几个把问题的来龙去脉说清楚的,有时候看了些文章后,以为自己懂了,但是在开发中乱码问题又像鬼魂一样出来吓人,真是头大了!这篇文章是我长时间和乱码做斗争的一些理解的积累,还希望有更多的朋友给出指点和补充。 form有2中方法把数据提交给服务器,get和post,分别说下吧。 (一)get提交 1.首先说下客户端(浏览器)的form表单用get方法是如何将数据编码后提交给服务器端的吧。 对于get方法来说,都是把数据串联在请求的url后面作为参数,如:http://localhost:8080/servlet?msg=abc (很常见的一个乱码问题就要出现了,如果url中出现中文或其它特殊字符的话,如:http://localhost:8080/servlet?msg=杭州,服务器端容易得到乱码),url拼接完成后,浏览器会对url进行URL encode,然后发送给服务器,URL encode 的过程就是把部分url做为字符,按照某种编码方式(如:utf-8,gbk等)编码成二进制的字节码,然后每个字节用一个包含3个字符的字符串 "%xy" 表示,其中xy为该字节的两位十六进制表示形式。我这里说的可能不清楚,具体介绍可以看下https://www.wendangku.net/doc/c2401229.html,.URLEncoder类的介绍在这里。了解了URL encode的过程,我们能看到2个很重要的问题,第一:需要URL encode的字符一般都是非ASCII 的字符(笼统的讲),再通俗的讲就是除了英文字母以外的文字(如:中文,日文等)都要进行URL encode,所以对于我们来说,都是英文字母的url不会出现服务器得到乱码问题,出现乱码都是url里面带了中文或特殊字符造成的;第二:URL encode到底按照那种编码方式对字符编码?这里就是浏览器的事情了,而且不同的浏览器有不同的做法,中文版的浏览器一般会默认的使用GBK,通过设置浏览器也可以使用UTF-8,可能不同的用户就有不同的浏览器设置,也就造成不同的编码方式,所以很多网站的做法都是先把url里面的中文或特殊字符用javascript做URL encode,然后再拼接url提交数据,也就是替浏览器做了URL encode,好处就是网站可以统一get方法提交数据的编码方式。完成了URL encode,那么现在的url就成了ASCII范围内的字符了,然后以iso-8859-1的编码方式转换成二进制随着请求头一起发送出去。这里想多说几句的是,对于get方法来说,没有请求实体,含有数据的url都在请求头里面,之所以用URL encode,我个人觉的原因是:对于请求头来说最终都是要用iso-8859-1编码方式编码成二进制的101010.....的纯数据在互联网上传送,如果直接将含有中文等特殊字符做iso-8859-1编码会丢失信息,所以先做URL encode是有必要的。 2。服务器端(tomcat)是如何将数据获取到进行解码的。 第一步是先把数据用iso-8859-1进行解码,对于get方法来说,tomcat获取数据的是ASCII范围内的请求头字符,其中的请求url里面带有参数数据,如果参数中有中文等特殊字符,那么目前还是URL encode后的%XY状态,先停下,我们先说下开发人员一般获取数据的过程。通常大家都是 request.getParameter("name")获取参数数据,我们在request对象或得的数据都是经过解码过的,而解码过程中程序里是无法指定,这里要说下,有很多新手说用request.setCharacterEncoding("字符集")可以指定解码方式,其实是不可以的,看servlet的官方API说明有对此方法的解释:Overrides the name of
HTML表单 一、表单 1.表单的作用 HTML 表单用于接收不同类型的用户输入,用户提交表单时向服务器传输数据,从而实现用户与Web服务器的交互。 2.表单的工作机制 3.表单定义(
标签) HTML表单是一个包含表单元素的区域,表单使用 3.表单属性 action:规定当提交表单时,向何处发送表单数据。action取值为:第一,一个URL(绝对URL/相对URL),一般指向服务器端一个程序,程序接收到表单提交过来的数据(即表单元素值)作相应处理。比如 二、在text按回车,转到执行button的操作 三、jQuery的方法也很简单form表单提交的几种方法 form表单提交的几种方法