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

📄 strus 2的新表单标志的使用 - max on java - blogjava.htm

📁 struts2标签的详细解释说明教程
💻 HTM
📖 第 1 页 / 共 5 页
字号:
style="COLOR: #0000ff">="Technology"</SPAN><SPAN style="COLOR: #ff0000"> 
</SPAN><SPAN style="COLOR: #0000ff">/&gt;</SPAN><SPAN 
style="COLOR: #000000"><BR>&nbsp; &nbsp; </SPAN><SPAN 
style="COLOR: #0000ff">&lt;/</SPAN><SPAN 
style="COLOR: #800000">s:form</SPAN><SPAN 
style="COLOR: #0000ff">&gt;</SPAN><SPAN style="COLOR: #000000"><BR></SPAN><SPAN 
style="COLOR: #0000ff">&lt;/</SPAN><SPAN style="COLOR: #800000">body</SPAN><SPAN 
style="COLOR: #0000ff">&gt;</SPAN><SPAN style="COLOR: #000000"><BR></SPAN><SPAN 
style="COLOR: #0000ff">&lt;/</SPAN><SPAN style="COLOR: #800000">html</SPAN><SPAN 
style="COLOR: #0000ff">&gt;</SPAN></DIV><SPAN 
style="FONT-SIZE: smaller; FONT-STYLE: italic">清单4 
WebContent/doubleselect.jsp</SPAN> 
<P>分布运行应用程序,在浏览器中键入:<A 
href="http://localhost:8080/Struts2_CoolTags/doubleselect.action">http://localhost:8080/Struts2_CoolTags/doubleselect.action</A>,出现如下图所示页面:</P>
<P><IMG alt=doubleselect.jsp页面 
src="Strus 2的新表单标志的使用 - Max On Java - BlogJava.files/r_doubleselect.gif"><BR><SPAN 
style="FONT-SIZE: smaller; FONT-STYLE: italic">清单5 doubleselect.jsp页面</SPAN></P>
<H2>3、&lt;s: token /&gt;</H2>
<P>这个标志可能大家不常用,不过本人认为它还是挺有用的。在使用Struts 
1.x时,因为跳转通常是用Forward(而不是Redirect)实现的,所以当用户完成请求后,按“F5”刷新页面时,就会重新提交上次的请求,这样经常会出错。要解决这个问题,&lt;s:token 
/&gt;可以帮你忙。</P>
<H3>实现原理</H3>
<P>在页面加载时,&lt;s: token /&gt;产生一个GUID(Globally Unique 
Identifier,全局唯一标识符)值的隐藏输入框如:</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: #0000ff">&lt;</SPAN><SPAN style="COLOR: #800000">input 
</SPAN><SPAN style="COLOR: #ff0000">type</SPAN><SPAN 
style="COLOR: #0000ff">="hidden"</SPAN><SPAN style="COLOR: #ff0000"> 
name</SPAN><SPAN style="COLOR: #0000ff">="struts.token.name"</SPAN><SPAN 
style="COLOR: #ff0000"> value</SPAN><SPAN 
style="COLOR: #0000ff">="struts.token"</SPAN><SPAN 
style="COLOR: #0000ff">/&gt;</SPAN><SPAN style="COLOR: #000000"><BR></SPAN><SPAN 
style="COLOR: #0000ff">&lt;</SPAN><SPAN style="COLOR: #800000">input 
</SPAN><SPAN style="COLOR: #ff0000">type</SPAN><SPAN 
style="COLOR: #0000ff">="hidden"</SPAN><SPAN style="COLOR: #ff0000"> 
name</SPAN><SPAN style="COLOR: #0000ff">="struts.token"</SPAN><SPAN 
style="COLOR: #ff0000"> value</SPAN><SPAN 
style="COLOR: #0000ff">="BXPNNDG6BB11ZXHPI4E106CZ5K7VNMHR"</SPAN><SPAN 
style="COLOR: #0000ff">/&gt;</SPAN></DIV><SPAN 
style="FONT-SIZE: smaller; FONT-STYLE: italic">清单6 &lt;s:token 
/&gt;的HTML输出</SPAN> 
<P>同时,将GUID放到会话(session)中;在执行action之前,“token”拦截器将会话token与请求token比较,如果两者相同,则将会话中的token删除并往下执行,否则向actionErrors加入错误信息。如此一来,如果用户通过某种手段提交了两次相同的请求,两个token就会不同。</P>
<H3>具体实现</H3>
<P>首先看一下Action的代码:</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="Strus 2的新表单标志的使用 - Max On Java - BlogJava.files/None.gif" align=top><SPAN 
style="COLOR: #0000ff">package</SPAN><SPAN style="COLOR: #000000"> 
tutorial;<BR><IMG src="Strus 2的新表单标志的使用 - Max On Java - BlogJava.files/None.gif" 
align=top><BR><IMG 
src="Strus 2的新表单标志的使用 - Max On Java - BlogJava.files/None.gif" 
align=top></SPAN><SPAN style="COLOR: #0000ff">import</SPAN><SPAN 
style="COLOR: #000000"> com.opensymphony.xwork2.ActionSupport;<BR><IMG 
src="Strus 2的新表单标志的使用 - Max On Java - BlogJava.files/None.gif" 
align=top><BR><IMG id=Codehighlighter1_115_471_Open_Image 
onclick="this.style.display='none'; Codehighlighter1_115_471_Open_Text.style.display='none'; Codehighlighter1_115_471_Closed_Image.style.display='inline'; Codehighlighter1_115_471_Closed_Text.style.display='inline';" 
src="Strus 2的新表单标志的使用 - Max On Java - BlogJava.files/ExpandedBlockStart.gif" 
align=top><IMG id=Codehighlighter1_115_471_Closed_Image style="DISPLAY: none" 
onclick="this.style.display='none'; Codehighlighter1_115_471_Closed_Text.style.display='none'; Codehighlighter1_115_471_Open_Image.style.display='inline'; Codehighlighter1_115_471_Open_Text.style.display='inline';" 
src="Strus 2的新表单标志的使用 - 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"> CoolTagAction </SPAN><SPAN 
style="COLOR: #0000ff">extends</SPAN><SPAN style="COLOR: #000000"> ActionSupport 
</SPAN><SPAN id=Codehighlighter1_115_471_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="Strus 2的新表单标志的使用 - Max On Java - BlogJava.files/dot.gif"></SPAN><SPAN 
id=Codehighlighter1_115_471_Open_Text><SPAN style="COLOR: #000000">{ &nbsp; 
&nbsp;<BR><IMG src="Strus 2的新表单标志的使用 - 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">static</SPAN><SPAN 
style="COLOR: #000000"> </SPAN><SPAN style="COLOR: #0000ff">final</SPAN><SPAN 
style="COLOR: #000000"> </SPAN><SPAN style="COLOR: #0000ff">long</SPAN><SPAN 
style="COLOR: #000000"> serialVersionUID </SPAN><SPAN 
style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000"> </SPAN><SPAN 
style="COLOR: #000000">6820659617470261780L</SPAN><SPAN 
style="COLOR: #000000">;<BR><IMG 
src="Strus 2的新表单标志的使用 - Max On Java - BlogJava.files/InBlock.gif" align=top> 
&nbsp; &nbsp;<BR><IMG 
src="Strus 2的新表单标志的使用 - Max On Java - BlogJava.files/InBlock.gif" align=top> 
&nbsp; &nbsp;</SPAN><SPAN style="COLOR: #0000ff">private</SPAN><SPAN 
style="COLOR: #000000"> String message;<BR><IMG 
src="Strus 2的新表单标志的使用 - Max On Java - BlogJava.files/InBlock.gif" align=top> 
&nbsp; &nbsp; &nbsp; &nbsp;<BR><IMG id=Codehighlighter1_244_265_Open_Image 
onclick="this.style.display='none'; Codehighlighter1_244_265_Open_Text.style.display='none'; Codehighlighter1_244_265_Closed_Image.style.display='inline'; Codehighlighter1_244_265_Closed_Text.style.display='inline';" 
src="Strus 2的新表单标志的使用 - Max On Java - BlogJava.files/ExpandedSubBlockStart.gif" 
align=top><IMG id=Codehighlighter1_244_265_Closed_Image style="DISPLAY: none" 
onclick="this.style.display='none'; Codehighlighter1_244_265_Closed_Text.style.display='none'; Codehighlighter1_244_265_Open_Image.style.display='inline'; Codehighlighter1_244_265_Open_Text.style.display='inline';" 
src="Strus 2的新表单标志的使用 - Max On Java - BlogJava.files/ContractedSubBlock.gif" 
align=top> &nbsp; &nbsp;</SPAN><SPAN style="COLOR: #0000ff">public</SPAN><SPAN 
style="COLOR: #000000"> String getMessage() </SPAN><SPAN 
id=Codehighlighter1_244_265_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="Strus 2的新表单标志的使用 - Max On Java - BlogJava.files/dot.gif"></SPAN><SPAN 
id=Codehighlighter1_244_265_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG 
src="Strus 2的新表单标志的使用 - Max On Java - BlogJava.files/InBlock.gif" align=top> 
&nbsp; &nbsp; &nbsp; &nbsp;</SPAN><SPAN 
style="COLOR: #0000ff">return</SPAN><SPAN style="COLOR: #000000"> 
message;<BR><IMG 
src="Strus 2的新表单标志的使用 - Max On Java - BlogJava.files/ExpandedSubBlockEnd.gif" 
align=top> &nbsp; &nbsp;}</SPAN></SPAN><SPAN style="COLOR: #000000"><BR><IMG 
src="Strus 2的新表单标志的使用 - Max On Java - BlogJava.files/InBlock.gif" 
align=top><BR><IMG id=Codehighlighter1_308_337_Open_Image 
onclick="this.style.display='none'; Codehighlighter1_308_337_Open_Text.style.display='none'; Codehighlighter1_308_337_Closed_Image.style.display='inline'; Codehighlighter1_308_337_Closed_Text.style.display='inline';" 
src="Strus 2的新表单标志的使用 - Max On Java - BlogJava.files/ExpandedSubBlockStart.gif" 
align=top><IMG id=Codehighlighter1_308_337_Closed_Image style="DISPLAY: none" 
onclick="this.style.display='none'; Codehighlighter1_308_337_Closed_Text.style.display='none'; Codehighlighter1_308_337_Open_Image.style.display='inline'; Codehighlighter1_308_337_Open_Text.style.display='inline';" 
src="Strus 2的新表单标志的使用 - 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"> setMessage(String message) </SPAN><SPAN 
id=Codehighlighter1_308_337_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="Strus 2的新表单标志的使用 - Max On Java - BlogJava.files/dot.gif"></SPAN><SPAN 
id=Codehighlighter1_308_337_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG 
src="Strus 2的新表单标志的使用 - Max On Java - BlogJava.files/InBlock.gif" align=top> 
&nbsp; &nbsp; &nbsp; &nbsp;</SPAN><SPAN style="COLOR: #0000ff">this</SPAN><SPAN 
style="COLOR: #000000">.message </SPAN><SPAN 
style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000"> message;<BR><IMG 
src="Strus 2的新表单标志的使用 - Max On Java - BlogJava.files/ExpandedSubBlockEnd.gif" 
align=top> &nbsp; &nbsp;}</SPAN></SPAN><SPAN style="COLOR: #000000"><BR><IMG 
src="Strus 2的新表单标志的使用 - Max On Java - BlogJava.files/InBlock.gif" align=top> 
&nbsp; &nbsp;<BR><IMG 
src="Strus 2的新表单标志的使用 - Max On Java - BlogJava.files/InBlock.gif" align=top> 
&nbsp; &nbsp;@Override<BR><IMG id=Codehighlighter1_377_468_Open_Image 
onclick="this.style.display='none'; Codehighlighter1_377_468_Open_Text.style.display='none'; Codehighlighter1_377_468_Closed_Image.style.display='inline'; Codehighlighter1_377_468_Closed_Text.style.display='inline';" 
src="Strus 2的新表单标志的使用 - Max On Java - BlogJava.files/ExpandedSubBlockStart.gif" 
align=top><IMG id=Codehighlighter1_377_468_Closed_Image style="DISPLAY: none" 
onclick="this.style.display='none'; Codehighlighter1_377_468_Closed_Text.style.display='none'; Codehighlighter1_377_468_Open_Image.style.display='inline'; Codehighlighter1_377_468_Open_Text.style.display='inline';" 
src="Strus 2的新表单标志的使用 - Max On Java - BlogJava.files/ContractedSubBlock.gif" 
align=top> &nbsp; &nbsp;</SPAN><SPAN style="COLOR: #0000ff">public</SPAN><SPAN 
style="COLOR: #000000"> String execute() </SPAN><SPAN 
id=Codehighlighter1_377_468_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="Strus 2的新表单标志的使用 - Max On Java - BlogJava.files/dot.gif"></SPAN><SPAN 
id=Codehighlighter1_377_468_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG 
src="Strus 2的新表单标志的使用 - Max On Java - BlogJava.files/InBlock.gif" align=top> 
&nbsp; &nbsp; &nbsp; &nbsp;System.out.println(</SPAN><SPAN 
style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">Executing action, 
your message is </SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN 
style="COLOR: #000000"> </SPAN><SPAN style="COLOR: #000000">+</SPAN><SPAN 
style="COLOR: #000000"> message);<BR><IMG 
src="Strus 2的新表单标志的使用 - Max On Java - BlogJava.files/InBlock.gif" align=top> 
&nbsp; &nbsp; &nbsp; &nbsp;</SPAN><SPAN 
style="COLOR: #0000ff">return</SPAN><SPAN style="COLOR: #000000"> 
SUCCESS;<BR><IMG 
src="Strus 2的新表单标志的使用 - Max On Java - BlogJava.files/ExpandedSubBlockEnd.gif" 
align=top> &nbsp; &nbsp;}</SPAN></SPAN><SPAN style="COLOR: #000000"> &nbsp; 
&nbsp;<BR><IMG 
src="Strus 2的新表单标志的使用 - Max On Java - BlogJava.files/ExpandedBlockEnd.gif" 
align=top>}</SPAN></SPAN></DIV><SPAN 
style="FONT-SIZE: smaller; FONT-STYLE: italic">清单7 
src/tutorial/CoolTagAction.java</SPAN> 
<P>以上代码一目了然,再看看JSP的写法:</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">%@ page language="java" contentType="text/html; 
charset=utf-8" pageEncoding="utf-8" %&gt;<BR></SPAN><SPAN 
style="COLOR: #000000; BACKGROUND-COLOR: #ffff00">&lt;%</SPAN><SPAN 
style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">@ taglib prefix</SPAN><SPAN 
style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">=</SPAN><SPAN 
style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</SPAN><SPAN 
style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">s</SPAN><SPAN 
style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</SPAN><SPAN 
style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"> uri</SPAN><SPAN 
style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">=</SPAN><SPAN 
style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</SPAN><SPAN 
style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">/struts-tags</SPAN><SPAN 
style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</SPAN><SPAN 
style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"> </SPAN><SPAN 
style="COLOR: #000000; BACKGROUND-COLOR: #ffff00">%&gt;</SPAN><SPAN 
style="COLOR: #000000"><BR><BR></SPAN><SPAN 
style="COLOR: #0000ff">&lt;!</SPAN><SPAN style="COLOR: #ff00ff">DOCTYPE html 
PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"</SPAN><SPAN 
style="COLOR: #0000ff">&gt;</SPAN><SPAN style="COLOR: #000000"><BR></SPAN><SPAN 
style="COLOR: #0000ff">&lt;</SPAN><SPAN style="COLOR: #800000">html </SPAN><SPAN 
style="COLOR: #ff0000">xmlns</SPAN><SPAN 
style="COLOR: #0000ff">="http://www.w3.org/1999/xhtml"</SPAN><SPAN 
style="COLOR: #0000ff">&gt;</SPAN><SPAN style="COLOR: #000000"><BR></SPAN><SPAN 
style="COLOR: #0000ff">&lt;</SPAN><SPAN style="COLOR: #800000">head</SPAN><SPAN 
style="COLOR: #0000ff">&gt;</SPAN><SPAN style="COLOR: #000000"><BR>&nbsp; &nbsp; 
</SPAN><SPAN style="COLOR: #0000ff">&lt;</SPAN><SPAN 
style="COLOR: #800000">title</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN><SPAN 
style="COLOR: #000000">Struts 2 Cool Tags - </SPAN><SPAN 

⌨️ 快捷键说明

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