在JadePool中,供应了一个万能表单解析类ProcessForm,目的是供应对ProcessVO完结刺进或更新记载的支撑。它能将尽情凌乱的表单记载,包含全部的字段,包含单记载和多记载,解析并封装成List变量,这些效果可以作为ProcessVO刺进、更新等方法的参数保管到数据库中。保管记载时,ProcessVO会自动过滤掉无效字段,只需表单中的字段名与数据库表中的字段 http://www.fpshamen.com/linked/20130324.do 名相同的数据才会保管到数据库中。当时,ProcessForm可能是世界上最无缺的表单解析东西。 ProcessForm支撑全部格式的文件上载,但不支撑大文件的上载,能满足大多数网络环境的运用。 关于文件类型的字段,除了会解析出文件的内容外,还会给出文件的相关特色,这些特色按照下面的格式命名: 文件字段名_originfilename 文件字段名_filename 文件字段名_ext 文件字段名_contenttype 文件字段名_size 关于四种常见的图画文件(jpg|gif|png|bmp),还会计算出图画宽度、高度等信息, 文件字段名_width 文件字段名_height ProcessForm支撑同步(非Ajax)和异步(Ajax)两种方法提交的表单的解析。 为了确保得到正确的解析效果,在表单描写上,运用这两个特色值:method="post"和enctype="multipart/form-data", 如果表单代表的是一条记载,对表单的字段次第没有需要;如果表单代表的是多条记载,请不要把check、radio类型的字段作为每条记载的第一个字段,如果页面确实需要check、radio类型作为第一个字段,那么在check或radio之前加一个无效的隐含字段。ProcessVO不会保管无效字段值。 关于异步方法提交的表单数据,有必要是Ajax标准格式,即xml格式。 ProcessForm运用: 同步上载的表单解析 ProcessForm form = ProcessForm.instance(); //form.setFilter("jpg|gif|png|swf"); //form.setAllowFileSize(1024000);//单个文件容许抵达1M form.parse(request);//同步解析 Map m = form.getRecordFullInfo();//包含文件的特色 m = form.getRecord() List v = form.getRecordList(); v = form.getRecordFullInfoList();//包含文件的附件特色 异步上载的表单解析 ProcessForm pf = ProcessForm.instance(); pf.parseXML(request, pf.IS_ECMA_UNICODE);//表单字段的值均经过escape方法的处置 pf.parseXML(request); List v = pf.getRecordList(); 一点说明:由于表单解析程序的代码恰当凌乱,如果遇到不能解析的情况,请及时告诉个人。邮箱hkm2300(at)yahoo.com.cn 对同步方法提交的记载进行解析的有些底层中间方法 /** * 对非ajax方法提交的记载解析。 解析 contentType = "multipart/form-data";的表单 * 在表单中出现多条记载时,第一个元素作为新的一条记载的参看标志,有必要确保其有一个固定的称谓,所以表单中第一个元素应辟免运用checkbox复选框和radio单选按钮,以防止表的规划信息差错 */ private List getMultipartFormData(HttpServletRequest request) throws IOException, ServletException { Map recordFullInfo = null; List _recordFullInfoList = new ArrayList(); int recordIndex = -1; itemNameSet = new HashSet(); ServletInputStream in = request.getInputStream(); charset = request.getCharacterEncoding(); int allowFileSize = this.getAllowFileSize(); byte[] buffer = new byte[allowFileSize]; int bufferLength = 0; byte[] temp; byte[] lineByte = new byte[4096]; String line; String boundary = getBoundary(request); String itemName = ""; String originFileName = ""; String fileName = ""; String fileExt = ""; StringBuffer sb = new StringBuffer(""); boolean nameFlag = false; boolean fileFlag = false; int skipLine = 0; int i; try { while ((line = this.readLine(lineByte, in, charset)) != null) { if (!nameFlag http://www.szhaoexport.com/linked/20130324.do