복붙노트

[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. ==============================

    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. ==============================

    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. ==============================

    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. ==============================

    4.나는 오늘이 문제로 어려움을 겪어 왔으며 여기에 설명 된 해결책을 찾아 냈다.

    나는 오늘이 문제로 어려움을 겪어 왔으며 여기에 설명 된 해결책을 찾아 냈다.

  5. from https://stackoverflow.com/questions/890250/better-way-for-dynamic-forms-with-spring by cc-by-sa and MIT license