其實SpringMVC中的頁面國際化與上一章的驗證國際化基本上一致。
1.對頁面進行國際化
1)首先我們在Spring設定檔中加入國際化bean設定
<!-- 注册国际化信息,必须有id,指定资源文件名称,资源文件在src目录下 --> <bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource"> <property name="basename" value="i18n"></property> </bean> <!-- 配置LocalResolver用来获取本地化语言 --> <bean id="localeResolver" class="org.springframework.web.servlet.i18n.SessionLocaleResolver"></bean> <!-- 配置LocaleChanceInterceptor拦截器 --> <mvc:interceptors> <bean class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor" /> </mvc:interceptors>
2)然後加入我們的資源文件,這個資源文件的前綴要與我們上面配置的bean的value相同。
我們在資源文件寫入我們需要國際化的內容
然後我們在跳頁的時候需要載入國際化資源
@RequestMapping(value="login",method=RequestMethod.GET) public String login(Locale locale,Map<String ,Object> map){ String name = messageSource.getMessage("name", null, locale); String pass = messageSource.getMessage("pass", null, locale); String title = messageSource.getMessage("title", null, locale); String submit = messageSource.getMessage("submit", null, locale); map.put("title", title); map.put("pass", pass); map.put("name", name); map.put("submit", submit); map.put("user", new User()); return "login"; }
我們在頁面中可以使用jstl或spring標籤資料國際化訊息,spring中的form標籤是用來輸入spring驗證錯誤之後的提示訊息(上章有提過)
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%> <%@ taglib uri="http://www.springframework.org/tags" prefix="spring" %> <%@ taglib uri="http://www.springframework.org/tags/form" prefix="form" %>
然後我們頁面中的國際化訊息可以這顯示出來
<form:form action="login" method="post" commandName="user"> <fmt:message key="name"/> <form:input path="username"/> <form:errors path="username"/> <br> <fmt:message key="pass"/> <form:input path="userpass"/> <input type="submit" value="<spring:message code="submit"/>"> </form:form>
我們還可以完成一個語言切換功能,我們在頁面上加入兩個超連結,當接收到請求,SpringMVC會在上下文中查找一個本地解析器,找到後使用它獲取請求所對應的本地化類型信息,SpringMVC還允許還允許裝配一個動態更改本地化類型的攔截器,這樣通過指定一個請求參數就可以控制單一請求的本地化類型。
<a href="login?locale=zh_CN">中文</a> <a href="login?locale=en_US">英文</a>
SpringMVC接到請求後首先會判斷有沒有這個參數,如果有這個參數就加入到session裡面,如果沒這個參數會到session裡面去找,session裡面沒有找到會預設讀取瀏覽器的語言。
2.檔案上傳
SpringMVC的檔案上傳非常的簡單,它直接提供了直接的支持,這種支援是透過即插即用的MultipartResolver介面實現的。 Spring用它的實作類別CommonsMultipartResolver來實作。 SpringMVC上下文中沒有自動組裝所以需要我們手動來設定。我們這裡就直接實作一個多檔案上傳,多檔案上傳會了害怕單一檔案上傳不會?
配置之前我們先來導入檔案上傳的jar包,這些包在我們spring中是沒有的。
然後我們手動設定下Bean
<!-- 配置文件上传 --> <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> <!-- 指定默认的编码格式 --> <property name="defaultEncoding" value="UTF-8" /> <!-- 指定允许上传的文件大小,单位Byte --> <property name="maxUploadSize" value="512000" /> </bean>
這個bean裡還可以設定類型啊什麼的,有需要的可以閱讀原始碼。
<form action="${pageContext.request.contextPath}/upload" method="post" enctype="multipart/form-data"> <input type="file" name="file"/><br> <input type="file" name="file"/><br> <input type="file" name="file"/><br> <input type="submit" value="submit"> </form>
enctype="multipart/form-data" 注意檔案上傳必須加上這個,而且必須是post請求。
然後我們來看下我們伺服器是怎麼接收到檔案的,多重檔案上傳使用 MultipartFile[] 並且一定要在參數前加上註解 @RequestParam("file")否則會報錯。 單一檔案上傳我們只需要使用一個MultipartFile對象,而無需加註解。
/** * 单文件上传 : MultipartFile file * 多文件上传 : @RequestParam("file") MultipartFile[] file * 多文件上传必须加上 @RequestParam("file")注解否则会报错 * @author:MiYa. * @time:2018-9-28 11:50 */ @RequestMapping(value="upload",method=RequestMethod.POST) public String testFileUpload(HttpServletRequest request , @RequestParam("file") MultipartFile[] file){ for (int i = 0; i < file.length; i++) { MultipartFile multipartFile = file[i]; System.out.println(" ContentType: " + multipartFile.getContentType()); System.out.println(" Name: " + multipartFile.getName()); System.out.println(" OriginalFilename: " + multipartFile.getOriginalFilename()); System.out.println(" Size: " + multipartFile.getSize()); //判断是否提交文件,如果没有那么跳过上传 if(multipartFile.isEmpty()){ continue; } // 获取文件的上传路径 String uploadpath = request.getServletContext().getRealPath("uploads"); //获取文件名称 String filename = multipartFile.getOriginalFilename(); //截取文件后缀 String fileext = filename.substring(filename.lastIndexOf(".")); //生成新的随机文件名称 String newfileName = UUID.randomUUID() + fileext; //文件保存路径 File savepath = new File(uploadpath + "/" + newfileName); //上传文件 try { multipartFile.transferTo(savepath); } catch (IllegalStateException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } return "welcome"; }
整理下MultipartFile常用的方法:
isEmpty():判斷是否提交文件上來
#getContextType():獲取檔案類型
getName():取得表單元素名稱
getOriginalFilename():取得檔案名稱
getSize():取得檔案大小
#getBytes( ):取得位元組數組
以上是SpringMVC中頁面國際化與文件上傳的介紹(附程式碼)的詳細內容。更多資訊請關注PHP中文網其他相關文章!