2016-03-30 16 views
3

java.lang.IllegalStateException: BindingResult ne de ben Thymeleaf ve Spring MVC ve ben kullanıyorumjava.lang.IllegalStateException: BindingResult ne de ajax çağrısında düz hedef nesne Ne

ajax çağrısında düz hedef nesne Ne bazı sorunlar yaşıyorum dinamik bir formla. Seçiciye sahip bir formum var ve bu değiştiğinde, başka bir seçici ve bir alan göstermesi gereken bir Ajax çağrısı yapıyorum.

public class SaleMini{ 
    private int businessId; 
    private int sellerId; 
    private int productId; 
    private int amount; 
    private int row; 
    private String date; 
    private List<SaleItem> item; 
    //getters and setters 
} 

public class SaleItem{ 
    private int productId; 
    private int amount; 
    private boolean gift; 
    private List<Integer> components; 
    private List<Composition> compositionList; 
    //getters and setters 

}

Benim html kodudur:

ben bu nesneleri var

<form id="sales" action="#" th:action="@{/sales/add}" method="post">      
    <div class="row"> 
    <div class="form-group col-md-6"> 
     <label class="label-control" th:text="#{label.equipment}"></label> 
     <select th:field="${sales.businessId}" class="form-control" onchange="submitData()"> <!--- Equipment List ---> 
      <option th:each="e : ${equipmentList}" th:value="${e.id}" th:text="${e.name}"></option> 
     </select> 
    </div> 

     <div class="form-group col-md-6"> 
     <label class="label-control" th:text="#{label.seller}"></label> 
     <select th:field="${sales.sellerId}" class="form-control"> 
      <option th:each="s : ${sellerList}" th:value="${s.id}" th:text="${s.name + ' ' + s.surname}"></option> 
     </select> 
     </div> 
    </div> 

    <div id="product-panel" class="row" > 
    <div th:fragment="resultsList"> 
     <div th:each="i,rowStat : ${itemList}"> 
      <p th:text="${i.productId}"></p> 
       <select class="form-control products_select" th:field="${i.productId}" th:onchange="${'javascript:callComposed(' + rowStat.index + ')'}" > 
        <option value="0" >Select Product</option> 
        <option th:each="p : ${productList}" th:value="${p.id}" th:text="${p.name}" th:attr="data-compound=${p.compound},data-generic=${p.genericId}"></option> 
       </select> 
      </div> 
      <a class="btn btn-action" id="btn-add" onclick="submitData()" style="margin-top: 25px !important;"><span class="fa fa-plus fa-btn"></span></a> <!--I should add as many product as I wanted--> 
    </div>      
    </div> 

    <div class="row"> 
     <div class="form-btn"> 
     <input type="submit" th:value="#{label.save.sale}" class="btn btn-custom"/> 
     </div> 
    </div> 
</form> 

Ekipman Listesi değişikliği olduğunda, ben bir ajax arama yapmak

function submitData(){ 
$.ajax({ 
    'url': 'sales/addRow', 
    'type': 'POST', 
    'data': $('#sales').serialize(), 
    'success': function(result){ 
     $("#product-panel").html(result); 
    }, 
}); 
} 

Çağırdığım işlev Denetleyicinin üzerinde:

@RequestMapping(value = "/addRow", method = RequestMethod.POST) 
public String addRow(@Valid SaleMini sale, BindingResult bindingResult,ModelMap model) {  

    List<SaleItem> siList = new ArrayList<SaleItem>(); 

    if(sale!=null && sale.getBusinessId()!=0) 
    { 
     SaleItem si = new SaleItem(); 
     si.setAmount(1); 
     siList.add(si); 

    } 
    model.addAttribute("itemList", siList); 
    return folder+"/add :: resultsList"; 
} 

Sorun şu anda submitData() öğesini çağırıyorum.

ben (o submitData() ve AddRow) kontrolör kuyuya çağrısı yapabilir ve bu çalışıyor, ama veri almak zaman var ve hata:

java.lang.IllegalStateException: BindingResult ne de ne bean name 'i' için düz hedef nesne istek özniteliği olarak kullanılabilir Aramadan sonra verileri alıyorum, ancak th: alanı ile erişemiyorum: field

Bu html bölümünde (th: text) çalışır:

( ) ield) ve nedenini bilmiyorum:
<select class="form-control products_select" th:field="${i.productId}" th:onchange="${'javascript:callComposed(' + rowStat.index + ')'}" > 
</select> 

ben size formda detayların birkaç eksik olduğunu düşünüyorum peşin

cevap

0

yılında Hi teşekkür ederiz. Bu inci ile: Nesne = "satış" sen * {attribute.path}

<form id="sales" action="#" th:action="@{/sales/add}" method="post" th:object="sale"> 

Ve formun ModelAttribute olacak ve sadece kullanmak o nesnenin herhangi bir özelliğinden başvuru yapmak ne demek * ya inci olmadan nesne ve sonra kullanın:: nesne ve $ indiriminizin nesne kullanım özelliklerine başvuru yapmak için:

<select th:field="*{businessId}" class="form-control" onchange="submitData()"> <!--- Equipment List ---> 
     <option th:each="e : ${equipmentList}" th:value="${e.id}" th:text="${e.name}"></option> 
    </select> 
+0

teşekkür, ama ben zaten o denedi ve ben inci kullanırsak aynıdır – Zuri

İlgili konular