จะเชื่อมโยงในพารามิเตอร์คำขอคำอธิบายประกอบของ Spring ได้อย่างไร

ฉันมีคอนโทรลเลอร์ที่ใช้คำอธิบายประกอบสำหรับการแมปคำขอและ requestParam

คอนโทรลเลอร์ทำงานได้ดี อย่างไรก็ตาม เมื่อส่งออบเจ็กต์คำสั่งด้วยอาร์เรย์ สปริงจะส่งเสียงออกมาว่า ดัชนีอาร์เรย์อยู่นอกขอบเขต ฉันเดาว่ามีบางอย่างผิดปกติกับการผูก แต่ไม่รู้วิธีแก้ไข

เพื่อให้เจาะจงมากขึ้น ใน eclipse ฉันจะตั้งค่าดีบักเกอร์ที่จุดเริ่มต้นของคอนโทรลเลอร์ และเมื่อส่งแบบฟอร์ม (โดยการกดปุ่มอินพุตส่ง) eclipse debugger จะไม่ทริกเกอร์ และฉันจะเห็น ดัชนีอาร์เรย์อยู่นอกขอบเขต ที่แข็งแกร่งในคอนโซล

คอนโทรลเลอร์มีลักษณะดังนี้:

@RequestMapping(value = {"/internal/pcsearch.dex", "/external/pcsearch.dex"},
        method = {RequestMethod.POST, RequestMethod.GET})
public ModelAndView executeProductCatalogSearch(
        HttpServletRequest request,             
        @RequestParam(value = "cat" ,required = false) String cat,          
        @RequestParam(value = "brand" ,required = false) String brand,
        @ModelAttribute("command") ProductCatalogCommand cmd
        ){

[แก้ไข] และ jsp เป็นเหมือน:

<form name="pForm" 
id="pForm" 
action="<c:url value="psearch.dex"><c:param name="cat" value="${cat}"/></c:url>" 
method="POST" 
style="display:inline;">
...
...
<c:forEach var="model" items="${models}" varStatus="modelLinkStatus">
        <script>
            var modelImg<c:out value="${modelLinkStatus.index}"/>Src = '<c:out value="${model.altModelImage}"/>';
        </script>
        <spring:bind path="command.models[${modelLinkStatus.index}].modelSkusDisplayed">
        <input type="hidden" name="<c:out value="${status.expression}"/>" id="<c:out value="${status.expression}"/>" value="<c:out value="${status.value}"/>"/>
        </spring:bind>  
<spring:bind path="command.updateCartButton">
                                        <input type="submit" value="<spring:message code="orderEntryMessages.ecatalog.button.addToCart" text="Add to Cart" htmlEscape="yes" />" name="<c:out value="${status.expression}"/>" id="<c:out value="${status.expression}"/>" class="sub_buttons"/>
                                    </spring:bind>

...

และวัตถุคำสั่งประกาศอาร์เรย์โมเดลเป็น:

private List<ModelLink> models = new ArrayList<ModelLink>();

โดยที่ modelLink เป็น ds ที่กำหนดเอง

แท็ก foreach แรกจัดการออบเจ็กต์คำสั่ง model และส่วนที่ 2 คือปุ่มส่งที่ฉันคลิก


person Richard Hsu    schedule 03.10.2012    source แหล่งที่มา
comment
คุณสามารถโพสต์คลาส ProductCatalogCommand ได้ไหม และอาจเป็นแบบฟอร์ม jsp ของคุณ   -  person Jigar Parekh    schedule 04.10.2012


คำตอบ (1)


ฉันคิดว่าคุณควรใช้ AutoPopulatingList เป็นแบบจำลองในการผูกรายการเพื่อดูและควบคุม ตัวอย่างเช่น โปรดดูลิงก์ นี่อาจช่วยแก้ปัญหาดัชนีของคุณ

person Jigar Parekh    schedule 04.10.2012