क्या कोई कृपया नीचे की सहायता कर सकता है? मेरे पास एक ऑर्डर ऑब्जेक्ट और आइटम ऑब्जेक्ट है जहां कई से कई संबंध हैं, मैं ऑर्डर की वस्तुओं के माध्यम से पुनरावृति करना चाहता हूं और उन्हें वेब पर पूर्वावलोकन करना चाहता हूं, नीचे आप मॉडल और नियंत्रक देख सकते हैं (वसंत एमवीसी का उपयोग करके) कोई मार्गदर्शन कर सकता है मुझे यह कैसे किया जा सकता है, मैंने बहुत कुछ खोजा लेकिन उचित तरीका नहीं ढूंढ पाया।

प्राप्त करने में त्रुटि

Error I'm getting is: Caused by: org.springframework.expression.spel.SpelEvaluationException: EL1008E: Property or field 'id' cannot be found on object of type 'org.hibernate.collection.internal.PersistentSet' - maybe not public or not valid?

मेरी इकाई वर्ग है

    @Entity
    public class OrderDetail extends Order{

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    private String branchCode;
    private String ord;
    private String eiclientNumber;
    private String clientOrderNumber;
    private String consigneeP;
    private String paymentTerms;
    private String earliestShipDate;
    private String latestShipDate;
    private String consigneeCode;
    private String billToCode;
    private String thirdPartyBillToCustomerNo;
    private String preferredCarrier;
    private String usd1;
    private String usd2;

    @ManyToMany(mappedBy = "orderDetails")
    private Set<ItemDetail>  itemDetails = new HashSet<>();

}

और एक और है

  @Entity
    public class ItemDetail extends Order{

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;

    private String branchCode;
    private String ordNo;
    private String detail;
    private String lineNumber;
    private String skuNumber;
    private String qty;
    private String lotNo;
    private String receiptPo;
    private String usd1;
    private String usd2;
    private String usd3;
    private String usd4;


    @ManyToMany
    @JoinTable(name = "order_item", joinColumns = @JoinColumn(name = "item_id"), inverseJoinColumns = @JoinColumn(name = "order_id"))
    private Set<OrderDetail> orderDetails = new HashSet<>();
 }

और यह मेरे नियंत्रक की विधि है

@RequestMapping("orders/items")
   public String listItems(Model model){

   List<OrderDetail>  orderDetails = new ArrayList<>();
    orderDetails = orderService.listAll();
    model.addAttribute("items",orderDetails);

    return "orders/items";
}

और मेरा एचटीएमएल कोड है

<table class="table table-hover ">
                            <thead class="thead-inverse">
                                <tr>
                                    <th>ID</th>
                                    <th>Branch Code</th>
                                   <!-- <th>Ord No</th>
                                    <th>Detail</th>-->
                                    <th>Line Number</th>
                                    <!--<th>SKU Number</th>
                                    <th>Qty</th>
                                    <th>Lot No</th>
                                    <th>Receipt Po</th>
                                    <th>USD1</th>
                                    <th>USD2</th>
                                    <th>USD3</th>
                                    <th>USD4</th>-->
                                </tr>
                            </thead>
                                <tr th:each="item : ${orders.itemDetails}">
                                    <td th:text="${item.id}">123</td>
                                    <td th:text="${item.branchCode}">BEY</td>
                                    <!--<td th:text="${item.ordNo}">G012345</td>
                                    <td th:text="${item.detail}">PO123</td>-->
                                    <td th:text="${item.lineNumber}">123</td>
                                    <!--<td th:text="${item.skuNumber}">SKU123</td>
                                    <td th:text="${item.qty}">25</td>
                                    <td th:text="${item.receiptPo}">PO123</td>
                                    <td th:text="${item.usd1}">123</td>
                                    <td th:text="${item.usd2}">1234</td>
                                    <td th:text="${item.usd3}">123456789</td>
                                    <td th:text="${item.usd4}">123456789</td>-->

                                </tr>
                        </table>
0
Elias Khattar 16 सितंबर 2019, 11:16

1 उत्तर

सबसे बढ़िया उत्तर

सबसे पहले अपने डिजाइन पर काम करें। आप निकाय ऑब्जेक्ट को दृश्य में भेज रहे हैं, जिसकी अनुशंसा नहीं की जाती है। डीटीओ ऑब्जेक्ट को दृश्य के साथ बांधें।

नेस्टेड पुनरावृत्ति के संबंध में: मान लें कि हमारे पास एक आदेश वस्तु है जिसमें OrderDetail obejct की सूची है (आपके मामले में OrderDetail का सेट)

हम मॉडल में आदेश की एक सूची ऑब्जेक्ट जोड़ रहे हैं। हम इस आदेश सूची और आदेश विवरण की सूची को पुनरावृत्त करना चाहते हैं जो प्रत्येक आदेश में है। अजवायन की पत्ती का टुकड़ा निम्नलिखित की तरह होगा

    <tr>
        <th>OrderId</th>
        <th>OrderDescription</th>
        <th>Details</th>
    </tr>
    <tr th:each="order : ${orders}" th:id="'order' + ${order.id}">
        <td th:text="${order.id}">id</td>
        <td th:text="${order.description}">description</td>
        <td>
            <table>
                <tr>
                    <th>DetailId</th>
                    <th>DetailDescription</th>
                </tr>
                <tr th:each="detail: ${order.details}">
                    <td th:text="${detail.id}">id</td>
                    <td th:text="${detail.description}">description</td>
                </tr>
            </table>
        </td>
    </tr>

और आउटपुट निम्नलिखित की तरह होगा।

enter image description here

0
Ramjan Ali 16 सितंबर 2019, 09:36