java - 如何将嵌套列表元素传递给 spring mvc 中的 Controller

标签 java html jsp spring-mvc

在我的 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>         

这是我的模型类

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; 
}
}

我存储列表值的容器

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";
}

我试了很多次都无法解决这个问题,也浏览了但没有得到任何适当的帮助,所以请帮忙做一些事情

我需要帮助,请有人帮助我...!

提前致谢

最佳答案

我认为问题出在您的 jsp 文件中。 您需要设置每个列表元素的索引。

<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>

同样在您的 Controller (POST 方法)中,您正在尝试获取由“SpringWeb”标识的对象,但应该是“ruleListContainer”,与您在表单标签中的名称相同

问题是您在 RuleAssUI 中有一个列表,但您没有正确访问,您需要 2 个循环和索引,每个列表一个。

这是关键:

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

关于java - 如何将嵌套列表元素传递给 spring mvc 中的 Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36894611/

相关文章:

java - 程序完成后数据存储

jquery - CSS 变换干扰 z-index

javascript - 选择单选按钮时删除禁用属性

java - 根据用户输入值在 MySql 中创建表

java - css嵌入jsp以及如何在jsp中同时部署css和html

java - :ajax listener fails within dynamically added h:selectOneMenu

java - 如何优雅地关闭 Spring JMS MessageListenerAdapter

java - java-websocket的WebSocketServer使用什么草案?

jquery - Bootstrap 表单设计间距问题

java - 如何使用JSTL将ModelAndView中Hashmap的键和值(在UserDefinedClass中)循环到JSP