@RequestMapping(value="https://bbs.csdn.net/toAddPage" , method = RequestMethod.POST)
public String addEmp(@Valid Employee employee , BindingResult result , Model model) {
boolean hasErrors = result.hasErrors();
if(hasErrors) {
List<FieldError> fieldErrors = result.getFieldErrors();
Map<String,Object> errorsMap=new HashMap<>();
for (FieldError fieldError : fieldErrors) {
System.out.println("錯誤訊息提示:"+fieldError.getDefaultMessage());
System.out.println("錯誤的欄位:"+fieldError.getField());
System.out.println(fieldError);
System.out.println("---------------------------------------------------");
errorsMap.put( fieldError.getField() , fieldError.getDefaultMessage() );
}
model.addAttribute("errorInfo",errorsMap);
return "add";
}
System.out.println("要添加的員工:"+employee);
employeeDao.save(employee);
return "redirect:/index.jsp";
}
如果在頁面用<form:errors path="xxxx" />可以取出自定義的國際化之后的錯誤資訊,
但是使用${errorInfo.xxxx }取出來的還是默認的沒有國際化的錯誤資訊,
默認的錯誤資訊就是
BindingResult物件.getFieldErrors().getDefaultMessage()
但是我看了看,BindingResult物件.getFieldErrors()回傳的FieldError物件似乎只有一個獲取DefaultMessage的方法,沒法獲取自定義的國際化的錯誤資訊...
求助,怎么才能用EL運算式在頁面中取出自定義之后的國際化的錯誤提示資訊?
----------
2020-04-13 12:27
終于有思路了,
雖然BindingResult物件.getFieldErrors()回傳的FieldError物件沒有直接提供獲取國際化后的錯誤文本的方法,
但是可以獲取錯誤的代碼,這個錯誤代碼就是國際化資源中的key,在處理器方法獲取國際化文本就行了....

一個用戶只能連續回復三次...所以我把解決方案直接編輯到這里了.
uj5u.com熱心網友回復:
就是這種的自定義的國際化的錯誤資訊:
已經注冊過:
<bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
<property name="basename" value="https://bbs.csdn.net/topics/errors"></property>
<property name="defaultEncoding" value="https://bbs.csdn.net/topics/utf-8"></property>
</bean>
跪謝各位大佬!!!!
uj5u.com熱心網友回復:
我可能有點糊涂,有點鉆牛角尖,
好像如果想實作國際化,就別用el運算式,直接用jstl那個fmt:message就可以了.....
我還懷疑springmvc把國際化之后的文本放到請求域,然后form:errors標簽底層從請求域中獲取
(我順著這個猜想懷疑可以用EL運算式代替form:erros...)
...結果水平太菜,看了半天原始碼也沒找到證據
uj5u.com熱心網友回復:
我想錯了,用fmt:message還是不太合適,似憾訓要往請求域中存放表單中的錯誤的資訊,而且頁面還要判斷是否顯示fmt:message....
求大佬指點,跪謝!!!
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/93206.html
標籤:Java EE
上一篇:JAVA實驗報告
