成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

3.10、在方法參數(shù)上使用@ModelAttribute注解

huhud / 2444人閱讀

摘要:本節(jié)解釋它用在參數(shù)上的情形。一個用在方法參數(shù)上的注解指示了參數(shù)應(yīng)該從模型這里所說的模型指中獲取。方法是一種常用的從數(shù)據(jù)庫中獲取屬性的方式,可以通過使用注解把這種屬性在各個請求之間共享。下一步是數(shù)據(jù)綁定。

??這一部分實例見這個項目的 mvc 分支下的 ModelAttrArgsController.java

??上節(jié)說過,@ModelAttribute可以用在方法或方法參數(shù)上。本節(jié)解釋它用在參數(shù)上的情形。

??一個用在方法參數(shù)上的@ModelAttribute注解指示了參數(shù)應(yīng)該從模型(這里所說的“模型”指 Model)中獲取。如果模型中不存在,參數(shù)會首先被實例化,然后添加到模型中。一旦模型中存在,這個參數(shù)的字段會被所有的名字匹配的請求參數(shù)所填充。這在 Spring MVC 中叫做數(shù)據(jù)綁定,它能夠把你從要對每一個字段進(jìn)行類型轉(zhuǎn)換的繁重體力勞動中解救出來,是非常有用的機制。

@PostMapping("/owners/{ownerId}/pets/{petId}/edit")
public String processSubmit(@ModelAttribute Pet pet) 
{ 
    // ...
}

??上面給出的例子的 Pet 實例來自哪里?這里有一個可選項:

它可能已經(jīng)存在與模型中了,因為使用了@SessionAttributes?—?見“使用@SessionAttributes存儲模型屬性到 HTTP 會話中”一節(jié).

它可能已經(jīng)存在于模型中了,因為同一個控制器中的@ModelAttribute方法,就像上一節(jié)中解釋的那樣。

它可能是從URI模板變量和類型轉(zhuǎn)換器中獲取的(下面會詳細(xì)解釋)。

它可能是使用默認(rèn)構(gòu)造器初始化的。

@ModelAttribute方法是一種常用的從數(shù)據(jù)庫中獲取屬性的方式,可以通過使用@SessionAttributes注解把這種屬性在各個請求之間共享。在一些情況下,可以很方便的通過使用URI模板變量和類型轉(zhuǎn)換器來獲取這些屬性。下面是一個例子:

@PutMapping("/accounts/{account}")
public String save(@ModelAttribute("account") Account account) 
{
    // ...
}

??在這個例子中,模型屬性名(“account”)匹配URI模板變量名。如果你注冊的一個Converter可以把字符串 account 值轉(zhuǎn)換為一個 Account,那么上面的例子即使不需要@ModelAttribute也可以正常工作。

??下一步是數(shù)據(jù)綁定。WebDataBinder類匹配請求參數(shù)名稱——包括請求字符串參數(shù)和表單字段——到屬性字段名。在必須的類型轉(zhuǎn)換(從字符串到目標(biāo)類型字段)之后,匹配的字段收集好了。數(shù)據(jù)綁定和校驗見官方文檔第五章-檢驗、數(shù)據(jù)綁定和類型轉(zhuǎn)換。為控制器自定義數(shù)據(jù)綁定過程見 “自定義WebDataBinder初始化”一節(jié)。

??在數(shù)據(jù)綁定之后,可能會出現(xiàn)一些錯誤,比如缺少必須字段或者類型轉(zhuǎn)換錯誤。為了檢查這些錯誤,你可以緊跟在@ModelAttribute參數(shù)后面添加一個BindingResult參數(shù):

@PostMapping("/owners/{ownerId}/pets/{petId}/edit")
public String processSubmit(@ModelAttribute("pet") Pet pet, BindingResult result) 
{
    if (result.hasErrors()) { return "petForm"; }
    // ...
}

??有了BindingResult之后,你就可以檢查在提交同一個表單時有沒有發(fā)現(xiàn)錯誤,這些錯誤可以通過 Spring 的表單標(biāo)簽來顯示。

??注意到在一些情況下,在 model 中不使用數(shù)據(jù)綁定來訪問一個屬性是很有用的。這種情況下,你可以把Model注入到控制器中,或者在注解上使用綁定標(biāo)記:

@ModelAttribute
public AccountForm setUpForm() { return new AccountForm(); }

@ModelAttribute
public Account findAccount(@PathVariable String accountId) 
{ 
    return accountRepository.findOne(accountId); 
}

@PostMapping("update")
public String update(
        @Valid AccountUpdateForm form, BindingResult result,
        @ModelAttribute(binding=false) Account account) 
{ /* omitted */ }

??除了數(shù)據(jù)綁定,你也可以使用你自己定義的、用來傳遞BindingResult(用于記錄數(shù)據(jù)綁定錯誤)的校驗器調(diào)用校驗這允許數(shù)據(jù)綁定和驗證的錯誤積累在一個地方,隨后報告給用戶:

@PostMapping("/owners/{ownerId}/pets/{petId}/edit")
public String processSubmit(@ModelAttribute("pet") Pet pet, BindingResult result) 
{
    new PetValidator().validate(pet, result);
    if (result.hasErrors()) return "petForm";

    // ...
}

??或者你可以自動調(diào)用校驗,通過添加 JSR-303 的 @Valid 注解:

@PostMapping("/owners/{ownerId}/pets/{petId}/edit")
public String processSubmit(@Valid @ModelAttribute("pet") Pet pet, BindingResult result) 
{
    if (result.hasErrors()) return "petForm";

    // ...
}

??關(guān)于如何配置和使用校驗器,詳見官方文檔的5.8節(jié)“Spring校驗”和第五章 校驗、數(shù)據(jù)綁定和類型轉(zhuǎn)換。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/66040.html

相關(guān)文章

  • 3.9、方法使用@ModelAttribute注解

    摘要:用在方法上的指示那個方法的目的是添加一個或多個模型屬性。在控制器中的方法的調(diào)用時機是在同一個控制器中的方法之前。注意,有兩種形式的方法。注解也可以用在方法上。 ??這一部分翻譯自 Spring 5.0.0.M1 文檔中的 Using @ModelAttribute on a method 一節(jié)。這一節(jié)的演示示例在這個項目的 mvc 分支中的 ModelAttrController.ja...

    王笑朝 評論0 收藏0
  • springmvc常用注解標(biāo)簽詳解

    摘要:分發(fā)處理器將會掃描使用了該注解的類的方法,并檢測該方法是否使用了注解。作用該注解用于將的方法返回的對象,通過適當(dāng)?shù)霓D(zhuǎn)換為指定格式后,寫入到對象的數(shù)據(jù)區(qū)。用于注解層,在類上面注解。使用標(biāo)記的參數(shù)。 1、@Controller 在SpringMVC 中,控制器Controller 負(fù)責(zé)處理由DispatcherServlet 分發(fā)的請求,它把用戶請求的數(shù)據(jù)經(jīng)過業(yè)務(wù)處理層處理之后封裝成一個M...

    notebin 評論0 收藏0
  • 從原理層面掌握@ModelAttribute使用使用篇)【一起學(xué)Spring MVC】

    摘要:和一起使用參照博文從原理層面掌握的使用一起學(xué)。至于具體原因,可以移步這里輔助理解從原理層面掌握的使用核心原理篇一起學(xué)再看下面的變種例子重要訪問。 每篇一句 每個人都應(yīng)該想清楚這個問題:你是祖師爺賞飯吃的,還是靠老天爺賞飯吃的 前言 上篇文章 描繪了@ModelAttribute的核心原理,這篇聚焦在場景使用上,演示@ModelAttribute在不同場景下的使用,以及注意事項(當(dāng)然有些...

    BenCHou 評論0 收藏0
  • 從原理層面掌握@ModelAttribute使用(核心原理篇)【一起學(xué)Spring MVC】

    摘要:雖然它不是必須,但是它是個很好的輔助官方解釋首先看看官方的對它怎么說它將方法參數(shù)方法返回值綁定到的里面。解析注解標(biāo)注的方法參數(shù),并處理標(biāo)注的方法返回值。 每篇一句 我們應(yīng)該做一個:胸中有藍(lán)圖,腳底有計劃的人 前言 Spring MVC提供的基于注釋的編程模型,極大的簡化了web應(yīng)用的開發(fā),我們都是受益者。比如我們在@RestController標(biāo)注的Controller控制器組件上用@...

    wdzgege 評論0 收藏0
  • spring-mvc注解

    摘要:關(guān)鍵注解的關(guān)鍵注解主要有其中主要是用于標(biāo)記該類是一個控制器,用于指示的哪一個類或方法來處理請求動作,即用于標(biāo)識具體的處理器。默認(rèn)已經(jīng)裝配了作為組件的實現(xiàn)類,而由使用,將請求信息轉(zhuǎn)換為對象。 關(guān)鍵注解 springmvc的關(guān)鍵注解主要有@Controller/@RequestMapping/@RequestParam/@PathVariable/@RequestHeader/@Cooki...

    EdwardUp 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<