복붙노트

[SPRING] javascript에서 색인을 사용하여 스프링 모델 속성 목록 요소 가져 오기

SPRING

javascript에서 색인을 사용하여 스프링 모델 속성 목록 요소 가져 오기

미안 미안하지만 다른 곳에서 물어 본 적이 있지만 주위를 둘러 보았습니다. 몇 가지 해답을 찾았지 만 완전한 예는 아니며 여전히이 질문에 의문이 있습니다.

그래서, 나는 내 JSP로 내 스프링 컨트롤러에서 Autopopulating 목록을 추가하고 내 javascript / jquery 함수 안에 목록에 항목을 추가하고 싶습니다. 가능한가?

기능을 테스트하기 위해 아래 코드를 시도했지만 작동하지 않았습니다 (목록 요소가 생성 된 html에 전혀 표시되지 않았습니다). 그래서 Im은 javascrit / spring / jsp 구문을 망쳐 놓는 지 아니면 그냥 가능하지 않은지 확실하지 않습니다.

다음은 코드입니다.

컨트롤러 코드 :

@RequestMapping(value="/create_custobject.html",method = RequestMethod.GET)
public ModelAndView showCreateCustObjectPage() {
    Map<String, Object> model = new HashMap<String, Object>();

    CreateObjectForm form = new CreateObjectForm();
    model.put("createObjectform", form);

    return new ModelAndView("create_custobject", model) ;

}

양식 코드 :

public class CreateObjectForm {

      private AutoPopulatingList<Criteria> ruleArray = new AutoPopulatingList<Criteria>(Criteria.class);

     public AutoPopulatingList<Criteria> getRuleArray() {
    return ruleArray;
        }

         public void setRuleArray(AutoPopulatingList<Criteria> ruleArray) {
    this.ruleArray = ruleArray;
        }

         public CreateObjectForm() {}
      }

기준 코드 :

public class Criteria{

   String attribute;

    String operator;
       //... constructor + getters and setters
}

자바 스크립트 / jquery 코드 (JSP 페이지와 동일한 페이지에 있음) :

<script type="text/javascript">
$(document).ready(function(){
    //startup functionality

 var i = 0;
 document.getElementById("addCriteria").onclick = function() {

         $("#msgid").html("${ruleArray[i].attribute}");

        ${ruleArray[i].attribute} = $('#attributeValue').val();             
        ${ruleArray[i].operator} = $('#operatorValue').val(); 

                    i++;            

      }
   }

해결법

  1. ==============================

    1.양식의 기존 항목에 대해 jstl을 다음과 같이 사용하십시오.

    양식의 기존 항목에 대해 jstl을 다음과 같이 사용하십시오.

    <c:forEach items="${form.items}" var="item" varStatus="status" >
    <span class="count" > 
    <form:input   path="items[${status.index}].field" />
    

    이 같은 양식을 렌더링합니다.

    <form id = "idform" >
    <span class="count" > 
        <input   name="items[0].field"  id="items0.field" />
    </span>
    </form>
    

    그럼 당신은 단순히 자바 스크립트와 함께 새로운 형태로 "라인"해당 인덱스

    예를 들면

     var is = $('.count').size()
     $('#idform span:last').after('<span class="count" ><input name="items[' + is + '].field"' + is + '.field" /></span>')
    

    나는 스프링 3 +를 사용한다면 AutopopulatingList를 사용할 필요가 없다고 생각한다. 어떤 컬렉션이라도 충분할 것이다.

  2. ==============================

    2.믹싱 JSP EL 및 Javascript가 부적절합니다. JSP 표현식에서 var i를 사용할 수 없습니다. $ {ruleArray [i] .operator}. JSTL을 사용하여 목록을 반복하고 스크립트 내에서 속성을 만드는 것이 좋습니다.

    믹싱 JSP EL 및 Javascript가 부적절합니다. JSP 표현식에서 var i를 사용할 수 없습니다. $ {ruleArray [i] .operator}. JSTL을 사용하여 목록을 반복하고 스크립트 내에서 속성을 만드는 것이 좋습니다.

    이 시점에서 당신의 스크립트는 식 내에서 문자열 리터럴 0을 사용하도록 설정 될 수 있습니다. 나는 이보다 더 강력한 기능이 필요하다고 가정하고 있습니다. 더 잘 설명 할 수 있습니까?

    $(document).ready(function(){
         document.getElementById("addCriteria").onclick = function() {
    
         $("#msgid").html("${ruleArray[0].attribute}");
    
         //I assume you wanted to set the element to the value pulled from JSP EL
         $('#attributeValue').val(${ruleArray[0].attribute});           
         $('#operatorValue').val(${ruleArray[0].operator});           
    
         }
     }
    

    JSTL을 사용하면 다음과 같은 솔루션을 얻을 수있다.

    <script>
     var criteria = [];
     <c:forEach var="criteria" items=${ruleArray}>
        criteria.push({attr:${criteria.attribute}, oper: ${criteria.operator});
     </c:forEach>
    
     for(var i = 0; i < criteria.length; i++){
      alert(criteria[i].attribute);
     }
    </script>
    

    이 솔루션은 기본적으로 JSTL을 사용하여 자바 스크립트를 작성합니다. JSON을 반환하고 페이지로드시 Ajax 호출 만하도록 컨트롤러를 수정하는 것이 더 좋은 해결책 일 수 있습니다.

  3. ==============================

    3.다음 줄에서 jsp 코드에서 i를 참조하고 있지만 정의되지 않았습니다.

    다음 줄에서 jsp 코드에서 i를 참조하고 있지만 정의되지 않았습니다.

    $("#msgid").html("${ruleArray[i].attribute}");
    

    i를 정의하는 자바 스크립트 코드는 클라이언트 (즉, 브라우저)에서 실행됩니다. jsp 코드는 렌더링 된 html이 클라이언트로 전송되기 전에 서버에서 실행됩니다.

  4. from https://stackoverflow.com/questions/13358950/getting-a-spring-model-attribute-list-element-using-an-index-from-javascript by cc-by-sa and MIT license