문제
나는 스프링 형태를 사용하여 역동적 인 형태를 만들려고 노력하고 있습니다. 기본적으로 양식은 학습 활동의 제목을 얻은 다음 "학습 활동을 하나 더 추가합니다"라는 버튼이 있습니다. 따라서 사용자는 학습 활동을 하나 더 추가 할 수 있습니다. 나는 그가 좋아하는만큼 추가 할 수 있기를 원합니다.
나는 이것을 시도하지 않았으므로 내가 생각한 첫 번째 솔루션으로 오류가 발생했습니다. 나는 정말로 내가 한 일을하는 느낌이 들었지만 오류가 발생할 것이지만 내가하려는 일을 집으로 몰아 넣습니다. 코드는 다음과 같습니다.
<script language="javascript">
fields = 0;
function addInput() {
document.getElementById('text').innerHTML += "<form:input path='activity[fields++].activity'/><br />";
}
<div id="text">
<form:form commandName="course">
Learning Activity 1
<form:input path="activity[0].activity"/>
<input type="button" value="add activity" onclick="addInput()"/>
<br/><br/>
<input type="submit"/>
</form:form>
<br/><br/>
</div>
해결책
당신은 사용할 수 없습니다form:input>
JavaScript 내에서 서버 측에서 실행되는 JSP 태그이기 때문입니다.
그러나 HTML 입력이 스프링 명령 개체의 필드에 어떻게 결합되는지에 대한 마법의 것은 없습니다. 그것은 단지 이름을 기반으로합니다. 따라서 JavaScript에서 새를 추가하십시오<input type="text" name="activity[1].activity">
(예를 들어 - 분명히 인덱스를 증가시킬 것입니다).
보다 복잡한 컨트롤에 사용한 또 다른 옵션은 기존 컨트롤의 HTML (스프링 양식 : 입력 태그를 사용하여 작성)을 잡고 복제 된 숫자를 증분 숫자로 대체하는 것입니다. jQuery를 사용하면 훨씬 쉬워집니다.
추가로 편집 : 문제를 일으킬 수있는 한 가지 문제 : 새로운 입력 상자를 OUTER DIV ( "Text")의 끝까지 추가하고 있습니다. 즉, 양식 태그 내부에 있지 않음을 의미합니다. 작동하지 않습니다.
다른 팁
~이다 <form:input>
JSP 태그? 그렇다면 클라이언트 측 JavaScript를 추가하십시오 <form:input>
서버 측 JSP 엔진이 해석하지 않기 때문에 DOM의 노드는 영향을 미치지 않습니다.
JavaScript는 RAW HTML 및 DOM (예 : <input>
요소.