[SPRING] 스프링을 이용한 동적 폼을위한 더 좋은 방법은?
SPRING스프링을 이용한 동적 폼을위한 더 좋은 방법은?
SpringMVC 및 Spring 양식을 사용할 때 동적 양식 (js를 통해 dom에 양식 항목 추가)을 처리하는 더 쉽고 / 더 나은 방법이 있다면 궁금한가요?
많은 LineItem을 가진 Invoice 객체를 갖는 이미징.
public class Invocie {
private List LineItems;
public Invoice() {
lineItems = ListUtils.lazyList(new ArrayList<LineItem>(), FactoryUtils.instantiateFactory(LineItem.class));
}
}
현재 사용중인 인보이스에 속한 항목을 표시하려면
<forEach items="${invoice.lineItems}" varStatus="i">
<form:input path="lineItems[${i.index}].productName" />
</c:forEach>
LineItem을 추가하려면 새 인덱스를 계산하고이를 DOM에 추가하는 JS가 있어야합니다. LineItem을 삭제할 때 현재 모든 인덱스의 번호를 다시 매겨야하며 그 부분은 피하고 싶습니다.
해결법
-
==============================
1.클라이언트 측에서 jQuery를 사용하여이 문제를 해결하는 데 도움이되는 자습서를 구현했으며 객체를 형성하는 스프링 자동 채우기 목록을 지원합니다.
클라이언트 측에서 jQuery를 사용하여이 문제를 해결하는 데 도움이되는 자습서를 구현했으며 객체를 형성하는 스프링 자동 채우기 목록을 지원합니다.
http://eggsylife.co.uk/2009/11/30/spring-forms-dynamic-lists-and-ajax/
편집하다 Webarchive의 링크 https://web.archive.org/web/20160729163958/http://eggsylife.co.uk/2009/11/30/spring-forms-dynamic-lists-and-ajax/
-
==============================
2.당신은 다음을 사용할 수 있습니다.
당신은 다음을 사용할 수 있습니다.
public class InvoiceController extends SimpleFormController { protected void initBinder(HttpServletRequest request, ServletRequetDataBinder binder) throws Exception { binder.registerCustomEditor(List.class, "lineItems", new CustomCollectionEditor(List.class)() { protected Object convertElement(Object lineItem) { LineItem li = (LineItem) lineItem; // StringUtils is a jakarta Commons lang static class return (StringUtils.isBlank(li.getProductName())) ? null : li; } }); } }
그런 다음 onBind 메서드에서 다음에 따라 null 참조를 제거합니다.
protected void onBind(HttpServletRequest request, Object command, BindException bindException) throws Exception { Invoice invoice = (Invoice) command; invoice.getLineItems().removeAll(Collections.singletonList(null)); }
문안 인사,
-
==============================
3.JSP에서 항목을 추가 / 설정할 때 오류가 발생하지 않도록하려면 GrowthList로 꾸미는 것이 필요하다는 것을 발견했습니다. (또한 기본적으로 이중 장식을하는 사용자 정의 SpringList impl을 만들었습니다.)
JSP에서 항목을 추가 / 설정할 때 오류가 발생하지 않도록하려면 GrowthList로 꾸미는 것이 필요하다는 것을 발견했습니다. (또한 기본적으로 이중 장식을하는 사용자 정의 SpringList impl을 만들었습니다.)
lineItems = GrowthList.decorate(ListUtils.lazyList(new ArrayList<LineItem>(), FactoryUtils.instantiateFactory(LineItem.class)));
동의한다. 문제는 확실히 항목을 제거하는 것입니다.
HTML에서 봄 마커 구문을 사용하면됩니다. 따라서 자바 스크립트를 사용하여 목록에서 항목 (예 : 색인 2)을 제거하면 해당 색인을 다음과 같이 표시합니다.
<input type="hidden" name="_lineItems[2]">
그런 다음 양식이 제출되면 봄은 마커를보고 lineItems2를 무시하는 대신 빈 항목 (lazylist 팩토리를 기반으로 함)에 넣습니다.
-
==============================
4.나는 오늘이 문제로 어려움을 겪어 왔으며 여기에 설명 된 해결책을 찾아 냈다.
나는 오늘이 문제로 어려움을 겪어 왔으며 여기에 설명 된 해결책을 찾아 냈다.
from https://stackoverflow.com/questions/890250/better-way-for-dynamic-forms-with-spring by cc-by-sa and MIT license