介紹下目前使用的各個框架的版本信息
Struts1 1.3.10
Struts2 2.3.8
Spring 3.2.0.RELEASE
Hibernate 4.2.0.Final
Ibatis 2.3.4.726
MyBatis 3.1.1
Spring Data JPA 1.3.0.RELEASE
DWR 3.0.M1
項目中的持久化框架sql語句的跟蹤采用了log4jdbc4結合log4j,在控制臺可以看到完整的sql語句。
該項目中使用到的技術均與Spring已集成。除了DWR與Spring集成使用xml文件中配置bean外 其他的bean均使用注解完善。每一個與數據庫有關的都有事務處理。
項目結構圖
項目托管SVN地址:http://maven-framework-project.googlecode.com/svn/trunk/ (限于大陸google code 不穩定,導致經常無法訪問,該地址已不在同步,建議使用github地址)
項目托管GitHub地址:https://github.com/sxyx2008/maven-framework-project/(推薦使用)
最后希望有興趣的朋友可以加入進來,大家一起完善他。把自己的技術分享出來。如有任何問題可以與我聯系
聯系方式
QQ:184675420
Email:sxyx2008@gmail.com
contentType參數是一定要有的,否則瀏覽器總是提示將返回的JSON結果另存為文件,不會交給ajaxfileupload處理。這是因為struts2 JSON Plugin默認的contentType為application/json,而ajaxfileupload則要求為text/html。
文件上傳的jsp頁面
注意觀察<body>中的代碼,并沒有form表單。只是在按鈕點擊的時候觸發ajaxFileUpload()方法。需要注意的是js文件引入的先后順序,ajaxfileupload.js依賴于jquery因此你知道的。
點我下載工程代碼
呵呵,最近一直在看struts2方面的資料。大家都知道web開發過程中,我們經常要處理客戶端(用戶)提交過來的數據(增加記錄)及后臺數據庫查詢出來的數據(修改記錄),這里難免會出現一些不符合要求的數據,我們稱為“臟數據”。這里就借助于struts2提供的驗證框架來做數據的驗證(其實它依賴的還是webwork)
在使用struts2或者說webwork的驗證框架時必須遵守以下幾點:
在這里不要管為什么,人家就是這么約定的,我們只要照做就是了。除非你是科研人員,如果僅僅是項目需要,建議大家還是不要在這上面花過多的時間,不值得。
在對應的Action的包下(必須跟該Action在同一個目錄)創建驗證框架規則(.xml文件)
該xml文件的命名必須遵守如下規則:
1) 該文件必須跟該對應的Action在同一個目錄
2) Action的名字---對應Action中的方法名(execute方法除外)-validation.xml
如:
如圖所示該文件名由三部分組成:
第一部分:Action的類名
第二部分:Action中的方法名
第三部分:validation.xml(固定)
這三部分之間用橫線連接-
驗證規則(EmployeeAction-updateEmployee-validation.xml)內容
因為Action是基于模型驅動的即在Action引用了對象模型,所以在寫驗證規則的時候字段屬性為Action中對象模型名.具體的屬性()
Action中的引用關系
EmployeeAction-updateEmployee-validation.xml中的配置內容
詳細參看EmployeeAction-updateEmployee-validation.xml中的配置
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.2//EN" "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd"> <validators> <field name="employee.empName"> <field-validator type="requiredstring"> <message>雇員姓名不能為空</message> </field-validator> </field> <field name="employee.age"> <field-validator type="required"> <message>雇員年齡不能為空</message> </field-validator> </field> <field name="employee.sex"> <field-validator type="requiredstring"> <message>雇員性別不能為空</message> </field-validator> </field> <field name="employee.context"> <field-validator type="requiredstring"> <message>雇員備注信息不能為空</message> </field-validator> </field> </validators> |
<field name="驗證字段(Action中對象模型名字.具體的屬性)">
<field-validator type="requiredstring"> 驗證規則
<message>驗證出錯信息</message>
</field-validator>
</field>
最后千萬別忘了在struts.xml文件中一定要配置一個結果為input的轉向
否則驗證失敗時會出現如下錯誤:
鑒于此文圖片丟失,影響閱讀質量,特上傳此博文word文檔,廣大網友可點此下載word文檔
剛解決了java.lang.IllegalArgumentException: attempt to create saveOrUpdate event with null entity
接著就來最討厭的亂碼問題,我數據庫用的mysql,大家都知道mysql本省就有可能出現亂碼,加之現在跟struts2混合在一起,指不定會出現什么亂七八糟的編碼,這誰也說不清楚
整體思路那就是統一編碼(所有的內容都采用同一個編碼)
大概從這幾個方面來排查
a) 首先確認mysql的字符編碼,他默認為拉丁文,這里我修改為gbk
b) 在jsp頁面中明確指明編碼類型
<%@ page language="java" contentType="text/html; charset=gbk" pageEncoding="gbk"%> 上面的意思是指定tomcat的編碼為gbk <meta http-equiv="Content-Type" content="text/html; charset=gbk"> 下面的意思是指定web瀏覽器的編碼為gbk |
c) 習慣性的加上spring的字符過濾器
在web.xml中添加過濾器 <filter> <filter-name>CharacterEncodingFilter</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> <init-param> <param-name>encoding</param-name> <param-value>gbk</param-value> </init-param> <init-param> <param-name>forceEncoding</param-name> <param-value>true</param-value> </init-param> </filter> <filter-mapping> <filter-name>CharacterEncodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> |
d) 最后別忘了在struts.xml或struts.properties中覆蓋struts2默認國際化的編碼格式
<constant name="struts.i18n.encoding" value="gbk"></constant> |
到此編碼應該已經統一為gbk了,看看結果吧
其實最簡單的放法就是把數據庫和jsp中的編碼統一設置為utf-8即可