java - 支柱 2 <s :select> filling other fields within a form

标签 java javascript struts2

每当我从 <s:select /> 中选择一个值时下拉框填充我的 < s:form> 的该表中的其余值.我正在使用的列表是一个占位符,但不应该影响它。 此外,这只会在我更改默认设置时发生

表格代码:

<table id="pricingInput" class="footable" style="width: 700px; table-layout: fixed; margin-left: auto; margin-right: 25px; float:right; margin-bottom:50px;">
    <thead><tr><th style="text-align: center;">Account Name</th><th style="text-align: center;">Annual kWh Volume</th><th style="text-align: center">Rate Class</th><th style="text-align: center;">Add Another?</th></tr></thead>
    <tr>
        <td><s:textfield name="nameHolder" /></td>
        <td><s:textfield name="volumeHolder" /></td>
        <td><s:select headerValue="Choose Rate Class" name="rateClass" list="months" /></td>
        <td>
            <input type="button" class="addButton" value="Add" />
            <input type="button" value="Delete" onclick="deleteRow(this)">
        </td>
    </tr>                                   
</table>

Image of issue

因此,总体问题是可能导致此行为的原因是什么?那么我该如何纠正或预防呢?由于我以前从未在我的任何其他 struts 项目中遇到过这个问题,所以我不确定从哪里开始,Google 也没有提供太多帮助。

编辑:

用于添加/删除行的 JavaScript(免责声明,它可能比我需要的更复杂,我在网站上找到它并且对此主题有点困惑):

            <script type="text/javascript">
        $(function addRow(){
            $("#pricingInput").on('click', 'input.addButton', function() {
                var $tr = $(this).closest('tr');
                var allTrs = $tr.closest('table').find('tr');
                var lastTr = allTrs[allTrs.length-1];
                var $clone = $(lastTr).clone();
                $clone.find('td').each(function(){
                    var el = $(this).find(':first-child');
                    var id = el.attr('id') || null;
                    if(id) {

                        i = id.substr(id.length-1);
                       var prefix = id.substr(0, (id.length-1));
                       var splitString = prefix.split("[");
                        prefix = splitString[0];
                        if(splitString[1] != null){
                            var splitStringAgain = splitString[1].split("");
                            prefix = prefix+(i+1)+splitStringAgain[1];
                        }
                        else
                           prefix = prefix+"[" + (i+1) + "]";
                        //el.attr('id', prefix);
                        //el.attr('name', '['+(i+1)+']');
                        prefix=undefined;
                        splitString=undefined;
                    }
                });
                $clone.find('input:text').val('');
                $tr.closest('table').append($clone);
            });

            $("#pricingInput").on('change', 'select', function(){
                var val = $(this).val();
                $(this).closest('tr').find('input:text').val(val);
            });
        });

        </script>
        <script>
            function deleteRow(r)
            {
            var i = r.parentNode.parentNode.rowIndex;
            document.getElementById("pricingInput").deleteRow(i);
            }
        </script>

页面加载代码:

    @SuppressWarnings("unchecked")
@Override
public String execute(){
    months = new ArrayList<String>();
    years = new ArrayList<String>();
    months.add("01");
    months.add("02");
    months.add("03");
    months.add("04");
    months.add("05");
    months.add("06");
    months.add("07");
    months.add("08");
    months.add("09");
    months.add("10");
    months.add("11");
    months.add("12");
    years.add("2014");
    years.add("2015");
    years.add("2016");
    years.add("2017");
    years.add("2018");
    years.add("2019");
    years.add("2020");



    utility_map.put("DUQ", rate_class_duq);
    utility_map.put("Met_Ed", rate_clas_met_ed);
    utility_map.put("Penn_Power", rate_class_pp);
    utility_map.put("PPL", rate_class_ppl);
    utility_map.put("Penelec", rate_class_penelec);
    utility_map.put("Penn_Power", rate_class_pp);
    utility_map.put("WPP", rate_class_wpp);

    return SUCCESS;
}

表单提交代码:

    @Override
public String execute() {

    try{
        nameList = Arrays.asList(nameHolder.split(","));
        volumeList = Arrays.asList(volumeHolder.split(","));
        for(int x = 0; x<nameList.size(); x++){
            Pricing holder = new Pricing();
        try{
            if(nameList.get(x) != null && volumeList.get(x) != null){
                if(volumeList.get(x).isEmpty() != true && nameList.get(x).isEmpty() != true){
                    holder.setName(nameList.get(x));
                    holder.setVolume(Double.valueOf(volumeList.get(x)));
                    pricing.add(holder);
                }
            }
        }
        catch(Exception e){
            StringWriter writer = new StringWriter();
            PrintWriter printWriter = new PrintWriter( writer );
            e.printStackTrace( printWriter );
            printWriter.flush();

            String stackTrace = writer.toString();
            System.out.print(stackTrace);
        }

        }
    }
    catch(Exception e ){
        addActionError("An unknown error occured.  Plase try reloading the page.");
        return ERROR;
    }
    return SUCCESS;
}

最佳答案

看起来您添加到每个选择的 onChange 的事件处理程序可能是罪魁祸首:

$("#pricingInput").on('change', 'select', function(){
    var val = $(this).val();
    $(this).closest('tr').find('input:text').val(val);
});

的 中找到所有 <input type="text"> 标签,并将每个文本输入的值设置为