浅谈Struts2下
生活随笔
收集整理的這篇文章主要介紹了
浅谈Struts2下
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
計應134(實驗班) 張人川 一、文件上傳 在WEB-INFO/lib下加入commons-flileupload-1.2.1.jar,commons-io-1.3.2.jar 把form表的enctype設置為”multipart/form-data”如下 <form enctype=”multipart/form-data” action=”${pageContext.request.contextPath}/ xxx.action” method=”post”> <input type=”file” name=”uploadImage”> </form> 在Action類中添加以下屬性,屬性紅色部分對應于表單文字的名字; public class HelloWorldAction{ private File uploadImage; ????????????//得到上傳文件 private String uploadImagContentType; //得到文件的類型 private String uploadImag FileName; //得到文件的名字 getter setter . . . public String upload() throws Exception{ String realpath=ServletActionContext.getServletContext.getRealPath(“/image “); if(uploadImage!=null){ File file=new File(realpath); if(!file.exists()) ?file.mkdirs(); FileUtils.copyFile( uploadImage , new File(? file , uploadImageFileName)); ActionContext.getContext().put(“message”,”上傳成功”); } return “success”; } } 二、自定義攔截器 需要實現com.opensymphony.xwork2.interceptor.Interceptor接口 public String intercept(ActionInvocation invocation) throws Exception{ if(sesion存在用戶){ String result=invocation.invoke(); ????//返回Action所調方法的名稱 }else{ return “logon”; } } 在package里寫interceptors <interceptors> <interceptor name=”permission” class=”com.icss.interceptro.PermissionInterceptor”/> <interceptor-stack name=”permissionStack”> <interceptor-ref name=”defaultStack”/> <interceptor-ref name=”permission”/> </interceptor-stack> </interceptors> Action里寫 <interceptor-ref name=”permissionStack”/> 如果希望包下所有的Action都使用自定義攔截器,可以通過<default-interceptor-ref name=””/>把它定義為默認攔截器;注意每個包只能指定一個默認攔截器,且如果該包下的某個Action顯示指定了某個攔截器,則默認攔截器不會起作用; 三、輸入校驗 采用手工編寫代碼實現 對所有方法進行校驗 Action繼承ActionSupport重寫validate()方法 public class PersonAction extends ActionSupport{ private String username; private String mobile; getter setter; . . . public void validate(){ if(this.username==null || “”.equals(this.username.trim())){ this.addFieldError(“username”,”用戶名不能為空”); } if(this.mobile==null || “”.equeal(this.mobile.trimm())){ this.addFileError(“mobile”,”手機號不能為空”); }else{ if(!Pattern.compile(“^1[358]\\d{9}$”).matcher(this.mobile) .matches()){ This.addFieldError(“mobile”,”手機號格式不正確”); } } } } //驗證失敗返回input視圖所以<result name=”input”></result> <s:fieldError/> 對某個方法進行校驗 提供validateXxx(),校驗xxx()方法 基于xml的輸入校驗 對所有方法進行校驗 Action繼承ActionSupport,并將校驗文件和Action類放在同一包下, 文件的取名格式為:ActionClassName-validation.xml <validators> <field name=”username”> <field-validator type=”requiredstring”> <param name=”trim” >true</param> <message>用戶名不能為空</message> </field-validator> </field> <validators> 關于type屬性的值見com.opensymphony.xwork2.validator.validators下 的default.xml中; 校驗器的例子: Email: <field-validator type=”email”> <message>電子郵箱地址無效</message> </field> Regex <field-validator type=”regex”> <param name=”expression”>![CDATA[^1[358]\D{9}$]]</param> <message>手機號格式不正確</message> </field> Int <field-validator type=”int”> <param name=”min”>1</param> <param name=”max”>150</param> <message>年齡必須在1-150之間</message> </field> OGNL <field-validator type=”fieldexpression”> <param name=”expression”>![CDATA[imagefile.length ()<=0]]</param> <message>文件不能為空</message> </field> 對指定方法進行校驗 ActionClassName-ActionName-validation.xml <action name=”user-*” method=”{1}”></action> //提交哪個對哪個方法進行哪個方法進行校驗; 四、輸入校驗的流程 類型轉換器對請求參數進行類型轉換,并把轉換后的值賦給action中的屬性 如果在執行類型那個轉換的過程中出現異常,系統會將異常信息保存到ActionContext, conversionError攔截器將異常信息添加到fieldErrors里; 系統通過反射技術先調用action中的validateXxx()方法 在調用validate()方法 如果系統中的fieldErrors存在錯誤信息,系統將發送名稱為input的視圖 五、國際化 baseName_en_US.properties baseName_zh_CN.properties 配置全局資源和國際化信息 struts.xml. <constant name=”struts.custom.i18n.resources” value=” baseName”/> Jsp <s:text name=””/> ????//name為資源文件中的key <s:text name=”welcome”> <s:param>wanglei</s:param> <s:param>study</s:param> </s:text> 在Action類中可以繼承ActionSupport,使用getText(“key”)得到國際化信息 getText(“welcome”,new String[]{“liming”,”study”}); 資源文件 Key=value welcome={0},歡迎來到XXXX{1} 配置包范圍的全局化資源文件 package_en_US.properties package_zh_CN.properties package為固定寫法,而不是包名 Action范圍資源文件 在Action類所在的路徑,放置ActionClassName_en_US.properties, ActionClassName_zh_CN.properties 國際化—Jsp中直接訪問某個資源文件 <s:i18n name=”baseName”> <s:text name=”welcome”/> </s:i18n> 訪問com.icsss.action包下的資源文件 <s:i18n name=”com/icss/action/package”> <s:text name=”welcome”> <s:param>小張</s:param> </s:text> </s:i18n>
?
六、日期類型 xxxx-xx-xx形式寫年月日可以直接轉換為java.utli.Date; 七、類型轉換器 局部類型轉化器(com.opensymphony.xwork2.conversion.impl.DefaultTypeConberter) public class DateTypeConverter extends DefaultTypeConvert{ public object convertValue(Map<String , Object> context , Object value ,Class toType){ SimpleDateFormate dateFormat=new SimpleDateFormat(“yyyy/MM/dd”); try{ if(toType==Date.class){ String[] params=(String[])value; return dateFormat.parse(params[0]); }else if(toType==String.class){ Date date=(Date)value; return dateFormat.format(date); } }catch(ParseException e){ return null; } } } 在Action類所在的包下放置ActionClassName-conversion.properties 在properties文件中的內容為: 屬性名稱=類型轉換器的去類名稱 birthday=com.icss.conversion.DateTypeConverter 全局類型轉換器 xwork-conversion.properties 內容為:待轉換的類型=類型轉換器的全名稱 Java.util.Date=com.icss.conversion.DateConverter 八、訪問或添加request/session/application屬性 ActionContext ctx=ActionContext.getContext(); ctx.getApplication().put(); ????????//往ServletContext或Application屬性里放置 ctx.getSession(0.put(); ctx.put(); ????????????//往request里放值 九、獲取request/session/application對象 方法一: 通過ServletActionContext類直接獲取 HttpServletRequest request=ServletActionContext.getRequest(); ServletContext servletContext=ServletActionContxt.getServletContext(); HttpServletResponse respone=ServletActionContext.getResponse(); 方法二: 實現指定接口,由Struts框架運行時注入: public class HelloWorldAction implement ServletRequestAware,ServletResponseAware, ServletContxtAware{ private HttpServletRequest request; private ServletContext servletContext; private HttpServletResponse respone; setter . . . }?
轉載于:https://www.cnblogs.com/qq347471280/p/4570244.html
總結
以上是生活随笔為你收集整理的浅谈Struts2下的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Ubuntu 当黑屏解决方案安装
- 下一篇: POJ 2976 Dropping te