Java从多选框中获取所有元素

时间:2012-03-12 18:22:49

标签: java javascript jsp

我有一个多选框,我正在做一些javascript来排序框中元素的顺序。我想在排序回Java之后提交整个数组,而不仅仅是选择项。我怎样才能做到这一点?

JSP:

<script type="text/javascript">  
    $(document).ready(function(){   
        $("#mup")[0].attachEvent("onclick", moveUpItem);    
        $("#mdown")[0].attachEvent("onclick", moveDownItem);    
    });   

    function moveUpItem(){  
        $('#list option:selected').each(function(){    
            $(this).insertBefore($(this).prev());   
        });  
    }   

    function moveDownItem(){    
        $('#list option:selected').each(function(){    
            $(this).insertAfter($(this).next());   
        });   
    }       
</script> 



<table width="100%">
    <tr>
        <td width="50%" align="center">
            <h1>DET Column Maintenance</h1>
        </td>
    </tr>
</table>

<form action="process.det_column_order" method="post" name="detColumnSortorder" >
    <table class="data_table">
        <tr align="center">
            <td>
                <select id="list" name="fieldNames" size="35" multiple="multiple" style="width: 250px;">
                    <c:forEach var="field" items="${detFields}">
                        <option value="${field.fieldName}">${field.displayName}</option>
                    </c:forEach>
                </select>
            </td>
        <tr>
            <td style="text-align: center;">
                <button id="mup">Move Up</button>&nbsp;&nbsp;&nbsp;
                <button id="mdown">Move Down</button>
            </td>
        </tr>
        <tr>
            <td style="text-align: center;">
                <input name="action" type="submit" value="Submit"/>
            </td>
        </tr>
     </table>   
 </form>

FORM:

 private String[] fieldNames;
public String[] getFieldNames() { return this.fieldNames; }
            public void setFieldNames(String[] val) { this.fieldNames = val; }

2 个答案:

答案 0 :(得分:4)

由于表单只提交选定的值,因此您需要更多的JS和另一个表单字段。

引入一个隐藏的表单字段,用于保存您关注的值:

<input type="hidden" name="fieldNamesOrder" id="fieldNamesOrder"/>

每次点击Move Up / Move Down:

var order = [], sel = document.getElementById("list");
for(var i = 0, len = sel.options.length; i < len; i++) {
    order.push(sel.options(i).value);
}
document.getElementById("fieldNamesOrder").value = order.join(",");

然后,在服务器端,您可以从该已发布字段中读取已排序的字段名称。

答案 1 :(得分:0)

您需要在HTML表单中创建一个隐藏文本字段,用于存储每个选项的值...或者您需要在提交表单之前以编程方式选择所有选项。