⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 转换器(converter)——struts 2_0中的魔术师 - max on java - blogjava.htm

📁 struts2标签的详细解释说明教程
💻 HTM
📖 第 1 页 / 共 5 页
字号:
align=top> &nbsp; &nbsp;}</SPAN> </SPAN><SPAN style="COLOR: #000000"><BR><IMG 
src="转换器(Converter)——Struts 2_0中的魔术师 - Max On Java - BlogJava.files/ExpandedBlockEnd.gif" 
align=top>}</SPAN> </SPAN></DIV>
<P>再接下来,在源代码文件夹下新建xwork-conversion.properties,并在其中添加如下代码:<BR></P>
<DIV 
style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><SPAN 
style="COLOR: #000000">java.util.Locale</SPAN> <SPAN 
style="COLOR: #000000">=</SPAN> <SPAN 
style="COLOR: #000000">tutorial.LocaleConverter</SPAN> </DIV>
<P>发布运行应用程序,在浏览器中键入<A 
href="http://localhost:8080/Struts2_Converter/HelloWorld.action">http://localhost:8080/Struts2_Converter/HelloWorld.action</A>,输出页面如图2所示:<BR><IMG 
alt="图2 HelloWorld英文输出" 
src="转换器(Converter)——Struts 2_0中的魔术师 - Max On Java - BlogJava.files/r_img2.gif"><BR><SPAN 
style="FONT-SIZE: smaller; FONT-STYLE: italic">图2 HelloWorld英文输出</SPAN></P>
<P>在Locale输入框中输入“zh_CN”,按“Submit”提交,出现如图3所示页面:<BR><IMG alt="图3 HelloWorld中文输出" 
src="转换器(Converter)——Struts 2_0中的魔术师 - Max On Java - BlogJava.files/r_img3.gif"><BR><SPAN 
style="FONT-SIZE: smaller; FONT-STYLE: italic">图3 HelloWorld中文输出</SPAN></P>
<P>上述例子中,Locale文本输入框对应是Action中的类型为java.util.Locale的属性loc,所以需要创建一个自定义转变器实现两者间的转换。所有的Struts 
2.0中的转换器都必须实现<A 
href="http://www.ognl.org/2.6.9/Documentation/javadoc/ognl/TypeConverter.html">ognl.TypeConverter</A>接口。 
为了简单起见,OGNL包也为你提供了<A 
href="http://www.ognl.org/2.6.9/Documentation/javadoc/ognl/DefaultTypeConverter.html">ognl.DefaultTypeConverter</A>类去帮助您实现转换器。在例子中,LocaleConverter继承了ognl.DefaultTypeConverter,重载了其方法原型为“public 
Object convertValue(Map context, Object value, Class toType)”的方法。下面简单地介绍一下函数的参数: 
</P>
<OL>
  <LI>context——用于获取当前的ActionContext 
  <LI>value——需要转换的值 
  <LI>toType——需要转换成的目标类型 </LI></OL>实现转换器,我们需要通过配置告诉Struts 2.0。我们可以通过以下两种方法做到这点: 
<OL>
  <LI>配置全局的类型转换器,也即是上例的做法——在源代码文件夹下,新建一个名为“xwork-conversion.properties”的配置文件,并在文件中加入“待转换的类型的全名(包括包路径和类名)=转换器类的全名”对;
  <LI>应用于某个特定类的类型转换器,做法为在该类的包中添加一个格式为“类名-conversion.properties”的配置文件,并在文件中加入“待转换的属性的名字=转换器类的全名”对。上面的例子也可以这样配置——在源代码文件夹的tutorial包下新建名为“HelloWorld-conversion.properties”文件,并在其中加入“loc=tutorial.LocaleConverter”。</LI></OL>
