2016-04-27 104 views
2

在我的jsp页面有一个嵌套列表值的表,我想发送该表值到容器,外表值是发送,但内部表值没有发送到容器中,我是新来的,请让我知道如何在来到这个情况,如何传递嵌套的列表元素到控制器在春天mvc

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

我的容器w ^在这里,我存储列表值

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

我想这么多的时间,但无法修复问题,而且还浏览,但我以前不得到任何适当的帮助,所以请大家帮忙做项目

我需要帮助请一些身体帮助我......!

谢谢你提前

+0

其中来自这个名单? cralfaro

+0

@cralfaro,这个类有一个ruleassignment细节类,我创建List2 – Emad

+0

@cralfaro,我可以填充列表和嵌套列表值表单数据库,这是在List2中,但问题是,当我发送这个值到控制器它不是通过。 – Emad

回答

1

我觉得问题出在你的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 
+0

@ cralfaro,仍然不工作,parameterName&overwriteValue不能实际传递给容器 – Emad

+0

@ cralfaro,添加索引后没有任何事情发生,仍然价值不通过容器,我做先生。?我尝试了数千次,但仍然无法解决问题 – Emad

+0

@Emad也确保您在表单标记中使用的对象的名称在您的POST方法中与ModelAttribute – cralfaro

相关问题