最近学Struts2发现好多.properties文件命名方式以及存放位置各不相同,所以今天整理一下,相互学习。
一:局部转换文件
文件名格式:ActionName-conversion.properties
ActionName为需要Action的类名,-conversion.properties为固定部分。
文件存放位置:文件应放在和Action相同的位置。
下面用代码说话,具体实例:(实现:用户输入xxx,xxx格式字符串通过类型转换器将逗号前部分作为用户名后部分作为密码验证。)
1:前台表单
<body>
<s:fielderror/>
<h2>局部类型转换器</h2>
<s:form action="jubuLogin">
<s:text name="user"/><s:textfield name="user"/>
<s:submit value="转换"></s:submit>
</s:form>
</body>
2:Action -->jubuAction
package com.mao;
import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ActionSupport;
public class jubuAction extends ActionSupport{
private User user;
private String tip;
//省略set get方法
public String execute() throws Exception {
// TODO Auto-generated method stub
if(getUser().getName().equals("mao")&&getUser().getPass().equals("3214")){
setTip("登录成功");
return SUCCESS;
}else{
return ERROR;
}
}
}
封装用户请求和提示信息。
3:重点 局部转换器-->UserConverter
package com.mao;
import java.util.Map;
import org.apache.struts2.util.StrutsTypeConverter;
import com.opensymphony.xwork2.conversion.impl.DefaultTypeConverter;
public class UserConverter extends StrutsTypeConverter{
@Override
//讲字符串转化为user
public Object convertFromString(Map context, String[] values, Class toClass) {
// TODO Auto-generated method stub
User user=new User();
String[]userValue=values[0].split(",");
user.setName(userValue[0]);
user.setPass(userValue[1]);
return user;
}
@Override
public String convertToString(Map context, Object o) {
// TODO Auto-generated method stub
User user=(User) o;
return "<"+user.getName()+user.getPass()+">";
}
}
4:下面是咱们要说的局部转换文件(或者注册转换器)文件名-->jubuAction-conversion.properties
user=com.mao.UserConverter
说明:局部转化文件将局部转换器注册在web应用中(就是告诉Struts什么时候用转换器,转换什么,使用什么转换)
这里是jubuAction需要转换,所以局部转换文件名字应该为:jubuAction-conversion.properties
添加如下代码user=com.mao.UserConverter (告诉struts2 我们前台传过来的user这个字符串需要用com.mao.UserConverter转换,本例就是将前台的字符串去掉逗号分别验证用户名和密码,com.mao为包名)
二:全局转换文件:
全局转换比局部转换作用要大,比如我们应用中有多个Action都包含了User类型的属性,那样挨个建局部转换文件就费事费力,这种情况,全局类型转换文件应运而生。全局类型转换文件,不是对指定Action的指定属性起作用,而是对指定类型起作用,例如对所有com.mao.User起作用。
文件名格式:xwork-conversion.properties(文件名固定不变) 与局部类型转换一样 同属于properties文件。
存放位置:一般放下Web应用下的WEB-INF/classes路径下。
内容格式:key=value——————需要进行转换的类型=完成类型转换的实现类。
将上面的局部转换改成全局转换,内容改动如下:
com.mao.User=com.mao.com.mao.UserConverter
如果User属性需要被另一个User2Converter转换,我们仅需要在此全局转换文件里添加:
com.mao.User=com.mao.com.mao.User2Converter,而不需要我们重复建局部转换文件。
说明:转换器和转换文件(也可以叫注册转换器)不是一个概念,如上面转换文件中的UserConverter就是转换器,它完成将前台表单接收的name属性完成怎么样的转换(比如上面的去掉逗号),而转换文件则是连接他们的桥梁。
将局部转换文件换成全局转换文件执行结果一样
三:国际化资源文件
Action中引用国际资源文件:原文件名格式:ActionBaseName.properties如registAction.properties
存放位置:与相应Action放在同一位置。
jsp中引用国际资源文件:
原文件名格式:jspName.properties如regist.properties
存放位置:与相应Action放在同一位置即可,或者WEB-INF\src路径下
然后通过jdk自带工具native2ascii生成两份国际化资源文件(不会使用native2ascii生成资源文件的可以参考博主此篇博文http://blog.csdn.net/vipmao/article/details/51194419),下面说一下两份国际化资源文件特性:
文件名格式:ActionBaseName_language_country.properties 中文 Action类名_zh_CN.properties 英文:Action类名_en_US.properties
存放位置:国际化资源文件与Acton类的*.class文件保存在同一路径下(WEB-INF\classes路径下)
访问国际化资源文件三种方式:
1:jsp通过<s:text name="">访问
2:表单元素可以指定key属性访问资源文件的key
3:Action类通过getText()方法访问
说明:加载国际化资源文件需要在struts.xml中添加如下代码:
<constant name="struts.custom.i18n.resources" value="这里是资源文件的baseName"></constant>
四:校验文件
文件名格式:Action名字-validation.xml存放位置:保存在与Action class文件相同的路径下
下面是一个校验文件例子 文件名registAction-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">
<field name="user">
<field-validator type="requiredstring">
<param name="trim">true</param>
<message>请填写用户名</message>
</field-validator>
<field-validator type="stringlength">
<param name="minLength">4</param>
<param name="maxLength">32</param>
<message>用户名长度应在4到32个字符间</message>
</field-validator>
</field>
<field name="pass">
<field-validator type="requiredstring">
<message>请填写密码</message>
</field-validator>
<field-validator type="stringlength">
<param name="minLength">6</param>
<param name="maxLength">32</param>
<message>为了您账号的安全,请设置6个字母以上的密码(最长可设置32个字母)</message>
</field-validator>
</field>
<field name="age">
<field-validator type="int">
<param name="min">1</param>
<param name="max">150</param>
<message>年龄在1——150</message>
</field-validator>
</field>
<field name="brith">
<field-validator type="date">
<param name="min">1900-01-01</param>
<param name="max">2050-02-21</param>
<message>生日</message>
</field-validator>
</field>
</validators>
校验文件与类型转换异常一样,校验失败,返回<result name="input">视图。
五:Web的配置文件 web.xml
不多说,放在项目WEB-INF文件夹下即可。
六:Struts.xml配置文件
放在项目src路径下即可。
以上就是Struts2中常用的.properties文件和xml文件命名方式和存放位置以及一些详解。