<CENTER>
<TABLE 
style="BORDER-RIGHT: #f0c000 1px solid; BORDER-TOP: #f0c000 1px solid; MARGIN-TOP: 8px; MARGIN-BOTTOM: 8px; BORDER-LEFT: #f0c000 1px solid; BORDER-BOTTOM: #f0c000 1px solid; BACKGROUND-COLOR: #ffffce; TEXT-ALIGN: left" 
cellSpacing=0 cellPadding=0 border=0>
  <TBODY>
  <TR>
    <TD 
    style="PADDING-RIGHT: 4px; PADDING-LEFT: 4px; PADDING-BOTTOM: 4px; PADDING-TOP: 4px"><IMG 
      src="转换器(Converter)——Struts 2_0中的魔术师 - Max On Java - BlogJava.files/lightbulb_on.gif"></TD>
    <TD 
    style="PADDING-RIGHT: 4px; PADDING-LEFT: 4px; PADDING-BOTTOM: 4px; PADDING-TOP: 4px; FONT-FAMILY: 华文仿宋">在继承DefaultTypeConverter时,如果是要将value转换成其它非字符串类型时,要记住value是String[]类型,而不是String类型。它是通过request.getParameterValues(String 
      arg)来获得的,所以不要试图将其强行转换为String类型。 </TD></TR></TBODY></TABLE></CENTER>
<H2>已有的转换器</H2>
<P>对于一此经常用到的转换器,如日期、整数或浮点数等类型,Struts 2.0已经为您实现了。下面列出已经实现的转换器。 </P>
<OL>
  <LI>预定义类型,例如int、boolean、double等; 
  <LI>日期类型, 使用当前区域(Locale)的短格式转换,即DateFormat.getInstance(DateFormat.SHORT);
  <LI>集合(Collection)类型, 将request.getParameterValues(String 
  arg)返回的字符串数据与java.util.Collection转换;
  <LI>集合(Set)类型, 与List的转换相似,去掉相同的值;
  <LI>数组(Array)类型, 
