2015-06-10 28 views
1

海蘭我有CV表單的jsp與他的領域:春多個JSP提供了錯誤的Ajax回調

<form:form commandName="cv" action="${pageContext.request.contextPath}/site/my-account/cv/save" id="cv-template-form" method="POST"> 
<h3><spring:message code="view.candidates.form.workExperience" /></h3> 
    <div id="workExperienceDiv"> 
     <jsp:include page="/WEB-INF/views/site/commons/cv/workExperience.jsp"/> 
    </div> 
    <a href="javascript:void(0);" onclick="AjaxUtils.submitAttribute('${pageContext.request.contextPath}/site/my-account/cv/save/workExperience','workExperienceDiv');" class="btn btn-large btn-block btn-lightgray"> 
     <spring:message code="button.labe.add.more"/> 
    </a> 
<h3><spring:message code="view.candidates.form.education" /></h3> 
    <div id="educationDiv"> 
     <jsp:include page="/WEB-INF/views/site/commons/cv/education.jsp"/> 
    </div> 
    <a href="javascript:void(0);" onclick="AjaxUtils.submitAttribute('${pageContext.request.contextPath}/site/my-account/cv/save/education','educationDiv');" class="btn btn-large btn-block btn-lightgray"> 
     <spring:message code="button.labe.add.more"/> 
    </a> 

工作經驗的jsp:

<%@taglib uri="http://www.springframework.org/tags" prefix="spring"%> 
<%@taglib uri="http://www.springframework.org/tags/form" prefix="form"%> 
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> 

    <c:forEach var="workExperience" items="${cv.workExperiences}" > 
     <div class="row"> 
      <label class="col-md-4"><spring:message code="view.candidates.form.workExperience.employer" /></label> 
      <div class="col-md-8"> 
       <input value="${workExperience.employer}" id="employer" class="text block"/> 
      </div> 
     </div> 

     <div class="row"> 
      <label class="col-md-4"><spring:message code="view.candidates.form.workExperience.period" /></label> 
      <div class="col-md-4"> 
       <div class="datepicker"> 
        <i class="fa fa-calendar"></i> 
        <input value="${workExperience.dateFrom}" class="text block date"/> 
       </div> 
      </div> 
      <div class="col-md-4"> 
       <div class="datepicker"> 
        <i class="fa fa-calendar"></i> 
        <input value="${workExperience.dateTo}" class="text date block"/> 
       </div> 
      </div> 
     </div> 

     <div class="row"> 
      <label class="col-md-4"><spring:message code="view.candidates.form.workExperience.position" /></label> 
      <div class="col-md-8"> 
       <input value="${workExperience.position}" id="position" type="text" class="text block"/> 
      </div> 
     </div> 

     <div class="row"> 
      <label class="col-md-4"><spring:message code="view.candidates.form.workExperience.activities" /></label> 
      <div class="col-md-8"> 
       <textarea class="textarea block">${workExperience.position}</textarea> 
      </div> 
     </div> 

     <div class="row"> 
      <a class="editor_remove" href="#" onclick="AjaxUtils.submitAttribute('${pageContext.request.contextPath}/site/my-account/cv/delete/workExperience/${workExperience.tempId}');"> 
       <i class="fa fa-times"></i>Remove 
      </a> 
     </div> 
    </c:forEach> 

    <div class="row"> 
     <label class="col-md-4"><spring:message code="view.candidates.form.workExperience.employer" /></label> 
     <div class="col-md-8"> 
      <form:errors id="employerError" path="workExperience.employer" cssClass="error"/> 
      <form:input path="workExperience.employer" id="employer" class="text block" cssErrorClass="text block error"/> 
     </div> 
    </div> 

    <div class="row"> 
     <label class="col-md-4"><spring:message code="view.candidates.form.workExperience.period"/></label> 
     <div class="col-md-4"> 
     <form:errors path="workExperience.dateFrom" cssClass="error"/> 
      <div class="datepicker"> 
       <i class="fa fa-calendar"></i> 
       <form:input path="workExperience.dateFrom" cssClass="text block date" cssErrorClass="text block date error" placeholder="From"/> 
      </div> 
     </div> 
     <div class="col-md-4"> 
      <div class="datepicker"> 
       <form:errors path="workExperience.dateTo" cssClass="error"/> 
       <i class="fa fa-calendar"></i> 
       <form:input path="workExperience.dateTo" cssClass="text date block" cssErrorClass="text date block error" placeholder="To"/> 
      </div> 
     </div> 
    </div> 

    <div class="row"> 
     <label class="col-md-4"><spring:message code="view.candidates.form.workExperience.position" /></label> 
     <div class="col-md-8"> 
      <form:errors path="workExperience.position" cssClass="error"/> 
      <form:input path="workExperience.position" id="position" type="text" class="text block" cssErrorClass="text block error"/> 
     </div> 
    </div> 

    <div class="row"> 
     <label class="col-md-4"><spring:message code="view.candidates.form.workExperience.activities" /></label> 
     <div class="col-md-8"> 
      <form:errors path="workExperience.activities" cssClass="error"/> 
      <form:textarea path="workExperience.activities" cssClass="textarea block" cssErrorClass="textarea block error"/> 
     </div> 
    </div> 

AJAX功能:

submitAttribute: function (url1,div){ 
     $.ajax({ 
      type: "POST", 
      url: url1, 
      data: $('#cv-template-form').serialize(), 
      cache: false, 
      success: function(data) { 
       $('#'+div).html(data); 
       Utils.Pikaday.init("input.date"); 
      } 
     }); 
    }, 

教育看起來像workExperience jsp。理論上我想填寫workExperience字段用ajax發送它,並把它放在workExperienceList中,併發回列表和一個新的workExperience。問題是在Ajax回調給我一個錯誤,因爲他不認識workExperience.jsp中的workExperience。 這是錯誤:

SEVERE: Servlet.service() for servlet [spring-mvc-dispatcher] in context with path [/] threw exception [Request processing failed; nested exception is org.apache.tiles.request.render.CannotRenderException: ServletException including path '/WEB-INF/views/site/commons/cv/workExperience.jsp'.] with root cause 
    java.lang.IllegalStateException: Neither BindingResult nor plain target object for bean name 'workExperience' available as request attribute 

如果我在workExperience.jsp換上新形式的CommandName =「CV」它工作正常,但如果我把在教育形成以那麼他不承認第一次,在它將它變爲空。我不希望在workExperience.jsp中放入commandName =「workExperience」,因爲如果我想保存大的cv,那麼他不會將workExperience.jsp字段放在cv對象中。任何解決方案

+0

避免彈簧窗體標籤。使用HTML標籤和EL。 –

+0

我需要彈簧標籤,我無法避免它 – FAndrew

回答

0

我解決了它,它不是很好,但它工作正常我添加ac:如果它是第一次加載大表單然後顯示它沒有workExperience表單,如果它是從java返回的jsp頁面,然後顯示workExperience表單。只有當從java返回workExperience jsp頁面時,變量ajax才爲真。現在這是我的工作經驗表格:

<%@taglib uri="http://www.springframework.org/tags" prefix="spring"%> 
<%@taglib uri="http://www.springframework.org/tags/form" prefix="form"%> 
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> 

<c:set var="index" value="0"/> 
<c:if test="${ajax == true}"> 

    <form:form commandName="cv"> 
     <c:forEach var="workExperience" items="${cv.workExperiences}" > 
      <div class="row"> 
       <label class="col-md-4"><spring:message code="view.candidates.form.workExperience.employer" /></label> 
       <div class="col-md-8"> 
        <form:errors id="employerError" path="workExperiences[${index}].employer" cssClass="error"/> 
        <form:input path="workExperiences[${index}].employer" id="employer" class="text block" cssErrorClass="text block error"/> 
       </div> 
      </div> 

      <div class="row"> 
       <label class="col-md-4"><spring:message code="view.candidates.form.workExperience.period"/></label> 
       <div class="col-md-4"> 
       <form:errors path="workExperiences[${index}].dateFrom" cssClass="error"/> 
        <div class="datepicker"> 
         <i class="fa fa-calendar"></i> 
         <form:input path="workExperiences[${index}].dateFrom" cssClass="text block date" cssErrorClass="text block date error" placeholder="From"/> 
        </div> 
       </div> 
       <div class="col-md-4"> 
        <div class="datepicker"> 
         <form:errors path="workExperiences[${index}].dateTo" cssClass="error"/> 
         <i class="fa fa-calendar"></i> 
         <form:input path="workExperiences[${index}].dateTo" cssClass="text date block" cssErrorClass="text date block error" placeholder="To"/> 
        </div> 
       </div> 
      </div> 

      <div class="row"> 
       <label class="col-md-4"><spring:message code="view.candidates.form.workExperience.position" /></label> 
       <div class="col-md-8"> 
        <form:errors path="workExperiences[${index}].position" cssClass="error"/> 
        <form:input path="workExperiences[${index}].position" id="position" type="text" class="text block" cssErrorClass="text block error"/> 
       </div> 
      </div> 

      <div class="row"> 
       <label class="col-md-4"><spring:message code="view.candidates.form.workExperience.activities" /></label> 
       <div class="col-md-8"> 
        <form:errors path="workExperiences[${index}].activities" cssClass="error"/> 
        <form:textarea path="workExperiences[${index}].activities" cssClass="textarea block" cssErrorClass="textarea block error"/> 
       </div> 
      </div> 

      <c:if test="${index < cv.workExperiences.size()-1 || cv.workExperiences[index].id != null}"> 
       <a class="editor_remove" href="javascript:void(0);" onclick="AjaxUtils.submitAttribute('${pageContext.request.contextPath}/site/my-account/cv/delete/workExperience/${index}','workExperienceDiv');"> 
        <i class="fa fa-times"></i><spring:message code="button.label.remove"/> 
       </a> 
      </c:if> 
      <c:set var="index" value="${index+1}"/> 
     </c:forEach> 
    </form:form> 
</c:if> 

<c:if test="${ajax != true}"> 

    <c:forEach var="workExperience" items="${cv.workExperiences}" > 
     <div class="row"> 
      <label class="col-md-4"><spring:message code="view.candidates.form.workExperience.employer" /></label> 
      <div class="col-md-8"> 
       <form:errors id="employerError" path="workExperiences[${index}].employer" cssClass="error"/> 
       <form:input path="workExperiences[${index}].employer" id="employer" class="text block" cssErrorClass="text block error"/> 
      </div> 
     </div> 

     <div class="row"> 
      <label class="col-md-4"><spring:message code="view.candidates.form.workExperience.period"/></label> 
      <div class="col-md-4"> 
      <form:errors path="workExperiences[${index}].dateFrom" cssClass="error"/> 
       <div class="datepicker"> 
        <i class="fa fa-calendar"></i> 
        <form:input path="workExperiences[${index}].dateFrom" cssClass="text block date" cssErrorClass="text block date error" placeholder="From"/> 
       </div> 
      </div> 
      <div class="col-md-4"> 
       <div class="datepicker"> 
        <form:errors path="workExperiences[${index}].dateTo" cssClass="error"/> 
        <i class="fa fa-calendar"></i> 
        <form:input path="workExperiences[${index}].dateTo" cssClass="text date block" cssErrorClass="text date block error" placeholder="To"/> 
       </div> 
      </div> 
     </div> 

     <div class="row"> 
      <label class="col-md-4"><spring:message code="view.candidates.form.workExperience.position" /></label> 
      <div class="col-md-8"> 
       <form:errors path="workExperiences[${index}].position" cssClass="error"/> 
       <form:input path="workExperiences[${index}].position" id="position" type="text" class="text block" cssErrorClass="text block error"/> 
      </div> 
     </div> 

     <div class="row"> 
      <label class="col-md-4"><spring:message code="view.candidates.form.workExperience.activities" /></label> 
      <div class="col-md-8"> 
       <form:errors path="workExperiences[${index}].activities" cssClass="error"/> 
       <form:textarea path="workExperiences[${index}].activities" cssClass="textarea block" cssErrorClass="textarea block error"/> 
      </div> 
     </div> 

     <c:if test="${index < cv.workExperiences.size()-1 || cv.workExperiences[index].id != null}"> 
      <a class="editor_remove" href="javascript:void(0);" onclick="AjaxUtils.submitAttribute('${pageContext.request.contextPath}/site/my-account/cv/delete/workExperience/${index}','workExperienceDiv');"> 
       <i class="fa fa-times"></i><spring:message code="button.label.remove"/> 
      </a> 
     </c:if> 
     <c:set var="index" value="${index+1}"/> 
    </c:forEach> 
</c:if>