struts2学习笔记一------struts2标签学习
原文链接:http://www.cnblogs.com/focusj/archive/2011/01/04/2057651.html#top
struts2标签
终于把struts2标签看的差不多了,不过还有好多还不是很熟悉,我是结合Max的struts2教程和struts自带的reference文档学习的!笔记中有好多都是从Max的博客中搬来的。不过也没有办法,咱水平还不行,也只能站在人家的肩膀上学习一下了!!
if,elseif, else标签
<%@ page language= "java" import = "java.util.*" pageEncoding= "UTF-8" %> <%@ taglib uri= "/struts-tags" prefix= "s" %> <% String path = request.getContextPath(); String basePath = request.getScheme()+ "://" +request.getServerName()+ ":" +request.getServerPort()+path+ "/" ; %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" > <html> <head> <base href= "<%=basePath%>" > <title>My JSP 'tags.jsp' starting page</title> <meta http-equiv= "pragma" content= "no-cache" > <meta http-equiv= "cache-control" content= "no-cache" > <meta http-equiv= "expires" content= "0" > <meta http-equiv= "keywords" content= "keyword1,keyword2,keyword3" > <meta http-equiv= "description" content= "This is my page" > </head> <body> <!-- 小技巧:#parameters.country[ 1 ]可以这样取值!原来Struts2是将URL传的参数封装 成一个数组的, 也就是说你可以在一个URL传两个同名的参数(即?name=a&name=b); --> <%request.setCharacterEncoding( "utf-8" );%> (request获取方式)country=<%=request.getParameter( "country" ) %><br> <s: if test= "#parameters.country[1] == 'www'" >中国</s: if > <s:elseif test= "#parameters.country[0] == '美国'" >美国</s:elseif> <s: else >其他国籍的人</s: else > <br> <!-- 为某个属性赋值 --> <s:set name= "country" value= "#parameters.country[1]" ></s:set> country=<s:property value= "#country" /> <br> <s: if test= "#country == 'www'" >中国</s: if > <s:elseif test= "#country == '美国'" >美国</s:elseif> <s: else >其他国籍的人</s: else > <br> </body> </html> |
这里面有个小常识,就是通过url传递参数的时候:Struts2是将URL传的同名参数封装成一个数组,也就是说我们可以在一个URL传两个同名的参数(即?name=a&name=b);获取的时候直接#parameters.name[0], parameters.name[1]就可以分别取出两个参数的值。
include标签
被包含页面:
<%@ page language= "java" import = "java.util.*" pageEncoding= "UTF-8" %> <%@ taglib uri= "/struts-tags" prefix= "s" %> this is the include page!!! |
包含页面:
<%@ page language= "java" import = "java.util.*" pageEncoding= "UTF-8" %> <%@ taglib uri= "/struts-tags" prefix= "s" %> <% String path = request.getContextPath(); String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + path + "/" ; %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" > <html> <head> <base href= "<%=basePath%>" > <title>My JSP 'includea.jsp' starting page</title> <meta http-equiv= "pragma" content= "no-cache" > <meta http-equiv= "cache-control" content= "no-cache" > <meta http-equiv= "expires" content= "0" > <meta http-equiv= "keywords" content= "keyword1,keyword2,keyword3" > <meta http-equiv= "description" content= "This is my page" > <!-- <link rel= "stylesheet" type= "text/css" href= "styles.css" mce_href= "styles.css" > --> </head> <body> This is my JSP1 page. <br> <s:include value= "include.jsp" > <!-- 提交表单时才会获得value的值 --> <s:param name= "value1" >test1</s:param> <s:param name= "value2" value= "user" ></s:param> </s:include> </body> </html> |
当然struts的include标签静态动态页面都能包含的!
i18n标签 描述:加载资源包到值堆栈。它可以允许text标志访问任何资源包的信息,而不只当前action相关联的资源包。
<%@ page language= "java" import = "java.util.*" pageEncoding= "UTF-8" %> <%@ taglib uri= "/struts-tags" prefix= "s" %> <% String path = request.getContextPath(); String basePath = request.getScheme()+ "://" +request.getServerName()+ ":" +request.getServerPort()+path+ "/" ; %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" > <html> <head> <base href= "<%=basePath%>" > <title>My JSP 'tags3.jsp' starting page</title> <meta http-equiv= "pragma" content= "no-cache" > <meta http-equiv= "cache-control" content= "no-cache" > <meta http-equiv= "expires" content= "0" > <meta http-equiv= "keywords" content= "keyword1,keyword2,keyword3" > <meta http-equiv= "description" content= "This is my page" > <!-- <link rel= "stylesheet" type= "text/css" href= "styles.css" mce_href= "styles.css" > --> </head> <body> <!-- <s:text>标签没弄明白 --> <s:i18n name= "I18N" > The i18n value is <s:text name= "hi!!" ></s:text> </s:i18n> <br> <s:debug></s:debug> </body> </html> |
iterator标签
<%@ page language= "java" import = "java.util.*" pageEncoding= "UTF-8" %> <%@ taglib uri= "/struts-tags" prefix= "s" %> <% String path = request.getContextPath(); String basePath = request.getScheme()+ "://" +request.getServerName()+ ":" +request.getServerPort()+path+ "/" ; %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" > <html> <head> <base href= "<%=basePath%>" > <title>My JSP 'tags2.jsp' starting page</title> <meta http-equiv= "pragma" content= "no-cache" > <meta http-equiv= "cache-control" content= "no-cache" > <meta http-equiv= "expires" content= "0" > <meta http-equiv= "keywords" content= "keyword1,keyword2,keyword3" > <meta http-equiv= "description" content= "This is my page" > <!-- <link rel= "stylesheet" type= "text/css" href= "styles.css" mce_href= "styles.css" > --> </head> <% List<String> strs = new ArrayList<String>(); strs.add( "a" ); strs.add( "b" ); strs.add( "c" ); strs.add( "d" ); strs.add( "e" ); request.setAttribute( "strs" , strs); %> <body> <s:iterator value= "#request.strs" var= "strs" > <s:property value= "#strs" /> </s:iterator> <s:debug></s:debug> </body> </html> |
这个标签挺容易理解的。
param标签
struts2的<s: param>标签问我觉得比较复杂的。struts2的s:param标签主要有两个属性name与value, 若想在value属性中输入直接量,则可以这样写:<s:param name="some" value="%{'user'}"/>, 也可以这样写:<s:param name="some">user</s:param>。 但如果直接赋值,这个值不是由Action动态生成的,而是自己指定的一个字符串,则只能用后者。
param页面代码:
<%@ page language= "java" import = "java.util.*" pageEncoding= "UTF-8" %> <%@ taglib uri= "/struts-tags" prefix= "s" %> <% String path = request.getContextPath(); String basePath = request.getScheme()+ "://" +request.getServerName()+ ":" +request.getServerPort()+path+ "/" ; %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" > <html> <head> <base href= "<%=basePath%>" > <title>My JSP 'param.jsp' starting page</title> <meta http-equiv= "pragma" content= "no-cache" > <meta http-equiv= "cache-control" content= "no-cache" > <meta http-equiv= "expires" content= "0" > <meta http-equiv= "keywords" content= "keyword1,keyword2,keyword3" > <meta http-equiv= "description" content= "This is my page" > <!-- <link rel= "stylesheet" type= "text/css" href= "styles.css" mce_href= "styles.css" > --> </head> <body> <!-- struts2的s:param标签主要有两个属性name与value, 若想在value属性中输入直接量,则可以这样写:<s:param name= "some" value= "%{'user'}" />, 也可以这样写:<s:param name= "some" >user</s:param>。 但如果直接赋值,这个值不是由Action动态生成的,而是自己指定的一个字符串,则只能用后者。 --> <s:url value= "paramAction.jsp" id= "href" > <s:param name= "value1" >hello!!</s:param> <s:param name= "valu2" value= "%{'HELLO!'}" ></s:param> </s:url> <s:a href= "%{href}" mce_href= "%{href}" >paramAction</s:a> <s:debug></s:debug> </body> </html> |
paramAction页面:
<%@ page language= "java" import = "java.util.*" pageEncoding= "UTF-8" %> <%@ taglib uri= "/struts-tags" prefix= "s" %> <% String path = request.getContextPath(); String basePath = request.getScheme()+ "://" +request.getServerName()+ ":" +request.getServerPort()+path+ "/" ; %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" > <html> <head> <base href= "<%=basePath%>" > <title>My JSP 'paramAction.jsp' starting page</title> <meta http-equiv= "pragma" content= "no-cache" > <meta http-equiv= "cache-control" content= "no-cache" > <meta http-equiv= "expires" content= "0" > <meta http-equiv= "keywords" content= "keyword1,keyword2,keyword3" > <meta http-equiv= "description" content= "This is my page" > <!-- <link rel= "stylesheet" type= "text/css" href= "styles.css" mce_href= "styles.css" > --> </head> <body> value1的值:<%=request.getParameter( "value1" ) %><br> value1的值:<s:property value= "#parameters.value1" /><br> value2的值:<%=request.getParameter( "value2" ) %><br/><!-- 获取不到值 --> value2的值:${#param.value2 }<!-- 获取不到值 --> <s:debug></s:debug> </body> </html> |
经常用到的UI标签
<%@ page contentType= "text/html; charset=UTF-8" pageEncoding= "UTF-8" %> <%@ taglib prefix= "s" uri= "/struts-tags" %> <%@ taglib prefix= "s" uri= "/struts-tags" %> <%@ taglib prefix= "sx" uri= "/struts-dojo-tags" %> <html> <head> <title>UI Tags Example</title> <s:head /> <sx:head parseContent= "true" /> </head> <body> <s:actionerror/> <s:actionmessage/> <s:fielderror /> <s:form action= "exampleSubmit" method= "post" enctype= "multipart/form-data" tooltipConfig= "#{'jsTooltipEnabled':'true'}" > <s:textfield label= "Name" name= "name" tooltip= "Enter your Name here" /> <s:date name= "Select Your Birthday" /> <!-- 在struts2. 2.1 中<sx:datetimepicker/>的标签使用有所变化,需要引入struts2-dojo-plugin- 2.2 . 1 .jar 这个包。 --> <sx:datetimepicker tooltip= "Select Your Birthday" label= "Birthday" name= "birthday" /> <s:textarea tooltip= "Enter your Biography" label= "Biograph" name= "bio" cols= "20" rows= "3" /> <s:select tooltip= "Choose Your Favourite Color" label= "Favorite Color" list= "{'Red', 'Blue', 'Green'}" name= "favoriteColor" emptyOption= "true" headerKey= "None" headerValue= "None" /> <s:select tooltip= "Choose Your Favourite Language" label= "Favourite Language" list= "#{'CN':'中文','EN':'英文','FR':'外文'}" name= "favouriteLanguage" emptyOption= "true" headerKey= "None" headerValue= "None" /> <s:checkboxlist tooltip= "Choose your Friends" label= "Friends" list= "{'Patrick', 'Jason', 'Jay', 'Toby', 'Rene'}" name= "friends" /> <s:checkbox tooltip= "Confirmed that your are Over 18" label= "Age 18+" name= "legalAge" /> <s:doubleselect tooltip= "Choose Your State" label= "State" name= "region" list= "{'North', 'South'}" value= "'South'" doubleValue= "'Florida'" doubleList= "top == 'North' ? {'Oregon', 'Washington'} : {'Texas', 'Florida'}" doubleName= "state" headerKey= "-1" headerValue= "---------- Please Select ----------" emptyOption= "true" /> <s:file tooltip= "Upload Your Picture" label= "Picture" name= "picture" /> <s:optiontransferselect tooltip= "Select Your Favourite Cartoon Characters" label= "Favourite Cartoons Characters" name= "leftSideCartoonCharacters" leftTitle= "Left Title" rightTitle= "Right Title" list= "{'Popeye', 'He-Man', 'Spiderman'}" multiple= "true" headerKey= "headerKey" headerValue= "--- Please Select ---" emptyOption= "true" doubleList= "{'Superman', 'Mickey Mouse', 'Donald Duck'}" doubleName= "rightSideCartoonCharacters" doubleHeaderKey= "doubleHeaderKey" doubleHeaderValue= "--- Please Select ---" doubleEmptyOption= "true" doubleMultiple= "true" /> <s:textarea label= "Your Thougths" name= "thoughts" tooltip= "Enter your thoughts here" /> <s:submit onclick= "alert('aaaa');" /> <s:reset onclick= "alert('bbbb');" /> </s:form> </body> </html> |
这些代码是直接从Max的博文中copy过来的,本来这是一个完整的例子我只是把前台展示代码考过来了。在这里有一个要注意的地方,不过在代码中也有体现,这是struts2比较高级的版本和低版本之间的区别,具体从哪个 版本改的我也不是很清楚。这个不同的用法是关于<s: datetimepicker>的。在使用<s: datetimepicker>时,较高的版本中还必须引入struts2-dojo-plugin-2.2.1.jar,还得指明<%@ taglib prefix="sx" uri="/struts-dojo-tags" %> ,如果做实验不成功的可以考虑下是不是这个问题。
struts-tags就算是复习到这里了,如果要是配合一个具体的项目的话就会更好了,继续努力!!!