将字符串数组的每一个元素转换成特定的类型,并组成一个数组。</LI></OL>对于已有的转换器,大家不必再去重新发明轮子。Struts在遇到这些类型时,会自动去调用相应的转换器。
<H2>批量封装对象(Bean)</H2>
<P>不知道大家是否遇过这种情况,在一个页面里同时提交几个对象。例如,在发布产品的页面,同时发布几个产品。我在之前一个项目就遇到过这种需求,当时用的是Struts 
1.x。那是一个痛苦的经历,我在Google搜了很久都没有理想的结果。幸运的是,在Struts 
2.0中这种痛苦将一去不复返。下面我就演示一下如何实现这个需求。</P>
<P>首先,在源代码文件夹下的tutorial包中新建Product.java文件,内容如下:<BR></P>
<DIV 
style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><IMG 
src="转换器(Converter)——Struts 2_0中的魔术师 - Max On Java - BlogJava.files/None.gif" 
align=top><SPAN style="COLOR: #0000ff">package</SPAN><SPAN 
style="COLOR: #000000"> tutorial;<BR><IMG 
src="转换器(Converter)——Struts 2_0中的魔术师 - Max On Java - BlogJava.files/None.gif" 
align=top><BR><IMG 
src="转换器(Converter)——Struts 2_0中的魔术师 - Max On Java - BlogJava.files/None.gif" 
align=top></SPAN><SPAN style="COLOR: #0000ff">import</SPAN><SPAN 
style="COLOR: #000000"> java.util.Date;<BR><IMG 
src="转换器(Converter)——Struts 2_0中的魔术师 - Max On Java - BlogJava.files/None.gif" 
align=top><BR><IMG id=Codehighlighter1_64_542_Open_Image 
onclick="this.style.display='none'; Codehighlighter1_64_542_Open_Text.style.display='none'; Codehighlighter1_64_542_Closed_Image.style.display='inline'; Codehighlighter1_64_542_Closed_Text.style.display='inline';" 
src="转换器(Converter)——Struts 2_0中的魔术师 - Max On Java - BlogJava.files/ExpandedBlockStart.gif" 
align=top><IMG id=Codehighlighter1_64_542_Closed_Image style="DISPLAY: none" 
onclick="this.style.display='none'; Codehighlighter1_64_542_Closed_Text.style.display='none'; Codehighlighter1_64_542_Open_Image.style.display='inline'; Codehighlighter1_64_542_Open_Text.style.display='inline';" 
src="转换器(Converter)——Struts 2_0中的魔术师 - Max On Java - BlogJava.files/ContractedBlock.gif" 
align=top></SPAN><SPAN style="COLOR: #0000ff">public</SPAN><SPAN 
style="COLOR: #000000"></SPAN><SPAN style="COLOR: #0000ff">class</SPAN><SPAN 
style="COLOR: #000000"> Product </SPAN><SPAN 
id=Codehighlighter1_64_542_Closed_Text 
style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><IMG 
src="转换器(Converter)——Struts 2_0中的魔术师 - Max On Java - BlogJava.files/dot.gif"></SPAN><SPAN 
id=Codehighlighter1_64_542_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG 
src="转换器(Converter)——Struts 2_0中的魔术师 - Max On Java - BlogJava.files/InBlock.gif" 
align=top> &nbsp; &nbsp;</SPAN><SPAN style="COLOR: #0000ff">private</SPAN><SPAN 
style="COLOR: #000000"> String name;<BR><IMG 
src="转换器(Converter)——Struts 2_0中的魔术师 - Max On Java - BlogJava.files/InBlock.gif" 
align=top> &nbsp; &nbsp;</SPAN><SPAN style="COLOR: #0000ff">private</SPAN><SPAN 
style="COLOR: #000000"></SPAN><SPAN style="COLOR: #0000ff">double</SPAN><SPAN 
style="COLOR: #000000"> price;<BR><IMG 
src="转换器(Converter)——Struts 2_0中的魔术师 - Max On Java - BlogJava.files/InBlock.gif" 
align=top> &nbsp; &nbsp;</SPAN><SPAN style="COLOR: #0000ff">private</SPAN><SPAN 
style="COLOR: #000000"> Date dateOfProduction;<BR><IMG 
src="转换器(Converter)——Struts 2_0中的魔术师 - Max On Java - BlogJava.files/InBlock.gif" 
align=top> &nbsp; &nbsp;<BR><IMG id=Codehighlighter1_180_210_Open_Image 
onclick="this.style.display='none'; Codehighlighter1_180_210_Open_Text.style.display='none'; Codehighlighter1_180_210_Closed_Image.style.display='inline'; Codehighlighter1_180_210_Closed_Text.style.display='inline';" 
src="转换器(Converter)——Struts 2_0中的魔术师 - Max On Java - BlogJava.files/ExpandedSubBlockStart.gif" 
align=top><IMG id=Codehighlighter1_180_210_Closed_Image style="DISPLAY: none" 
onclick="this.style.display='none'; Codehighlighter1_180_210_Closed_Text.style.display='none'; Codehighlighter1_180_210_Open_Image.style.display='inline'; Codehighlighter1_180_210_Open_Text.style.display='inline';" 
src="转换器(Converter)——Struts 2_0中的魔术师 - Max On Java - BlogJava.files/ContractedSubBlock.gif" 
align=top> &nbsp; &nbsp;</SPAN><SPAN style="COLOR: #0000ff">public</SPAN><SPAN 
style="COLOR: #000000"> Date getDateOfProduction() </SPAN><SPAN 
id=Codehighlighter1_180_210_Closed_Text 
style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><IMG 
src="转换器(Converter)——Struts 2_0中的魔术师 - Max On Java - BlogJava.files/dot.gif"></SPAN><SPAN 
id=Codehighlighter1_180_210_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG 
src="转换器(Converter)——Struts 2_0中的魔术师 - Max On Java - BlogJava.files/InBlock.gif" 
align=top> &nbsp; &nbsp; &nbsp; &nbsp;</SPAN><SPAN 
style="COLOR: #0000ff">return</SPAN><SPAN style="COLOR: #000000"> 
dateOfProduction;<BR><IMG 
src="转换器(Converter)——Struts 2_0中的魔术师 - Max On Java - BlogJava.files/ExpandedSubBlockEnd.gif" 
align=top> &nbsp; &nbsp;}</SPAN></SPAN><SPAN style="COLOR: #000000"><BR><IMG 
src="转换器(Converter)——Struts 2_0中的魔术师 - Max On Java - BlogJava.files/InBlock.gif" 
align=top> &nbsp; &nbsp;<BR><IMG id=Codehighlighter1_270_317_Open_Image 
onclick="this.style.display='none'; Codehighlighter1_270_317_Open_Text.style.display='none'; Codehighlighter1_270_317_Closed_Image.style.display='inline'; Codehighlighter1_270_317_Closed_Text.style.display='inline';" 
src="转换器(Converter)——Struts 2_0中的魔术师 - Max On Java - BlogJava.files/ExpandedSubBlockStart.gif" 
align=top><IMG id=Codehighlighter1_270_317_Closed_Image style="DISPLAY: none" 
onclick="this.style.display='none'; Codehighlighter1_270_317_Closed_Text.style.display='none'; Codehighlighter1_270_317_Open_Image.style.display='inline'; Codehighlighter1_270_317_Open_Text.style.display='inline';" 
src="转换器(Converter)——Struts 2_0中的魔术师 - Max On Java - BlogJava.files/ContractedSubBlock.gif" 
align=top> &nbsp; &nbsp;</SPAN><SPAN style="COLOR: #0000ff">public</SPAN><SPAN 
style="COLOR: #000000"></SPAN><SPAN style="COLOR: #0000ff">void</SPAN><SPAN 
style="COLOR: #000000"> setDateOfProduction(Date dateOfProduction) </SPAN><SPAN 
id=Codehighlighter1_270_317_Closed_Text 
style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><IMG 
src="转换器(Converter)——Struts 2_0中的魔术师 - Max On Java - BlogJava.files/dot.gif"></SPAN><SPAN 
id=Codehighlighter1_270_317_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG 
src="转换器(Converter)——Struts 2_0中的魔术师 - Max On Java - BlogJava.files/InBlock.gif" 
align=top> &nbsp; &nbsp; &nbsp; &nbsp;</SPAN><SPAN 
style="COLOR: #0000ff">this</SPAN><SPAN style="COLOR: #000000">.dateOfProduction 
</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000"> 
dateOfProduction;<BR><IMG 
src="转换器(Converter)——Struts 2_0中的魔术师 - Max On Java - BlogJava.files/ExpandedSubBlockEnd.gif" 
align=top> &nbsp; &nbsp;}</SPAN></SPAN><SPAN style="COLOR: #000000"><BR><IMG 
src="转换器(Converter)——Struts 2_0中的魔术师 - Max On Java - BlogJava.files/InBlock.gif" 
align=top> &nbsp; &nbsp;<BR><IMG id=Codehighlighter1_346_364_Open_Image 
onclick="this.style.display='none'; Codehighlighter1_346_364_Open_Text.style.display='none'; Codehighlighter1_346_364_Closed_Image.style.display='inline'; Codehighlighter1_346_364_Closed_Text.style.display='inline';" 
src="转换器(Converter)——Struts 2_0中的魔术师 - Max On Java - BlogJava.files/ExpandedSubBlockStart.gif" 
align=top><IMG id=Codehighlighter1_346_364_Closed_Image style="DISPLAY: none" 
onclick="this.style.display='none'; Codehighlighter1_346_364_Closed_Text.style.display='none'; Codehighlighter1_346_364_Open_Image.style.display='inline'; Codehighlighter1_346_364_Open_Text.style.display='inline';" 
src="转换器(Converter)——Struts 2_0中的魔术师 - Max On Java - BlogJava.files/ContractedSubBlock.gif" 
align=top> &nbsp; &nbsp;</SPAN><SPAN style="COLOR: #0000ff">public</SPAN><SPAN 
style="COLOR: #000000"> String getName() </SPAN><SPAN 
id=Codehighlighter1_346_364_Closed_Text 
style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><IMG 
src="转换器(Converter)——Struts 2_0中的魔术师 - Max On Java - BlogJava.files/dot.gif"></SPAN><SPAN 
id=Codehighlighter1_346_364_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG 
src="转换器(Converter)——Struts 2_0中的魔术师 - Max On Java - BlogJava.files/InBlock.gif" 
align=top> &nbsp; &nbsp; &nbsp; &nbsp;</SPAN><SPAN 
style="COLOR: #0000ff">return</SPAN><SPAN style="COLOR: #000000"> name;<BR><IMG 
src="转换器(Converter)——Struts 2_0中的魔术师 - Max On Java - BlogJava.files/ExpandedSubBlockEnd.gif" 
align=top> &nbsp; &nbsp;}</SPAN></SPAN><SPAN style="COLOR: #000000"><BR><IMG 
src="转换器(Converter)——Struts 2_0中的魔术师 - Max On Java - BlogJava.files/InBlock.gif" 
align=top> &nbsp; &nbsp;<BR><IMG id=Codehighlighter1_402_425_Open_Image 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -