简体   繁体   English

如何将嵌套的列表元素传递给spring mvc中的控制器

[英]How to pass nested list element to the controller in spring mvc

In my jsp page there have a table with nested list value, i want to send that table value to the container, The outer table value were sent but the inner table value not sent to the container, I am new here please let me know how to over come this situation, 在我的jsp页面中有一个带有嵌套列表值的表,我想将该表值发送到容器,外部表值已发送但内部表值未发送到容器,我是新来的,请让我知道如何过来这种情况,

My jsp 我的jsp

<script>
function rowAdded(rowElement) {
    //clear the imput fields for the row
    $(rowElement).find("input").val('');
    //may want to reset <select> options etc

    //in fact you may want to submit the form
    saveNeeded();
}
function rowRemoved(rowElement) {
    saveNeeded();
}
function saveNeeded() {
    $('#submit').css('color','red');
    $('#submit').css('font-weight','bold');
    if( $('#submit').val().indexOf('!') != 0 ) {
        $('#submit').val( '!' + $('#submit').val() );
    }
}
function beforeSubmit() {
    alert('script Working');
    return true;
}

$(document).ready( function() {
    var config = {
        rowClass : 'rule',
        addRowId : 'addRule',
        removeRowClass : 'removeRule',
        formId : 'ruleListForm',
        rowContainerId : 'ruleListContainer',
        indexedPropertyName : 'ruleList',
        indexedPropertyMemberNames : 'id,ruleName,parameterName,overwriteValue',
        rowAddedListener : rowAdded,
        rowRemovedListener : rowRemoved,
        beforeSubmit : beforeSubmit
    };
    new DynamicListHelper(config);
});
</script>
<html>
<form:form action="/update" method="post" id="ruleListForm"   modelAttribute="ruleListContainer">

            <table border="1">
                <thead>
                    <h3 align="center">Selected Rule</h3>
                    <tr>
                        <th data-field="id" width="25">ID&nbsp;&nbsp;&nbsp;  </th>
                        <th data-field="details" width="20">RuleName&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</th>

                        <th data-field="parameter" width="240">Parameter&nbsp;&nbsp;</th>
                    </tr>
                </thead>
                <tbody id="ruleListContainer">
                    <c:forEach items="${List2}" var="as">

                        <tr class="rule">
                            <td><input type="hidden" name="ruleList[].id" value="${as.rule.id}" /> ${as.rule.id}</td>
                            <td><input type="hidden" name="ruleList[].ruleName" value="${as.rule.ruleName}" /> ${as.rule.ruleName}</td>
                            <td>&nbsp;<input id="one" class="datepicker" type="text" name="ruleList[].startDate" size="11" height="0.10"></td>
                            <td>&nbsp;<input id="two" class="datepicker" type="text" name="ruleList[].endDate" size="11" height="0.10"></td>
                            <td>
                                <table border="1">
                                    <c:forEach items="${as.ruleAssignmentParameter}" var="asss">
                                        <tr>
                                            <td><input type="hidden" name="ruleList[].parameterName"value="${asss.parameterName}" > ${asss.parameterName}</td>
                                            <td><input type="hidden" name="ruleList[].overwriteValue" value="${asss.overwriteValue}" /> ${asss.overwriteValue}</td>
                                        </tr>
                                    </c:forEach>
                                </table>
                            </td>
                        </tr>
                    </c:forEach>
                </tbody>
            </table>
            <br>
             <input type="submit" value="Update">
        </form:form>
</html>         

Here is my model class 这是我的模特课

import java.util.Date;
import java.util.LinkedList;
import java.util.List;
import com.demo.app.model.RuleAssignmentParameter;
public class RuleAssUI {
private int id;
private String ruleName;
public int getId() {
    return id;
}
public void setId(int id) {
    this.id = id;
}
public String getRuleName() {
    return ruleName;
}
public void setRuleName(String ruleName) {
    this.ruleName = ruleName;
}
private List<RuleAssignmentParameter> ruleAssignmentParameter = new LinkedList<RuleAssignmentParameter>();

public List<RuleAssignmentParameter> getRuleAssignmentParameter() {
    return ruleAssignmentParameter;
}
public void setRuleAssignmentParameter(List<RuleAssignmentParameter> ruleAssignmentParameter) {
    this.ruleAssignmentParameter = ruleAssignmentParameter;
}
public RuleAssUI(){     
}
public RuleAssUI(int id,String ruleName){
    this.id=id;
    this.ruleName=ruleName; 
}
}

My container where i store the list value 我的容器,我存储列表值

import java.util.LinkedList;
import java.util.List;
public class RuleListContainer {
 private List<RuleAssUI> ruleList = new LinkedList<RuleAssUI>();
    public RuleListContainer() {
    }

    public RuleListContainer(List<RuleAssUI> ruleList) {
        this.ruleList = ruleList;
    }

