""中文編程"知乎專欄原文" 源碼: "program in chinese/jinxiaocun" 由於這個演示項目成型於去年(詳見 "中文編程的嘗試歷程小記" ), Spring Boot還是老版本. 尚未將其更新到最新版本, 先將其中的一些中文命名的部分小結在此. URL 如: /商品表 /單 ...
源碼: program-in-chinese/jinxiaocun
由於這個演示項目成型於去年(詳見中文編程的嘗試歷程小記), Spring Boot還是老版本. 尚未將其更新到最新版本, 先將其中的一些中文命名的部分小結在此.
URL
如: /商品表 /單位表
實現方式見最後附上的"單位控制器"源碼中的:
@RequestMapping(value = "/單位表")
及
protected static final String URL = "單位表";
類/方法/變數用中文命名
見後面附上的源碼
jsp文件名, 以及jsp中的變數名
如"單位表.jsp"中的"${單位.名稱}".
這需要"單位"類中的屬性命名為"名稱". 由於命名約定, 需要將介面以get/set開頭.
資料庫的表/列命名
下麵是mysqldump的結果("單位"部分)
DROP TABLE IF EXISTS `單位`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `單位` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`名稱` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=19 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
完整schema在此
編碼相關註意點(現在想起的, 歡迎補遺)
需要在pom.xml中添加:
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
- 資料庫(用的Mysql)指定編碼:
spring.datasource.url= jdbc:mysql://localhost:3306/jinxiaocun?useUnicode=true&characterEncoding=utf8
spring.datasource.sqlScriptEncoding=UTF-8
- jsp文件頭指定編碼:
<%@ page pageEncoding="UTF-8" %>
- 如上面的mysqldump中所見, 表和列都設置為了utf8
附上單位相關部分源碼
單位類:
@Entity
public class 單位 {
private long id;
@NotEmpty(message = "單位名稱不可為空")
@Size(max = 20, message = "單位長度不可超過20")
private String 名稱;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String get名稱() {
return 名稱;
}
public void set名稱(String 名稱) {
this.名稱 = 名稱;
}
}
單位控制類:
@Controller
@RequestMapping(value = "/單位表")
public class 單位控制 {
protected static final String URL = "單位表";
protected static final String 表名 = "單位表";
@Autowired
private 單位庫 單位庫;
@RequestMapping(method = RequestMethod.GET)
public String 列表(Model 模型) {
List<單位> 表 = 單位庫.findAll();
if (表 != null) {
模型.addAttribute(表名, 表);
}
// 需要初始化被校驗的對象
模型.addAttribute("單位", new 單位());
return URL;
}
@RequestMapping(method = RequestMethod.POST)
public String 添加(@Valid 單位 單位, BindingResult 約束結果, Model 模型) {
if (約束結果.hasErrors()) {
return URL;
}
單位庫.save(單位);
return 列表(模型);
}
}
單位表.jsp:
<body>
<jsp:include page="置頂.jsp" />
<h2>單位列表</h2>
<c:forEach var="單位" items="${單位表}">
<div>
<c:out value="${單位.名稱}"/>
</div>
</c:forEach>
<h3>添加單位</h3>
<form:form method="POST" modelAttribute="單位">
<form:errors path="*" cssClass="errorblock" element="div" />
<label for="名稱">名稱:</label>
<form:input type="text" path="名稱" size="50" />
<form:errors path="名稱" cssClass="error"/>
<br/>
<input type="submit" value="提交"></input>
</form:form>
</body>
註
演示本身非常幼稚, Spring Boot當時也是摸索學習中, 後也沒有繼續深入. 使用jsp而不是Thymeleaf的原因是, 後者當時不支持中文變數命名. 緣由詳見業餘小項目, 學用Spring boot (如對中文寫代碼本能排斥, 求放過)22樓.