2016-11-10 46 views
1

我想填充一個使用Spring和Thymeleaf的Mongo集合中的數據的HTML選擇。我試着按照以下問題提出建議:"how do I populate a drop down with a list using thymeleaf and spring","how to bind an object list with thymeleaf""spring app not finding property on object",但我沒有任何運氣。填充HTML選擇春天,百里香和蒙戈

當我在我的HTML使用這個語法,

<div class="form-group"> 
     <label for="commoditiesSelect"> Commodities: </label> 
     <select multiple="Commodities" id="commoditiesSelect" class="form-control" th:field="*{commodities}"> 
      <option th:each="commodity : ${possibleCommoditiesList}" 
        th:text="${possibleCommodities}" 
        th:value="${possibleCommodities}" 
      /> 
     </select> 
    </div> 

我只是得到了一個空白列表我在網頁上選擇。但是,我知道發送給我的模型的列表中有多個對象(通過調試)。我弄亂了語法,但最接近的是指向網頁上顯示的對象的指針。有誰知道我出錯的地方?下面包括我的控制器,服務實現,PossibleCommodities類和PossibleCommoditiesRepository類。

控制器:

@GetMapping("/welcomeMatForm") 
public String welcomeMatForm(Model model) { 
    List<PossibleCommodities> possibleCommoditiesList = welcomeMatService.getPossibleCommodities(); 
    model.addAttribute("possibleCommoditiesList", possibleCommoditiesList); 
    model.addAttribute("welcomeMatForm", new WelcomeMatForm()); 
    return "welcomeMatForm"; 
} 

服務實現類:

public List<PossibleCommodities> getPossibleCommodities(){ 
    List<PossibleCommodities> listOfCommodities = possibleCommoditiesRepository.findAll(); 
    return listOfCommodities; 
} 

PossibleCommodities類:

package com.sensus.analytics.welcomemat.core.model; 

import org.springframework.data.annotation.TypeAlias; 
import org.springframework.data.mongodb.core.mapping.Document; 

@Document(collection = "possible_commodities") 
@TypeAlias("PossibleCommodities") 
public class PossibleCommodities extends BasicMongoDocument{ 

public String commodityName; 
private int commodityId; 

public String getCommodityName(int commodityId) { 
    return commodityName; 
} 

public void setCommodityName(String commodityName) { 
    this.commodityName = commodityName; 
} 

public int getCommodityId(String commodityName){ 
    return commodityId; 
} 

public void setCommodityId(int commodityId) { 
    this.commodityId = commodityId; 
} 
} 

PossibleCommoditiesRepository類:

package com.sensus.analytics.welcomemat.core.repository; 

import com.sensus.analytics.welcomemat.core.model.PossibleCommodities; 
import org.springframework.data.mongodb.repository.MongoRepository; 
import java.util.List; 

public interface PossibleCommoditiesRepository extends MongoRepository<PossibleCommodities, String> { 
public List<PossibleCommodities> findAll(); 
} 

編輯:我試過了HTML這個共同的語法,以及:

<div class="form-group"> 
     <label for="commoditiesSelect"> Commodities: </label> 
     <select multiple="Commodities" id="commoditiesSelect" class="form-control" th:field="*{commodities}"> 
      <option th:each="commodity : ${possibleCommoditiesList}" 
        th:text="${possibleCommodities.commodityName}" 
        th:value="${possibleCommodities.commodityName}" 
      /> 

     </select> 
    </div> 

,但它給了我這個錯誤:EL1007E:(pos 0): Property or field 'commodityName' cannot be found on null

回答

1

在這樣一條線,你必須知道其中的變量被定義爲:

<option th:each="commodity : ${possibleCommoditiesList}" th:text="${possibleCommodities}" th:value="${possibleCommodities}" /> 

您這裏有3個變量

  • commodity - 由第定義:每個表達式
  • possibleCommoditiesList - 通過將其添加到模型(在控制器中)中所定義
  • possibleCommodities - 不任何地方所定義。這解決爲空,所以你會得到一個空白選項列表。對於第二個示例,錯誤是由thymleaf試圖在空對象上調用getCommodityName()引起的。

由於您日:每次,你指定的變量作爲商品,你可能需要做這樣的事情:

<option th:each="commodity : ${possibleCommoditiesList}" th:text="${commodity.commodityName}" th:value="${commodity.commodityName}" /> 
+0

它的工作!非常感謝你的幫助!!!!! –