    public List<RuleAssUI> getRuleList() {
        return ruleList;
    }

    public void setRuleList(List<RuleAssUI> ruleList) {
        this.ruleList = ruleList;
    } 

Controller 调节器

@RequestMapping(value = "/update", method = RequestMethod.POST)
public String update(@ModelAttribute("SpringWeb") RuleListContainer ruleListContainer, HttpSession session, ModelMap model) {

    ruleListContainer.getRuleList().size();

    for (RuleAssUI rul1 : ruleListContainer.getRuleList()) {
        System.out.println("Id:   " + rul1.getId());
        System.out.println("RuleName:  " + rul1.getRuleName());
        for (RuleAssignmentParameter rul2 : rul1.getRuleAssignmentParameter()) {
            System.out.println("ParameterName: " + rul2.getParameterName());
            System.out.println("ParameterValue: " + rul2.getOverwriteValue());

        }
    }
    session.setAttribute("ruleListContainer", ruleListContainer);
    return "hello";
}

I am trying so many time but unable to fixed the issue, And browse also but did't get any proper help, so please help to do items 我正在尝试这么多时间,但无法解决问题,而且浏览也没有得到任何适当的帮助,所以请帮助做项目

I NEED HELP PLEASE SOME BODY HELP ME...! 我需要帮助请一些人帮助我......!

Thank you in advance 先感谢您

I think the problem is in your jsp file. 我认为问题出在你的jsp文件中。 You need to set the index of each list element. 您需要设置每个列表元素的索引。

<c:forEach items="${List2}" var="as" varStatus="vs">

                    <tr class="rule">
                        <td><input type="hidden" name="ruleList[${vs.index}].id" value="${as.rule.id}" /> ${as.rule.id}</td>
                        <td><input type="hidden" name="ruleList[${vs.index}].ruleName" value="${as.rule.ruleName}" /> ${as.rule.ruleName}</td>
                        <td>&nbsp;<input id="one" class="datepicker" type="text" name="ruleList[${vs.index}].startDate" size="11" height="0.10"></td>
                        <td>&nbsp;<input id="two" class="datepicker" type="text" name="ruleList[${vs.index}].endDate" size="11" height="0.10"></td>
                        <td>
                            <table border="1">
                                <c:forEach items="${as.ruleAssignmentParameter}" var="asss" varStatus="assignments">
                                    <tr>
                                        <td><input type="hidden" name="ruleList[${vs.index}].ruleAssignmentParameter[${assignments.index}].parameterName" value="${asss.parameterName}" > ${asss.parameterName}</td>
                                        <td><input type="hidden" name="ruleList[${vs.index}].ruleAssignmentParameter[${assignments.index}].overwriteValue" value="${asss.overwriteValue}" /> ${asss.overwriteValue}</td>
                                    </tr>
                                </c:forEach>
                            </table>
                        </td>
                    </tr>
                </c:forEach>

Also in your controller (POST method) you are trying to get the object identified by "SpringWeb" but should be "ruleListContainer", same name you have in your form tag 同样在你的控制器(POST方法)中,你试图获得“SpringWeb”标识的对象,但应该是“ruleListContainer”,你的表单标签中有相同的名称

The problem was you had a list into RuleAssUI and you was not accesing correctly, you need 2 loops and indexes, one for each list. 问题是你有一个RuleAssUI列表,你没有正确访问,你需要2个循环和索引,每个列表一个。

Here is the key: 这是关键:

ruleList[${vs.index}].ruleAssignmentParameter[${assignments.index}].parameterName

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 Spring MVC / JSP-如何将对象的嵌套列表从选择表单传递给控制器 - Spring MVC / JSP - How to pass nested list of object to controller from a select form 如何在Spring MVC中将LIST从一个控制器传递到另一个控制器 - How to pass LIST from one controller to another controller in spring mvc 如何将列表从控制器传递到jsp并在Spring MVC中的javascript中对其进行迭代 - how to pass a list from controller to jsp and iterate it in javascript in spring mvc 如何将列表从视图传递到 Spring MVC 和 thymeleaf 中的 controller? - How to pass a list from the view to the controller in Spring MVC with thymeleaf? 如何将javascript变量传递给Spring mvc控制器 - how to pass javascript variable to Spring mvc controller Spring MVC将一个值列表从JSP页面传递给控制器 - Spring MVC pass a list of values into controller from JSP page Spring MVC将多个列表从控制器传递到jsp - Spring MVC Pass multiple list from controller to jsp 将li的列表从客户端传递给Spring MVC控制器 - Pass a list of li from client to Spring MVC controller 如何定义路径变量以传递给控制器​​(Spring MVC) - How to define path variable to pass to controller (spring mvc) 如何传递文本框值以及对spring mvc控制器的作用是什么? - How to pass textbox values and what was the action to spring mvc controller?
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM