簡體   English   中英

如何將嵌套的列表元素傳遞給spring mvc中的控制器

[英]How to pass nested list element to the controller in 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;
    } 

調節器

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

同樣在你的控制器(POST方法)中,你試圖獲得“SpringWeb”標識的對象,但應該是“ruleListContainer”,你的表單標簽中有相同的名稱

問題是你有一個RuleAssUI列表,你沒有正確訪問,你需要2個循環和索引,每個列表一個。

這是關鍵:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM