2013-08-27 70 views
2

請幫我在這。從視圖頁面傳遞對象到Spring控制器

我需要從視圖頁面傳遞一個複雜的對象到Spring控制器......我想使用的ModelAttribute(查看頁面使用thymeleaf內置+ HTML)..

我的問題是該對象是作爲傳遞字符串,而不是實際的對象,這會在控制器端造成異常。在下面的例如「類別」是一個複雜的對象,其中包含list,array,String和其他對象作爲變量。類別作爲字符串而不是對象本身傳遞。如何將此對象傳遞給控制器​​。

@Controller 
public class QController extends WZController{ 

    @RequestMapping(value = "/refreshfacets") 
    public String refreshfacets(HttpServletRequest request, HttpServletResponse response, Model model, 
      @ModelAttribute("refreshFacetsRequest") refreshFacetsRequestDTO refreshfacetsrequest) throws Exception { 
     Map<String, Object> responseMap = new HashMap<String, Object>(); 
     ProductSearchResult productsearchresult = new ProductSearchResult(); 
     //super.refreshFacets(request, response, model, productsearchresult); 
     return XXXX; 
    } 
} 


public class refreshFacetsRequestDTO { 

    private static final long serialVersionUID = 1L; 

    private Category category; 
    private String state; 
    private String program; 
    private String subject; 
    private String year; 
    private String price; 
     Constructor, getter, setter methods; 
} 

<div th:remove="tag"> 
    <form method="post" id="form1" th:action="@{/refreshfacets}" th:object="${refreshFacetsRequest}"> 
    <input type="hidden" id="category" name="category" th:if="${category}" th:value="${category}"/> 
    <input type="text" id="state" name="state" th:if="${state}" th:value="${state}"/> 
    <input type="text" id="program" name="program" th:if="${program}" th:value="${program}"/> 
    <input type="text" id="subject" name="subject" th:if="${subject}" th:value="${subject}"/> 
    <input type="submit" th:attr="onsubmit=${'doAjaxPost()'}"></input> 
    </form> 
</div> 

請對此建議。除了要傳遞對象的模型屬性以外的其他任何選項也可以。如果是的話請詳細說明烏爾其他選項

+0

我不知道是什麼'日:表單標籤:object'做,但彈簧模型屬性對象只帶彈簧的工作。 –

+0

@BhashitParikh'th'前綴是'Thymeleaf'。我們可以假設OP正在使用'ThymeleafViewResolver'。模型屬性最終在請求屬性中,所以它們在那裏也可用。 –

+0

@SotiriosDelimanolis u能幫助我在這...模型屬性作爲字符串傳遞,我希望它是對象... – user1611575

回答

1

你似乎想用Thymeleaf的選擇表達th:object="${refreshFacetsRequest}"。這個符號是*{someField}。相應地更改您的元素

<input type="hidden" id="category" name="category" th:if="*{category}" th:value="*{category}"/> 

以上將解析爲${refreshFacetsRequest.category}

編輯

從去查看到控制器,你正在做的是讓你的瀏覽器發送一個HTTP請求到HTTP服務器(servlet容器)是什麼。這裏沒有對象的概念。名稱爲category<input>字段將作爲HTTP POST中的請求參數傳遞。

春天通常是足夠聰明的請求參數轉換爲對象,但它需要的一些信息。 Category是枚舉嗎?如果是,Spring將嘗試使用Category.valueOf(requestParam)來轉換它。如果它是一個類,它會嘗試使用具有符合Category類的字段名稱實例並設置它在您與@ModelAttribute宣佈refreshFacetsRequestDTO對象等請求參數。

我不太明白你的意思檢索值是一個字符串值我。是否有錯誤消息?

+0

號。ümisundetstood我的問題..對不起我的英文不好..烏爾答案工程時,通從控制器到查看頁面的值,但我想要將值從查看頁面傳遞給控制器​​..那裏$ {category}將從請求屬性類別中檢索值並將其存儲在可以在控制器中檢索的$ {refreshFacetsRequest}模型屬性中。這是我的想法..我的問題是檢索值是一個字符串值,而不是對象本身(類別對象)... – user1611575

+0

@ user1611575請參閱我的編輯。 –

相關問題