-
在web.xml中配置struts的过滤器
<filter> <filter-name>struts2</filter-name> <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class> </filter> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
1:自定义日期转换器:
-
自定义转换器类
public class MyDateConverter extends StrutsTypeConverter{ //把字符串转换成对象类型 public Object convertFromString(Map content,String[] values,Class toClass){ return null; } //把对象转换成字符串 public String convertToString(Map content,Object o){ return null; } }
-
在src目录下创建xwork-conversion.properties文件:
java.utils.Date=自定义的转换器
2:struts表单验证
-
方法一:重写validate方法
@Override public void validate() { if(StringUtils.isEmpty(user.getUsername())){ addFieldError("username","用户名不能为空"); } }
*表单一定要用struts的标签
*该方法是全局的,action的所有方法都会生效,可以再不需要验证的方法上添加@SkipValidation -
方法二:写一个方法:validate+需要验证的方法名(方法名首字母大写)
-
方法三:在action的目录下写一个配置文件:Action名-validation.xml(局部:Action名-方法名-validation.xml)
<validators> <field name="password">//方式一 <field-validator type="requiredstring"> <param name="fieldName">password</param> <message>密码不能为空。。。</message> </field-validator> </field> <validator type="requiredstring">//方式二 <param name="fieldName">username</param> <message>用户名不能为空...</message> </validator> </validators>
3:struts的文件上传
-
form表单提交方式是post,表单的enctype="multipart/form-data"
-
上传文件的类型限制
1:写MIME类型<interceptor-ref name="defaultStack"> <param name="fileUpload.allowedTypes">image/png,image/jpeg</param> </interceptor-ref>
2:写文件的扩展名
<interceptor-ref name="defaultStack"> <param name="fileUpload.allowedExtensions">png,jpeg</param> </interceptor-ref>
-
文件上传自定义错误显示
1:配置一个资源文件fileuploadmessage.properties,struts.messages.error.uploading=Error uploading: {0} struts.messages.error.file.too.large=The file is to large to be uploaded: {0} "{1}" "{2}" {3} struts.messages.error.content.type.not.allowed=Content-Type not allowed: {0} "{1}" "{2}" {3} struts.messages.error.file.extension.not.allowed=File extension not allowed: {0} "{1}" "{2}" {3} *{0}表单的字段名,{1}表示文件名,{2}表示临时文件名,{3}表示文件类型
-
文件上传大小限制
<constant name="struts.multipart.maxSize" value="最大值(byte)"></constant>
4:文件下载
-
创建一个Action,定义一个输入流inputStream和获取该流的方法
public class DownloadAction extends ActionSupport { private InputStream inputStream; private String fileName; public String download() throws FileNotFoundException { String path="C:\\Users\\dongdong\\Desktop\\91686673E040A9726D08203E34BCFD50.jpg"; inputStream=new FileInputStream(path); return SUCCESS; } public InputStream getInputStream() { return inputStream; } }
-
然后配置action,inputName,contentDisposition,contentType
<action name="download" class="com.xdd.action.DownloadAction" method="download"> <result name="success" type="stream"> <param name="inputName">inputStream</param> <param name="contentDisposition">attachment;filename=91686673E040A9726D08203E34BCFD50.jpg</param> <param name="contentType">application/octet-stream</param> </result> </action>
5:OGNL表达式
-
导入struts标签库
<%@ taglib prefix="s" uri="/struts-tags" %>
-
调用静态属性
<s:property value="@java.lang.Integer@MAX_VALUE"/>
-
调用静态方法
1:先设置struts.ognl.allowStaticMethodAccess的值为true<constant name="struts.ognl.allowStaticMethodAccess" value="true"/>
2:调用方法:
<s:property value="@java.lang.Math@random()"/>
-
封装List数据和Map数据
<s:radio list="{'男','女'}" name="gender" label="性别"/> <s:radio list="#{'meal':'男','femeal':'女'}" name="gender" label="性别"/>
-
OGNL在xml中的使用
<param name="contentDisposition">attachment;filename=${@java.net.URLEncoder@encode(fileName,"UTF-8")}</param>