昨天把表單定義的映射文件做完了,今天依然是相當重要的,做的是單向表單實例映射,首先表單實例映射文件。
難點1是map的配置:
<map name="propertyMap" table="itcast_formInstance_propertyMap">
<key column="formInstanceId"></key>
<map-key type="string" column="name"></map-key>
<element type="serializable" column="value"></element>
</map>
為什么要實現serializable,所有的數據都是以二進制形式存在,所有的對象理論上都可以序列化,但是有些對象序列 化后會產生比如邏輯等等問題。在這里我們希望服務器重啟后,仍然保存有我想要的對象,也就是可以把原來的對象拿出來!就要實現序列化 ,同學的序列化解釋:
我們有時候將一個java對象變成字節流的形式傳出去或者從一個字節流中恢復成一個java對象,例如,要將java對象存儲到硬盤或者傳送給網絡上 的其他計算機,這個過程我們可以自己寫代碼去把一個java對象變成某個格式的字節流再傳 輸,但是,jre本身就提供了這種支持,我們可以調用OutputStream的writeObject方法來做,如果要讓java幫我們做,要傳輸的對象必須實現serializable接口,這樣,javac編譯時就會特殊處理。
2是定義FormDefinitionActionForm。由于表單字段可以增加,如圖:
我們用兩個數組存放
private String propertyNameList = {};
private Class[] propertyValueTypeList = {};
3.那我們就在FormDefinitionAction中
可以這樣處理:
// actionForm --> formDefinition
// 1, copy properties
BeanUtils.copyProperties(formDefinition, actionForm);
// 2, fieldDefinitionList
for (int i = 0; i < actionForm.getPropertyNameList().length; i++) {
String name = actionForm.getPropertyNameList()[i];
if (name != null && name.trim().length() > 0) { // 有效的字段說明
Class valueType = actionForm.getPropertyValueTypeList()[i];
formDefinition.getFieldDefinitionList().put(name, valueType);
}
}
// Save
formDefinitionService.save(formDefinition);
return mapping.findForward("toList");)
小難點3.要把不同的表單定義名稱顯示到頁面
用Sql語句:select distinct pd.name ProcessDefinition的全類名pd
小難點4.頁面設計
難點5.審批信息內容:誰 在 什么時間 對哪個表單 做了什么樣的審批
難點6.整個實體類圖及關聯
最重要的還是下圖的關系:要理解好
總之,今天下午聽的暈乎暈乎的,趁過年還得好好復習一下!