Struts2_03

一、文件的上傳:
瀏覽器頁面必須條件:
method="post"
<input type="file" name="xxx"/>
enctype="multipart/form-data
服務器:
Action的屬性:
private File xxx;  -->上傳的文件,與瀏覽器頁面文件上傳的input的name的屬性值相同
private String xxxContentType;  -->文件的MIME類型
private String xxxFileName; -->文件的名稱
上傳文件的操作:
FileUtils.copyFile(xxx,dest); -->
文件上傳的注意事項:
如何顯示詳細的錯誤信息:
在struts.xml設置參數:
<constant name="struts.devMode" value="true"/>
文件的上傳的Action繼承ActionSupport:
在action中設置input視圖:
<result name="input">/error.jsp</result>
在錯誤頁面顯示錯誤信息:
<s:actionerror/>
<s:fielderror/>
如何設置文件上傳時允許的最大值:
在struts.xml中設置參數:
<constant name="struts.multipart.maxSize" value=""/>
或在action中配置fileUpload攔截器:
<interceptor-ref name="fileUpload">
<param name="maximumSize">xxx</param>   -->設置該action允許的上傳文件大小【***局部參數不能大於全局參數,否則無效***】
<param name="allowedTypes">xx</param>   -->設置該action上傳文件的MIME類型,多個使用逗號分開
<param name="allowedExtensions">xx</param> -->設置該action上傳文件的後綴名
</interceptor-ref>
<interceptor name="defaultStack"/>
如何上傳多個文件:
每個文件上傳的input框的name屬性值相同;
在action中:
private File[] xxx;
private String[] xxxContentType;
private String[] xxxFileName; -->使用List集合也可
遍歷上傳每一個文件即可;


二、Struts2的Ajax開發
json:json只在javascript中稱爲對象,其他稱爲json串;
fastjson:
轉換對象:
String json = JSONObject.toJSONString(Object);
轉換List集合:
String json = JSONArray.toJSONString(list);
如何對Date類型進行格式化:
在對象屬性上加註解:
@JSONField(format="yyyy-MM-dd")
如何設置不在json串中生成的屬性:
SerializeFilter filter = new PropertyFilter() {
@Override
public boolean apply(Object obj, String s1, Object o){
if(s1.equals("不顯示屬性")) {
return false;
}
return true;
}
}
String json = JSONObject.toJSONString(Object,filter);
注意事項:
將List轉換成json,如果集合中存儲了相同的元素,想要將相同的元素都顯示出來:
String json = JSONArray.toJSONString(list,SerializeFeature.DisableCircularReferenceDetect);

Jackson:
Sprin mvc的底層是jackson
轉換對象:
ObjectMapper mapper = new ObjectMapper();
String json = mapper.writeValueAsString(Object);
轉換集合:
ObjectMapper mapper = new ObjectMapper();
String json = mapper.writeValueAsString(list);
如何處理日期類型:
mapper.serDataFormat(new SimpleDataFormat("yyyy-MM-dd");
如何過濾屬性:
在對象屬性上加註解:
@JsonIgnore
或在對象類上加註解:
@JsonIgnoreProperties({"","",...})
或編碼實現:
先在對象類上加註解:@JsonFilter("xxx")
FilterProvider filter = new SimpleFilterProvider().addFilter("xxx",SimpleBeanPropertyFilter.filterOutAllExcept("a","b");
mapper.setFilter(Object);
String json = mapper.writeValueAsString(filter);
-->只包含a,b屬性
FilterProvider filter = new SimpleFilterProvider().addFilter("xxx",SimpleBeanPropertyFilter.serializeAllExcept("a","b");
mapper.setFilter(filter);
String json = mapper.writeValueAsString(Object);
-->不包含a,b屬性

Struts2如何處理ajax請求:
使用json響應;

如何使用Struts2的json插件完成ajax請求:
導入插件包;
如何使用該插件:
1、配置文件的<package extends="json-default">
2、Action返回視圖<result name="" type="json">
3、將存儲在ValueStack數據壓到棧頂,會自動轉換成json
如何過濾屬性:
在對象屬性的get方法上加註解:
@JSON(serialize = false)
或在result中設置param參數:
<param name="excludeProperties">響應的數據\[\d+\]\.過濾的屬性</param>
<param name="includeProperties">響應的數據\[\d+\]\.需要的屬性</param> -->多個逗號隔開
如何設置root:
設置root前:list:[{},{}]
設置root後:[{},{}]
在result中設置param參數:
<param name="root">list</param>
-->設置root後,過濾屬性就不需加響應數據(list)


三、註解開發:
@Namespace("/")   --> <package namespace="/">  --> 加在action類上
@ParentPackage("struts-default")   --> <package extends="struts-default">  --> 加在action類上
@Action(value="xx",results={@Result(name="",type="",location="")})  --> action標籤 --> 加在需要執行的方法上

其他註解:(瞭解)
多個映射訪問同一個action:
@Actions({@Action(""),@Action("")})
全局結果視圖:
@Results
攔截器:
@Action(value="",interceptorRefs=@InterceptorRef(""))
注意事項:
註解開發必須在action,actions,struts,struts2包下【*****】


四、案例驅動:
登錄案例:
商品展示案例:
控制用戶登錄纔可訪問商品展示:
創建一個類繼承MethodFilterInterceptor
在struts.xml文件中聲明
在action中註解配置
注意事項:
配置攔截器後繼承的包要設置爲配置的包:
@ParentPackage("");


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章