framework7 多选框表单提交报错 java.lang.NumberFormatException: For input string: ““,自写原生js获取表单数据

发现bug 版本 7 1.6.4

1,后台数据结构:

//实体1
public class DefWorksheet extends DataEntity<DefWorksheet> {   
   private FieldList fieldList = new FieldList();
}
//实体2
public class FieldList {
   private List<String> field6List = Lists.newArrayList();
}

//后台controller 接收的是 DefWorksheet 

2,前台数据

<li class="item-content item-input">
	<div class="item-inner"> 
		<div class="item-title item-label">多选框:</div> 
		<div class="item-input-wrap" id="wkst_field6">&nbsp;
 <input   type="checkbox"  name="fieldList.field6List" value='sys_basic_ke_hu_wai_chu' >客户外出&nbsp;
 <input   type="checkbox"  name="fieldList.field6List" value='sys_basic_qi_ta' >其他 
		</div>
	</div>
</li>
							

3,framework7获取表单数据的方法

  var formData = app.form.convertToData('#workForm');

4,看控制台错误的参数

framework7获取表单数据的方法  app.form.convertToData  把 field6List 加了个中括号,

造成实体转换失败报错: java.lang.NumberFormatException: For input string: ""

5,没办法自己写个原生js提交表单的方法吧

var formData = serializeForm('#workForm');

  //原生js获取表单数据
    function serializeForm(formId) {
        var elements = getElements(formId);
        var queryComponents = new Array();
        for (var i = 0; i < elements.length; i++) {

            var queryComponent = serializeElement(elements[i]);
            if (queryComponent)
                queryComponents.push(queryComponent);
        }
        return queryComponents.join('&');
    }

    //组合URL
    function serializeElement(element) {
        var method = element.tagName.toLowerCase();
        var parameter = input(element);

        if (parameter) {
            var key = encodeURIComponent(parameter[0]);
            if (key.length == 0) return;

            if (parameter[1].constructor != Array)
                parameter[1] = [parameter[1]];

            var values = parameter[1];
            var results = [];
            for (var i=0; i<values.length; i++) {
                results.push(key + '=' + encodeURIComponent(values[i]));
            }
            return results.join('&');
        }
    }


    //获取指定form中的所有的<input> select 和 textarea 对象
    function getElements(formId) {
        var form = document.getElementById(formId);
        var elements = new Array();
        var tagElements = form.getElementsByTagName('input');
        for (var j = 0; j < tagElements.length; j++){
            elements.push(tagElements[j]);
        }
        var selectTagElements = form.getElementsByTagName('select');
        for (var i = 0; i < selectTagElements.length; i++){
            elements.push(selectTagElements[i]);
        }

        var textareaTagElements = form.getElementsByTagName('textarea');
        for (var i = 0; i < textareaTagElements.length; i++){
            elements.push(textareaTagElements[i]);
        }


        return elements;
    }

    function input(element) {
        switch (element.type.toLowerCase()) {
            case 'submit':
            case 'hidden':
            case 'password':
            case 'text':
            case 'textarea':
                return [element.name, element.value];

            case 'select-one':
                return inputSelect(element);

            case 'checkbox':
            case 'radio':
                return inputSelector(element);
        }
        return false;
    }
    //获取单个input中的【name,value】数组
    function inputSelector(element) {
        if (element.checked)
            return [element.name, element.value];
    }

    function inputSelect(element){
        var index=element.selectedIndex;
        if(index!=-1){
            var value=element.options[index].value;
            return [element.name, value];
        }
    }

 6,正确的提交参数

问题解决,

猜你喜欢

转载自blog.csdn.net/zhaofuqiangmycomm/article/details/107495015