<!--
Struts2 Chapter7 国际标签&文件的上传和下载
Goal:掌握Struts中的国际化标签,实现中英文的切换,并且实现文件的上传和下载
-->
一,国际化标签:
1,其实我们在前面已经学过了用JSTL来实现页面的中英文切换,步骤如下:
1)创建资源属性文件,把要进行切换的关键字写在里面,注意要写多个文件以便实现切换:
文件名必须是这样:文件名_语言类型_国家名缩写.properties
eg: language_zh_CN.properties language_en_US.properties
2)配置这个资源文件:
关键字1=值1
关键字2=值2
关键字3=值3
.....
注:如果值是中文则不能在source中进行书写,需要对其进行编辑然后由软件自动转为字节码
3)在页面中引入标签库,并使用:
<%@ taglib uri="java.sun.com/jsp/jstl/fmt" prefix="前缀"%>
<前缀:setBundle baseName="[src目录下的properties文件的主文件名(就是不包含_zh_CN)]"/>
<--在要写入文字的地方要这样写-->
<前缀:message key="[properties文件中的key的名称]"/>
eg:
<%@ taglib uri="java.sun.com/jsp/jstl/fmt" prefix="fmt"%>
<fmt:setBundle baseName="language"/>
<--在要写入文字的地方要这样写-->
<fmt:message key="关键字1"/>
<fmt:message key="关键字2"/>
.....
2,然后在struts中的用法呢前面的差不多~但是要优化得好一点,关键是可以进行手动切换!
1)创建资源属性文件,把要进行切换的关键字写在里面,注意要写多个文件以便实现切换:
文件名必须是这样:文件名_语言类型_国家名缩写.properties
eg: language_zh_CN.properties language_en_US.properties
2)在struts.xml文件中配置一个常量
<constant name="struts.custom.i18n.resources" value="language"></constant>
注:这个只能这样写,里面的内容是不能改的!
3)在页面中引入struts标签库,并使用:
<%@ taglib uri="/struts-tags" prefix="s"%>
在需要切换语言的地方要这样写道:
<s:text name="[properties文件中相对应的关键字]"/>
4)最后~千万不能忘记的一步:在web.xml中在添加一个对*.jsp的过滤
当然,当我们写了上面过后,其实这个并没有体现出struts中的国际标签的优势,
体现其优势的要属下面的内容了:
动态切换语言(前提是在上面个内容的基础上!):
a)创建一个action类用来切换语言:
public class LanguageAction{
//定义两个属性,一个是语言名称,一个是国家名称
private String language;
private String country;
//生成getter&setter,这个我就不写了
...
//切换语言的方法
public String toggleIt(){
//得到Locale对象(java.util.*)
Locale locale=new Locale(language,country);
//将locale放入session中,方法与前面有点不同,这里是采用put
ServletActionContext.getContext().getSession().put("WW_TRANS_I18N_LOCALE",locale);
//注:上面的那个put中的参数不能改
//为了让切换能够立即生效,需要写下面内容
ServletActionContext.getContext().setLocale(locale);
//返回一个值好让action中的result进行处理
return "transformed";
}
}
b)配置一个action用来切换语言:
<action name="*Language" class="com.shu.action.LanguageAction" method="{1}">
<result name="transformed">需要切换的页面的路径</result>
</action>
c)然后只需要在页面中写入两个超链接就可以!
eg:
<a href="toggleItLanguage.action?language=zh&country=CN">[中文]</a>
<a href="toggleItLanguage.action?language=en&country=US">[English]</a>
这样就OK了!!
再次强调:不要忘了在struts.xml中配置<constant>还有不要忘了在web.xml中配置过滤*.jsp的过滤器
二,文件的上传:
以前在学javaWeb_adv时学过通过使用smartUpload来上传文件,但是学了struts后,我们要学会使用struts来上传文件!
1)依旧是不能忘记在表单中写入: enctype="multipart/form-data" 这个不能写错也不能不写,表示复杂的表单数据!
2)在表单中的<input type="file"/>中写入完整的信息:加入name属性,并且这个name必须和表单提交后的action中的名称相同:
<input type="file" name="myData"/>
3)在表单提交的action中写入以下属性:
public class SubmitAction{
//这个表示文件,注意,是File类型的(java.io.*)
private File myData;
//这个表示文件名,必需以input中的name打头,然后接上FileName
private String myDataFileName;
//这个表示文件类型,必需以input中的name打头,然后接上ContentType
private String myDataContentType;
//生成getter&setter~我就难得写了!
....
//文件上传的方法
public void upLoadFile(){
//创建流
FileInputStream fin=null;
FileOutputStrem fou=null;
try{
//创建流对象,其中需要一个File类型的参数,恰好我们的myData就是
fin=new FileInputStream(myData);
//获取根目录和文件名,并把文件写入至此!
fou=new FileOutputStream(ServletActionContext.getServletContext().getRealPath("/")+myDataFileName);
//创建字节数组来储存数据,其中的参数指的是长度,最好是1024的倍数,最要不超过2倍!
byte[] data=new byte[1024];
//储存每次读取的长度
int count=0;
//开始循环读取,当读取的长度<=0时,就说明读取完毕了!
while((count=fin.read(data))>0){
//开始写入数据,注意写的时候需要的参数
fou.write(data,0,count);
}
//验收一下
System.out.println("I made it!");
}catch(Exception e){
}finally{
//还真是爱try呀
try{
if(fin!=null){
fin.close();
}
if(fou!=null){
fou.close();
}
}catch(Exception e2){}
}
}
}
3-2)多个文件上传:
public class SubmitAction{
//这个表示文件,注意,是File类型的(java.io.*)
private File[] myData;
//这个表示文件名,必需以input中的name打头,然后接上FileName
private String[] myDataFileName;
//这个表示文件类型,必需以input中的name打头,然后接上ContentType
private String[] myDataContentType;
//生成getter&setter~我就难得写了!
....
//文件上传的方法
public void upLoadFile(){
//创建流
FileInputStream fin=null;
FileOutputStrem fou=null;
for(int i=0;i<myData.length;i++){
try{
//创建流对象,其中需要一个File类型的参数,恰好我们的myData就是
fin=new FileInputStream(myData[i]);
//获取根目录和文件名,并把文件写入至此!
fou=new FileOutputStream(ServletActionContext.getServletContext().getRealPath("/")+myDataFileName[i]);
//创建字节数组来储存数据,其中的参数指的是长度,最好是1024的倍数,最要不超过2倍!
byte[] data=new byte[1024];
//储存每次读取的长度
int count=0;
//开始循环读取,当读取的长度<=0时,就说明读取完毕了!
while((count=fin.read(data))>0){
//开始写入数据,注意写的时候需要的参数
fou.write(data,0,count);
}
//验收一下
System.out.println("I made it!");
}catch(Exception e){
}finally{
//还真是爱try呀
try{
if(fin!=null){
fin.close();
}
if(fou!=null){
fou.close();
}
}catch(Exception e2){}
}
}
}
}
三,文件下载:有待更新!
<!--
Author:Lovingshu's Forever
Date:2011-10-31 22:19
Remark:Oh~God damn it!Tomorrow is Single Man's Day!But it's ok,now I feel nothing but
my duty!What I want is not a girl firend but is a good job~I've bet my future,so,
I must try my best!
-->
Struts2 Chapter7 国际标签&文件的上传和下载
最新推荐文章于 2022-04-28 12:54:34 发布