मैं एक स्प्रिंग एमवीसी वेब ऐप पर काम कर रहा हूं और मैं उस प्रकार की संपत्ति को प्रदर्शित करने का एक तरीका जानने का प्रयास कर रहा हूं जो प्रश्न में इकाई का हिस्सा है। शेष गुणों (स्ट्रिंग, बूलियन, इंट, आदि) के लिए मैं जेएसपी फ़ाइल से दूर हो सकता हूं, बस उन्हें प्रदर्शित करने के लिए इस तरह कुछ उपयोग कर सकता हूं:

<li>
    <label for="active">Active :  </label>
    <form:checkbox path="active" id="active" disabled="true"/>
    <span><form:errors path="active" cssClass="error"/></span>
</li>

हालांकि, इकाई की संपत्ति के लिए जो अन्य इकाइयों का एक सेट है, मैं यह नहीं समझ सकता कि इसे कैसे प्रदर्शित किया जाए। मैं किसी प्रकार की उप-तालिका का उपयोग करने के बारे में सोच रहा हूं, लेकिन बिना किसी सफलता के मैंने इसके साथ बहुत कुछ किया। मैंने Google को खोजने की कोशिश की और मुझे वह नहीं मिला जो मुझे चाहिए।

धन्यवाद!

* नई समस्या, लेकिन वहां पहुंचना! **

माई ऑर्डर्डमेड क्लास में स्ट्रेंथयूनिट प्रकार की संपत्ति है और मैं नीचे दी गई टिप्पणियों में विधि का उपयोग करके इसका नाम प्रदर्शित करने में सक्षम हूं:

<li>
                            <label for="meds[${loop.index}].strengthUnit.name">Strength Units : </label> 
                            <form:input path="meds[${loop.index}].strengthUnit.name"/> 
                            <form:errors path="meds[${loop.index}].strengthUnit.name" cssClass="error" /> 
                        </li>

हालांकि, मुझे इसे एक ड्रॉप-डाउन होने की आवश्यकता है जिसे उपयोगकर्ता बदल सकता है। मेरी मेड इकाई में स्ट्रेंथयूनिट प्रकार की एक संपत्ति भी है और मैं नियंत्रक से सभी शक्ति इकाइयों की सूची भेजकर और निम्नलिखित कोड का उपयोग करके अपने संबंधित संपादन पृष्ठ में जो चाहता हूं उसे पूरा करने में सक्षम हूं:

<select name="strengthUnit" path="strengthUnit.name" id="strengthUnit">
                                <option value="0" ${med.strengthUnit eq null ? 'selected' : ''}></option>
                                <c:forEach items="${strengthUnits}" var="strengthUnitSingle">
                                    <option value="${strengthUnitSingle.id}" ${med.strengthUnit.name eq strengthUnitSingle.name ? 'selected' : ''}>${strengthUnitSingle.name}</option>
                                </c:forEach>
                            </select>

मैं इस इकाई के साथ वही काम करने की कोशिश कर रहा हूं और टिप्पणियों में सुझाई गई विधि का उपयोग करके मैं इसे काम नहीं कर सकता। मैं नीचे दिए गए कोड की कोशिश कर रहा हूँ:

<select name="strengthUnit" path="strengthUnit.name" id="strengthUnit">
                                <option value="0" ${meds[loop.index].strengthUnit eq null ? 'selected' : ''}></option>
                                <c:forEach items="${strengthUnits}" var="strengthUnitSingle">
                                    <option value="${strengthUnitSingle.id}" ${meds[loop.index].strengthUnit.name eq strengthUnitSingle.name ? 'selected' : ''}>${strengthUnitSingle.name}</option>
                                </c:forEach>
                            </select>

अब मुझे यह अपवाद फिर से मिल रहा है:

javax.el.PropertyNotFoundException: Property '0' not found on type mdhis_webclient.entity.OrderedMed

मैं सेट की अनुक्रमणिका तक पहुंचने के लिए उसी विधि का उपयोग कर रहा हूं, मैं क्या गलत कर रहा हूं?

धन्यवाद!

0
Martin 6 नवम्बर 2017, 17:22

2 जवाब

आपको शायद varStatus के साथ प्रत्येक लूप के लिए आवश्यकता होगी, उदाहरण:

<c:forEach var="yourVar" items="${yourList}" varStatus="loop" >
    <label for="yourVar[${loop.index}].something">Something ${loop.index + 1}</label>
    <form:input path="yourVar[${loop.index}].someting" cssClass="form-control" autocomplete="off" />
    <form:errors path="yourVar[${loop.index}].something" cssClass="text-danger" />
</c:forEach>
0
craigwor 6 नवम्बर 2017, 17:39
आपके उत्तर के लिए धन्यवाद। मैंने इसे एक शॉट दिया और NotReadablePropertyException प्राप्त कर रहा था। मूल रूप से मेरी इकाई प्रकार की है एक सेट के साथ ऑर्डर करें संपत्ति। प्रत्येक ऑर्डर किए गए मेड में एक मेड संपत्ति होती है जिसमें टर्म में एक सामान्य नाम होता है और यही वह है जो मैं चाहता हूं कि मेरा फॉर्म प्रदर्शित हो। फॉर्म के लिए मेरा मॉडल एट्रिब्यूट "ऑर्डर" है। यहाँ मैंने जो कोशिश की है:
 – 
Martin
6 नवम्बर 2017, 17:50
<लेबल for="orderedMed[${loop.index}].med.genericName">${orderedMed.med.genericName} ${loop.index + 1}
 – 
Martin
6 नवम्बर 2017, 17:52
मेरी टिप्पणी में भयानक कोड स्वरूपण के लिए खेद है
 – 
Martin
6 नवम्बर 2017, 17:53
पूर्ण अपवाद: org.springframework.beans.NotReadablePropertyException: बीन वर्ग की अमान्य संपत्ति 'orderedMed[0]' [mdhis_webclient.entity.PRNOrder]: बीन संपत्ति 'orderedMed[0]' पढ़ने योग्य नहीं है या इसमें अमान्य गेट्टर विधि है: गेटर का रिटर्न प्रकार सेटर के पैरामीटर प्रकार से मेल खाता है?
 – 
Martin
6 नवम्बर 2017, 17:55
तो मुझे लगता है कि मुझे आपका मॉडल सही मिला है, इसलिए निम्नलिखित का प्रयास करें: <form:form modelAttribute="order"> <c:forEach var="meds" items="${order.orderedMeds}" varStatus="loop" > <label for="orderedMeds[${loop.index}].genericName">${meds.genericName}</label> <form:input path="orderedMeds[${loop.index}].genericName" cssClass="form-control" autocomplete="off" /> <form:errors path="orderedMeds[${loop.index}].genericName" cssClass="text-danger" /> </c:forEach> </form:form> हालांकि फॉर्म मॉडल ऑर्डर है, फिर भी आपको इसके बारे में प्रत्येक लूप को सीधे बताना होगा।
 – 
craigwor
6 नवम्बर 2017, 17:57

मेरे प्रश्न के दूसरे भाग के लिए, मुझे यही चाहिए! मुझे बस अपनी स्ट्रेंथयूनिट इकाई के लिए एक toString() विधि की आवश्यकता है (वे सभी के पास वैसे भी एक होना चाहिए!)

<form:select name="strengthUnit" path="meds[${loop.index}].strengthUnit.name" id="strengthUnit">
    <form:option value="0" label=""></form:option>
    <form:options items="${strengthUnits}" />
</form:select>
0
Martin 6 नवम्बर 2017, 20:07