Struts2.1 标签详细说明

vue3:html2canvas+jspdf将页面以A4导出为PDF文件,解决内容截断+在分页处截断问题详细排查和解决教程(jsPDF + html2canvas A4分页截断、内容分页时存在截断) html2canvas + jsPDF 解决内容截断问题,vue3 jspdf-html2canvas生成多页pdf防截断处理(包含代码),vue3解决html2canvas + jsPDF导出pdf分页内容截断问题,jsPDF + html2canvas A4分页截断 完美解决方案(含代码 + 案例),html页面导出pdf截断问题,html2canvas 与 jspdf 相结合生成 pdf 内容被截断的终极解决方案,提供html2canvas+jsPDF将HTML页面以A4纸方式导出为PDF后,内容分页 阅读详情

Struts 2.1 Tags

最近学习  Struts 2.1 Tags 做了些笔记,贴出来大家一起学习下,希望大家多多交流。

 

别的都不说了,我就贴代码,代码里注释比较详细,呵呵。

文件目录,如下:

 

 

 index.jsp 代码

Java代码   收藏代码
  1. <%@ page language= "java"   import = "java.util.*"  pageEncoding= "UTF-8" %>  
  2. <%@page   import = "com.rao.bean.Sex" %>  
  3. <%@ taglib prefix="s"  uri= "/struts-tags" %>  
  4. <%@ taglib prefix="sx"  uri= "/struts-dojo-tags" %>  
  5. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" >  
  6. <html>  
  7. <head>  
  8.   <title>My page</title>  
  9.   <s:head theme="xhtml" />  
  10.   <sx:head parseContent="true" />  
  11. </head>  
  12.   
  13.   <body>  
  14.     Struts 2.1  Tags  
  15.     <br/>  
  16.     <br/>  
  17.     一、控制标签<br/><hr size="3"  color= "red" >  
  18.       
  19.      #、if  /elseif/  else  @用于逻辑判断<br/>  
  20.      <s:set name="bir"  value= "-12" ></s:set>  
  21.      <s:if  test= "#bir>=180 || #bir<0" >  
  22.         你是何方妖怪?  
  23.      </s:if >  
  24.      <s:elseif test="#bir<=18 && #bir>=0" >  
  25.         未成年人不能进入!  
  26.      </s:elseif>  
  27.      <s:elseif test="#bir<=60 && #bir>=18" >  
  28.         您已经成年!  
  29.      </s:elseif>  
  30.      <s:else >  
  31.         您已经老了!  
  32.      </s:else >  
  33.      <br/>--------------------------------------------------------------<br/>  
  34.      #、append @用于将多个集合合并<br/>  
  35.      <s:set name="appList1"  value= "{'111','222','333','444'}" ></s:set>  
  36.      <s:set name="appList2"  value= "{'aaa','bbb','ccc','ddd'}" ></s:set>  
  37.      <s:append var="newAppList" >  
  38.         <s:param value="appList1" ></s:param>  
  39.         <s:param value="appList2" ></s:param>  
  40.      </s:append>  
  41.      <s:iterator value="#newAppList" >  
  42.         <s:property/> |   
  43.      </s:iterator>  
  44.       <br/>--------------------------------------------------------------<br/>  
  45.      #、generator  <br/>  
  46.      generator 标签,该标签可以将指定字符串按指定分隔符分割成多个字串。生成的多个字串可以用iterator标签进行迭代输出。可以这么理解:generator标 签将一个字符串转换成一个List集合。在该标签体内,整个临时生成的集合将为Valuestack的顶端,但一旦该标签结束,生成的集合将被移除 Valuestack。generator标签有如下几个属性:  
  47.     <br/>  
  48.     1 、count属性:指定生成集合中元素的总数。可选属性。<br/>  
  49.       
  50.     2 、val属性:必填属性,指定被解析的字符串。<br/>  
  51.       
  52.     3 、separator属性:这是一个必填属性,指定用于分割字符串的分隔符。<br/>  
  53.       
  54.     4 、 converter属性:可选属性,指定一个转换器,转换器负责将生成的集合中的每个字符串转换成对象,通过这个转换器可以将一个含有分隔符的字符串解析 成对象的集合。转换器必须一个继承org.apache.struts2.util.IteratorGenerator.Converter的对 象。  
  55.     <br/>  
  56.     5 、var属性,可选属性。如果指定了该属性,则将生成的集合保存在Stack Context中。如果不指定该属性,则将生成的集合放入ValueStack的顶端,该标签一结束,生成的集合就被移除。该属性也可替换成id。  
  57.     <br/>  
  58.      <s:generator  val="'aaa,bbb,ccc,ddd'"   separator= ","  count= "2" >  
  59.         <s:iterator>  
  60.             <s:property/>  
  61.         </s:iterator>  
  62.      </s:generator><br/>  
  63.   
  64.       <br/>--------------------------------------------------------------<br/>  
  65.      #、iterator 用于迭代数据<br/>  
  66.      <s:set name="iterList"  value= "{'aaa','bbb','ccc','ddd'}" ></s:set>  
  67.      <table border="1" >  
  68.      <tr>     
  69.                 <td>   索引   </td>     
  70.                 <td>   值   </td>     
  71.                 <td>   奇?   </td>     
  72.                 <td>   偶?    </td>     
  73.                 <td>   首?    </td>     
  74.                 <td>   尾?    </td>     
  75.                 <td>  当前迭代数量    </td>     
  76.             </tr>     
  77.        
  78.         <s:iterator value="{'aaa','bbb','ccc','ddd','eee','fff'}"  begin= "1"  status= "s" >  
  79.             <tr bgcolor="<s:if test=" #s.odd ">pink</s:if>" >  
  80.                 <td><s:property value="#s.index" /></td>  
  81.                 <td><s:property/></td>  
  82.                 <td><s:property value="#s.even" /></td>  
  83.                 <td><s:property value="#s.odd" /></td>  
  84.                 <td><s:property value="#s.first" /></td>  
  85.                 <td><s:property value="#s.last" /></td>  
  86.                 <td><s:property value="#s.count" /></td>  
  87.             </tr>  
  88.         </s:iterator>        
  89.      </table>  
  90.        
  91.        
  92.       <br/>--------------------------------------------------------------<br/>  
  93.      #、merge @和类似:用于将多个集合合并<br/>  
  94.      <s:set name="merList1"  value= "{'111','222','333','444'}" ></s:set>  
  95.      <s:set name="merList2"  value= "{'aaa','bbb','ccc','ddd'}" ></s:set>  
  96.      <s:append var="newMerList" >  
  97.         <s:param value="merList1" ></s:param>  
  98.         <s:param value="merList2" ></s:param>  
  99.      </s:append>  
  100.      <s:iterator value="#newMerList" >  
  101.         <s:property/> |   
  102.      </s:iterator>  
  103.       <br/>--------------------------------------------------------------<br/>  
  104.      #、sort @用于排序<br/>  
  105.      <s:bean var="myComparator"  name= "com.rao.comparator.MyComparator" ></s:bean>  
  106.      <s:sort comparator="#myComparator"  source= "{1,45,56,0,345,3}" >  
  107.         <s:iterator>  
  108.             <s:property/>,  
  109.         </s:iterator>  
  110.      </s:sort>  
  111.       <br/>--------------------------------------------------------------<br/>  
  112.      #、subset @用户截取集合中的子集;   注:decider:可选属性,指定由开发者自己决定是否选中该元素.    
  113.      <br/>  
  114.      <s:set name="subList"  value= "{'@@@','***','&&&','###'}" ></s:set>  
  115.      <s:subset source="#subList"  start= "1"  count= "2" >  
  116.         <s:iterator>  
  117.             <s:property/>,  
  118.         </s:iterator>  
  119.      </s:subset>  
  120.       <br/>--------------------------------------------------------------<br/>  
  121.        二、数据标签<br/>  
  122.       <hr size="3"  color= "red" >  
  123.     #、action @用于导入一个Action<br/>  
  124.     使用action标签,可以允许在jsp页面中直接调用Action,在调用Action时候,可以指定需要被调用的Action的name和namespace.如果指定了executeResult参数的属性值为true ,该标签会把Action的处理结果(视图资源)包含到本页面中. 使用action标签指定属性有:  
  125.     <br/>  
  126.     id: 可选属性,作为该Action的引用ID   <br/>   
  127.      
  128.     name:必选属性,指定调用Action    <br/>  
  129.          
  130.     namespace:可选属性,指定该标签调用Action所属namespace    <br/>  
  131.          
  132.     executeResult:可选属性,指定是否将Action的处理结果包含到本页面中.默认值为false ,不包含.    <br/>  
  133.          
  134.     ignoreContextParam:可选参数,指定该页面的请求参数是否需要传入调用的Action中,默认值是false ,即传入参数.<br/>  
  135.       
  136.     s:param是以request方式的值的,而不是以参数传值,所以request.getParameter("" )会获取不到值,通过request.getAttribute( "" )方式可以获取<br/>  
  137.   
  138.     <s:action name="tagsAction1"  ignoreContextParams= "true"  executeResult= "true"  namespace= "/com/rao" >  
  139.         <s:param name="userName"  value= "'三毛'" ></s:param>  
  140.     </s:action>  
  141.       
  142.       <br/>--------------------------------------------------------------<br/>  
  143.     #、bean @用于导入一个javaBean,相当于:jsp:useBean 标签<br/>  
  144.     <s:bean name="com.rao.bean.UserBean"  var= "user" >  
  145.         <s:param name="userId"  value= "1001" ></s:param>  
  146.         <s:param name="userName"  value= "'张三'" ></s:param>  
  147.     </s:bean>  
  148.     userId:<s:property value="#user.userId" /><br>  
  149.     userName:<s:property value="#user.userName" />  
  150.       <br/>--------------------------------------------------------------<br/>  
  151.     #、date @用于格式化日期<br/>  
  152.     <s:set name="dt"  value= "new java.util.Date()" ></s:set>  
  153.     当期系统时间是:<s:date name="dt"  format= "yyyy-MM-dd HH:ss:mm" />  
  154.       <br/>--------------------------------------------------------------<br/>  
  155.     #、debug @用于调试程序,让开发人员一目了然的知道当前请求、值栈、栈中的各项参数<br/>  
  156.     <s:debug/>  
  157.       <br/>--------------------------------------------------------------<br/>  
  158.     #、i18n @用于访问国际化资源文件的内容<br/>  
  159.                 1 .默认访问全局范围内的资源文件;  
  160.                 <br>  
  161.                 <s:text name="welcome" >  
  162.                     <s:param>三毛</s:param>  
  163.                     <s:param>学习</s:param>  
  164.                 </s:text>  
  165.           
  166.                 <hr>  
  167.                 2 .访问包范围内的资源文件;  
  168.                 <br>  
  169.                 <s:i18n name="com/rao/action/package" >  
  170.                     <s:text name="welcome" >  
  171.                         <s:param>三毛</s:param>  
  172.                         <s:param>学习</s:param>  
  173.                     </s:text>  
  174.                 </s:i18n>  
  175.                 <hr>  
  176.                 3 .访问Action范围内的资源文件;  
  177.                 <br>  
  178.                 <s:i18n name="com/rao/action/GlobalNativeAction" >  
  179.                     <s:text name="welcome" >  
  180.                         <s:param>三毛</s:param>  
  181.                         <s:param>学习</s:param>  
  182.                     </s:text>  
  183.                 </s:i18n>  
  184.       <br/>--------------------------------------------------------------<br/>  
  185.     #、include @用于导入一个jsp文件,等同于:jsp:include标签<br/>  
  186.     <s:include value="success.jsp" ></s:include>  
  187.       <br/>--------------------------------------------------------------<br/>  
  188.     #、param @用于给指定参数设置值<br/>  
  189.     <s:bean name="com.rao.bean.UserBean"  var= "user" >  
  190.         <s:param name="userId"  value= "1001" ></s:param>  
  191.         <s:param name="userName"  value= "'张三'" ></s:param>  
  192.     </s:bean>  
  193.     userId:<s:property value="#user.userId" /><br>  
  194.     userName:<s:property value="#user.userName" />  
  195.       <br/>--------------------------------------------------------------<br/>  
  196.     #、property @输出结果,很像EL表达式,但是可以依托于OGNL表带是很强大<br/>  
  197.     同上  
  198.       <br/>--------------------------------------------------------------<br/>  
  199.     #、push @该标签可以把程序员在ActionContext中引用的对像压入valuestack中,为以后访问对象提供了方便<br/>  
  200.     <s:push value="#request.user" ><s:property value= "userName" /></s:push>  
  201.       <br/>--------------------------------------------------------------<br/>  
  202.     #、set @用户声明对象或属性<br/>  
  203.     <s:set name="uName"  value= "#request.user.userName" ></s:set>  
  204.     <s:property value="#uName" />,你好啊!  
  205.       <br/>--------------------------------------------------------------<br/>  
  206.     #、text @用户获取国际化资源文件的内容<br/>  
  207.     请参考 il8n标签  
  208.       <br/>--------------------------------------------------------------<br/>  
  209.     #、url @用于组拼一个请求路径<br/>  
  210.     <s:url var="url1"  action= "MyAction"  method= "add" >  
  211.         <s:param name="id"  value= "%{23}" ></s:param>  
  212.         <s:param name="name"  value= "%{'tom'}" ></s:param>  
  213.     </s:url>  
  214.     <s:property value="#url1" />  
  215.     <br/>  
  216.     注意:<br/>     
  217.         <s:set name="myurl"  value= "'http://www.baidu.com'" ></s:set>     
  218.         value以字符处理:   <s:url value="#myurl" ></s:url><br>     
  219.         value明确指定以ognl表达式处理:    <s:url value="%{#myurl}" ></s:url>     
  220.       
  221.       <br/>--------------------------------------------------------------<br/>  
  222.       
  223.        三、UI标签<br/>  
  224.     <hr size="3"  color= "red" >  
  225.     <s:form>  
  226.     #、checkboxlist @复选框列表<br>  
  227.          1 > .list 生成;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~<br>     
  228.         name:checkboxlist的名字<br>     
  229.         list:checkboxlist要显示的列表<br>     
  230.         value:checkboxlist默认被选中的选项,checked=checked<br>     
  231.         <s:checkboxlist theme="simple"  name= "checkbox1"  list= "{'上网','看书','爬山','游泳','唱歌'}"  value= "{'上网','看书'}"  ></s:checkboxlist>     
  232.         <br>     
  233.          
  234.         2 > .Map 生成;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~<br>     
  235.         name:checkboxlist的名字<br>     
  236.         list:checkboxlist要显示的列表<br>     
  237.         listKey:checkbox 的value的值<br>     
  238.         listValue:checkbox 的lablel(显示的值)<br>     
  239.         value:checkboxlist默认被选中的选项,checked=checked<br>     
  240.         <s:checkboxlist theme="simple"  name= "checkbox2"  list= "#{1:'上网',2:'看书',3:'爬山',4:'游泳',5:'唱歌'}"  listKey= "key"  listValue= "value"  value= "{1,2,5}"  ></s:checkboxlist>     
  241.     
  242.          <br/>--------------------------------------------------------------<br/>  
  243.      #、combobox <br/>  
  244.     <s:combobox theme="simple"  label= "选择你喜欢的颜色"  name= "colorNames"   headerValue= "------请选择------"  headerKey= "1"   list= "{'红','橙','黄','绿','青','蓝','紫'}"  />   
  245.     <br/>--------------------------------------------------------------<br/>  
  246.      #、radio @单选框<br/>   
  247.          <%     
  248.             Sex sex1 = new  Sex( 1 , "男" );      
  249.             Sex sex2 = new  Sex( 2 , "女" );     
  250.             List<Sex> list = new  ArrayList<Sex>();      
  251.             list.add(sex1);     
  252.             list.add(sex2);     
  253.             request.setAttribute("sexs" ,list);      
  254.         %>     
  255.                       这个与checkboxlist差不多;<br>     
  256.         1 >.如果集合为javabean:<s:radio theme= "simple"  name= "sex"  list= "#request.sexs"  listKey= "id"  listValue= "name" ></s:radio><br>     
  257.         2 >.如果集合为list:<s:radio theme= "simple"  name= "sexList"  list= "{'男','女'}" ></s:radio><br>     
  258.         3 >.如果集合为map:<s:radio theme= "simple"  name= "sexMap"  list= "#{1:'男',2:'女'}"  listKey= "key"  listValue= "value" ></s:radio><br>     
  259.         <hr>     
  260.      <br/>--------------------------------------------------------------<br/>  
  261.      #、select @下拉列表框<br/>    
  262.         这个与s:checkboxlist差不多;<br>     
  263.         1 >.如果集合为javabean:<s:select theme= "simple"  name= "sex"  list= "#request.sexs"  listKey= "id"  listValue= "name" ></s:select><br>     
  264.         2 >.如果集合为list:<s:select theme= "simple"  name= "sexList"  list= "{'男','女'}" ></s:select><br>     
  265.         3 >.如果集合为map:<s:select theme= "simple"  name= "sexMap"  list= "#{1:'男',2:'女'}"  listKey= "key"  listValue= "value" ></s:select><br>     
  266.        
  267.      <br/>--------------------------------------------------------------<br/>  
  268.      #、doubleselect @级联菜单 <br/>  
  269.     <!--   可以用直接指定,当然也可以跟数据库绑定的 -->  
  270.      <s:set name="proviList"  value= "{'江西省','湖北省'}" ></s:set>  
  271.      <s:set name="jxList"  value= "{'南昌市','赣州市','九江市','上饶市','鹰潭市'}" ></s:set>  
  272.      <s:set name="hbList"  value= "{'武汉市','恩施市','十堰市','荆州市','襄樊市'}" ></s:set>  
  273.      <s:doubleselect theme="simple"   name= "provi"  doubleList= "top=='江西省' ? #jxList : #hbList"  list= "#proviList"  doubleName= "city" ></s:doubleselect>  
  274.      <br/>--------------------------------------------------------------<br/>  
  275.      #、optiontransferselect <br/>  
  276.      <s:optiontransferselect theme="simple"  label= "change"  name= "abc"  doubleList= "{'111','222','333','444'}"  list= "{'aaa','bbb','ccc','ddd'}"  doubleName= "number" ></s:optiontransferselect>  
  277.      <br/>--------------------------------------------------------------<br/>  
  278.      #、updownselect @可上下选择的select <br/>  
  279.      <s:updownselect label="selectCity"  emptyOption= "true"  name= "selectCity"  list= "#jxList"  headerValue= "-Please Select The City-"  headerKey= "-1" ></s:updownselect>  
  280.       <br/>--------------------------------------------------------------<br/>  
  281.      #、sx:datetimepicker @日期选择控件 <br/>  
  282.      使用步骤:声明:我这里用的是strut 2.1 . 8.1 ,在struts2. 0 的版本中可能有所不同;<br/>  
  283.               1 .导入struts2-dojo-plugin- 2.1 . 8.1 .jar DoJo 插件包;<br/>  
  284.               2 . 导入标签:<%--@ taglib prefix= "sx"  uri= "/struts-dojo-tags" --%>;<br/>  
  285.               3 .在需要使用的页面中的head标签之间加上<%-- <sx:head parseContent= "true" /> --%>;<br/>  
  286.      <sx:datetimepicker label="birthday"  name= "bir"  value= "#dt" ></sx:datetimepicker>  
  287.       <br/>--------------------------------------------------------------<br/>  
  288.      #、sx:tabbedpanel @选项卡控件 <br/>  
  289.       声明:这个标签代码转至:http://blog.sina.com.cn/s/blog_6145ed810100ecud.html,版权归作者所有;写的挺好拿来大家共同学习。   
  290.        
  291.       <!-- tabbedpanel标签 -->  
  292.         <!-- 最简单的选项卡,两个选项卡加载都是本页面 -->  
  293.           <hr color="blue" >  
  294.           <b>最简单的选项卡:</b>  
  295.           <br>  
  296.                 <sx:tabbedpanel id="tab1"  beforeSelectTabNotifyTopics= "/beforeSelect" >  
  297.              <sx:div label="Tab 1"  >  
  298.                  Local Tab 1   
  299.              </sx:div>    
  300.              <sx:div label="Tab 2"  >  
  301.                  Local Tab 2   
  302.              </sx:div>    
  303.                 </sx:tabbedpanel>  
  304.           
  305.           
  306.         <!-- 加载其他页面的选项卡 -->  
  307.           <hr color="blue" >  
  308.           <b>加载其他页面的选项卡:</b>  
  309.           <br>  
  310.           <sx:tabbedpanel id="tab2" >  
  311.           <sx:div label="Remote Tab 1"  href= "upload.jsp" >  
  312.                      Remote Tab 1   
  313.                 </sx:div>  
  314.              <sx:div label="Remote Tab 2"  href= "multipleUpload.jsp"  >  
  315.                      Remote Tab 1   
  316.                 </sx:div>  
  317.           </sx:tabbedpanel>  
  318.           
  319.           
  320.         <!-- 设置选项卡底下的内容懒加载,即等需要的时候再加载,使用属性preload="false" -->  
  321.           <hr color="blue" >  
  322.           <b>设置选项卡底下的内容懒加载,即等需要的时候再加载,使用属性preload="false" :</b>  
  323.           <br>  
  324.                 <sx:tabbedpanel id="tab3" >  
  325.              <sx:div label="Remote Tab 1"  href= "upload.jsp" >  
  326.                  Remote Tab 1   
  327.              </sx:div>   
  328.              <sx:div label="Remote Tab 2"  href= "multipleUpload.jsp"  preload= "false" >  
  329.                  Remote Tab 1   
  330.              </sx:div>       
  331.                 </sx:tabbedpanel>  
  332.           
  333.           
  334.         <!-- 固定大小的选项卡 -->  
  335.           <hr color="blue" >  
  336.           <b>固定大小的选项卡,使用属性cssStyle和doLayout:</b>  
  337.           <br>  
  338.                 <sx:tabbedpanel cssStyle="width: 200px; height: 100px;"  doLayout= "true"  id= "tab4" >  
  339.              <sx:div label="Tab 1"  >  
  340.                  Local Tab 1   
  341.              </sx:div>    
  342.              <sx:div label="Tab 2"  >  
  343.                  Local Tab 2   
  344.              </sx:div>    
  345.                 </sx:tabbedpanel>  
  346.           
  347.           
  348.         <!-- 每次点击选项卡时都重新刷新内容 -->  
  349.           <hr color="blue" >  
  350.           <b>每次点击选项卡时都重新刷新内容,使用属性refreshOnShow:</b>  
  351.           <br>  
  352.           <sx:tabbedpanel id="tab5" >  
  353.              <sx:div label="Remote Tab 1"  href= "upload.jsp"  refreshOnShow= "true" >  
  354.                  Remote Tab 1   
  355.              </sx:div>   
  356.              <sx:div label="Remote Tab 2"  href= "multipleUpload.jsp"  refreshOnShow= "true" >  
  357.                  Remote Tab 2   
  358.              </sx:div>       
  359.           </sx:tabbedpanel>  
  360.           
  361.            
  362.           
  363.         <!-- 使得其中一个选项卡失效 -->  
  364.           <hr color="blue" >  
  365.           <b>使得其中一个选项卡失效:</b>  
  366.           <br>  
  367.                  <sx:tabbedpanel id="tab6" >  
  368.             <sx:div label="Tab 1"  >  
  369.                 Local Tab 1   
  370.             </sx:div>    
  371.             <sx:div label="Tab 2"  disabled= "true" >  
  372.                 Local Tab 2   
  373.             </sx:div>    
  374.                 </sx:tabbedpanel>  
  375.           
  376.           
  377.         <!-- 设置选项卡在底部显示 (可以是: top, right, bottom, left) -->  
  378.           <hr color="blue" >  
  379.           <b>设置选项卡在底部显示 (可以是: top, right, bottom, left):</b>  
  380.           <br>  
  381.           <sx:tabbedpanel id="tab7"  labelposition= "bottom"  cssStyle= "width:200px;height:100px;"  doLayout= "true" >  
  382.              <sx:div label="Tab 1"  >  
  383.                  Local Tab 1   
  384.              </sx:div>    
  385.              <sx:div label="Tab 2"  >  
  386.                  Local Tab 2   
  387.              </sx:div>    
  388.           </sx:tabbedpanel>  
  389.           
  390.         <!-- 设置选项卡允许关闭,使用属性closeable -->  
  391.           <hr color="blue" >  
  392.           <b>设置选项卡允许关闭,使用属性closeable:</b>  
  393.           <br>         
  394.           <sx:tabbedpanel id="tab8" >  
  395.              <sx:div label="Tab 1"  >  
  396.                  Local Tab 1   
  397.              </sx:div>    
  398.              <sx:div label="Tab 2"   closable= "true" >  
  399.                  Local Tab 2   
  400.              </sx:div>    
  401.           </sx:tabbedpanel>  
  402.   
  403.      <br/>--------------------------------------------------------------<br/>  
  404.      #、sx:textarea @textarea 控件 <br/>  
  405.      <sx:textarea label="简介"  value= "sx:textareasx:textareasx:<br/>textareasx:textareasx:textareasx:<br/>textareasx:textareasx:<br/>textareasx:textarea" ></sx:textarea>  
  406.        
  407.      <br/>--------------------------------------------------------------<br/>  
  408.      #、sx:tree @树控件 <br/>  
  409.      <sx:tree id="tree1"  label= "根节点" >  
  410.        <sx:treenode id="tn1"  label= "财务部"  />  
  411.        <sx:treenode id="tn2"  label= "开发部" >  
  412.            <sx:treenode id="tn3"  label= "JAVA"  />  
  413.            <sx:treenode id="tn4"  label= ".NET"  />  
  414.        </sx:treenode>  
  415.        <sx:treenode id="tn5"  label= "人事部"  />  
  416.     </sx:tree>  
  417.        
  418.  </s:form>     
  419.        
  420.   </body>  
  421. </html>  
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@page import="com.rao.bean.Sex"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<%@ taglib prefix="sx" uri="/struts-dojo-tags"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
  <title>My page</title>
  <s:head theme="xhtml"/>
  <sx:head parseContent="true"/>
</head>

  <body>
    Struts 2.1 Tags
    <br/>
    <br/>
    一、控制标签<br/><hr size="3" color="red">
    
     #、if /elseif/ else @用于逻辑判断<br/>
     <s:set name="bir" value="-12"></s:set>
     <s:if test="#bir>=180 || #bir<0">
     	你是何方妖怪?
     </s:if>
     <s:elseif test="#bir<=18 && #bir>=0">
     	未成年人不能进入!
     </s:elseif>
     <s:elseif test="#bir<=60 && #bir>=18">
     	您已经成年!
     </s:elseif>
     <s:else>
     	您已经老了!
     </s:else>
     <br/>--------------------------------------------------------------<br/>
	 #、append @用于将多个集合合并<br/>
	 <s:set name="appList1" value="{'111','222','333','444'}"></s:set>
	 <s:set name="appList2" value="{'aaa','bbb','ccc','ddd'}"></s:set>
	 <s:append var="newAppList">
	 	<s:param value="appList1"></s:param>
	 	<s:param value="appList2"></s:param>
	 </s:append>
	 <s:iterator value="#newAppList">
	 	<s:property/> | 
	 </s:iterator>
	  <br/>--------------------------------------------------------------<br/>
	 #、generator  <br/>
	 generator标签,该标签可以将指定字符串按指定分隔符分割成多个字串。生成的多个字串可以用iterator标签进行迭代输出。可以这么理解:generator标签将一个字符串转换成一个List集合。在该标签体内,整个临时生成的集合将为Valuestack的顶端,但一旦该标签结束,生成的集合将被移除Valuestack。generator标签有如下几个属性:
	<br/>
	1、count属性:指定生成集合中元素的总数。可选属性。<br/>
	
	2、val属性:必填属性,指定被解析的字符串。<br/>
	
	3、separator属性:这是一个必填属性,指定用于分割字符串的分隔符。<br/>
	
	4、converter属性:可选属性,指定一个转换器,转换器负责将生成的集合中的每个字符串转换成对象,通过这个转换器可以将一个含有分隔符的字符串解析成对象的集合。转换器必须一个继承org.apache.struts2.util.IteratorGenerator.Converter的对象。
	<br/>
	5、var属性,可选属性。如果指定了该属性,则将生成的集合保存在Stack Context中。如果不指定该属性,则将生成的集合放入ValueStack的顶端,该标签一结束,生成的集合就被移除。该属性也可替换成id。
	<br/>
	 <s:generator  val="'aaa,bbb,ccc,ddd'"  separator="," count="2">
	 	<s:iterator>
	 		<s:property/>
	 	</s:iterator>
	 </s:generator><br/>

	  <br/>--------------------------------------------------------------<br/>
	 #、iterator 用于迭代数据<br/>
	 <s:set name="iterList" value="{'aaa','bbb','ccc','ddd'}"></s:set>
	 <table border="1">
	 <tr>   
                <td>   索引   </td>   
                <td>   值   </td>   
                <td>   奇?   </td>   
                <td>   偶?    </td>   
                <td>   首?    </td>   
                <td>   尾?    </td>   
                <td>  当前迭代数量    </td>   
            </tr>   
	 
		<s:iterator value="{'aaa','bbb','ccc','ddd','eee','fff'}" begin="1" status="s">
			<tr bgcolor="<s:if test="#s.odd">pink</s:if>">
				<td><s:property value="#s.index"/></td>
				<td><s:property/></td>
				<td><s:property value="#s.even"/></td>
				<td><s:property value="#s.odd"/></td>
				<td><s:property value="#s.first"/></td>
				<td><s:property value="#s.last"/></td>
				<td><s:property value="#s.count"/></td>
			</tr>
		</s:iterator>	 	 
	 </table>
	 
	 
	  <br/>--------------------------------------------------------------<br/>
	 #、merge @和类似:用于将多个集合合并<br/>
	 <s:set name="merList1" value="{'111','222','333','444'}"></s:set>
	 <s:set name="merList2" value="{'aaa','bbb','ccc','ddd'}"></s:set>
	 <s:append var="newMerList">
	 	<s:param value="merList1"></s:param>
	 	<s:param value="merList2"></s:param>
	 </s:append>
	 <s:iterator value="#newMerList">
	 	<s:property/> | 
	 </s:iterator>
	  <br/>--------------------------------------------------------------<br/>
	 #、sort @用于排序<br/>
	 <s:bean var="myComparator" name="com.rao.comparator.MyComparator"></s:bean>
	 <s:sort comparator="#myComparator" source="{1,45,56,0,345,3}">
	 	<s:iterator>
	 		<s:property/>,
	 	</s:iterator>
	 </s:sort>
	  <br/>--------------------------------------------------------------<br/>
	 #、subset @用户截取集合中的子集;   注:decider:可选属性,指定由开发者自己决定是否选中该元素.  
	 <br/>
	 <s:set name="subList" value="{'@@@','***','&&&','###'}"></s:set>
	 <s:subset source="#subList" start="1" count="2">
	 	<s:iterator>
	 		<s:property/>,
	 	</s:iterator>
	 </s:subset>
	  <br/>--------------------------------------------------------------<br/>
       二、数据标签<br/>
      <hr size="3" color="red">
	#、action @用于导入一个Action<br/>
	使用action标签,可以允许在jsp页面中直接调用Action,在调用Action时候,可以指定需要被调用的Action的name和namespace.如果指定了executeResult参数的属性值为true,该标签会把Action的处理结果(视图资源)包含到本页面中. 使用action标签指定属性有:
	<br/>
	id: 可选属性,作为该Action的引用ID   <br/> 
   
	name:必选属性,指定调用Action    <br/>
	   
	namespace:可选属性,指定该标签调用Action所属namespace    <br/>
	   
	executeResult:可选属性,指定是否将Action的处理结果包含到本页面中.默认值为false,不包含.    <br/>
	   
	ignoreContextParam:可选参数,指定该页面的请求参数是否需要传入调用的Action中,默认值是false,即传入参数.<br/>
	
	s:param是以request方式的值的,而不是以参数传值,所以request.getParameter("")会获取不到值,通过request.getAttribute("")方式可以获取<br/>

	<s:action name="tagsAction1" ignoreContextParams="true" executeResult="true" namespace="/com/rao">
		<s:param name="userName" value="'三毛'"></s:param>
	</s:action>
	
	  <br/>--------------------------------------------------------------<br/>
	#、bean @用于导入一个javaBean,相当于:jsp:useBean 标签<br/>
	<s:bean name="com.rao.bean.UserBean" var="user">
		<s:param name="userId" value="1001"></s:param>
		<s:param name="userName" value="'张三'"></s:param>
	</s:bean>
	userId:<s:property value="#user.userId"/><br>
	userName:<s:property value="#user.userName"/>
	  <br/>--------------------------------------------------------------<br/>
	#、date @用于格式化日期<br/>
	<s:set name="dt" value="new java.util.Date()"></s:set>
	当期系统时间是:<s:date name="dt" format="yyyy-MM-dd HH:ss:mm"/>
	  <br/>--------------------------------------------------------------<br/>
	#、debug @用于调试程序,让开发人员一目了然的知道当前请求、值栈、栈中的各项参数<br/>
	<s:debug/>
	  <br/>--------------------------------------------------------------<br/>
	#、i18n @用于访问国际化资源文件的内容<br/>
				1.默认访问全局范围内的资源文件;
				<br>
				<s:text name="welcome">
					<s:param>三毛</s:param>
					<s:param>学习</s:param>
				</s:text>
		
				<hr>
				2.访问包范围内的资源文件;
				<br>
				<s:i18n name="com/rao/action/package">
					<s:text name="welcome">
						<s:param>三毛</s:param>
						<s:param>学习</s:param>
					</s:text>
				</s:i18n>
				<hr>
				3.访问Action范围内的资源文件;
				<br>
				<s:i18n name="com/rao/action/GlobalNativeAction">
					<s:text name="welcome">
						<s:param>三毛</s:param>
						<s:param>学习</s:param>
					</s:text>
				</s:i18n>
	  <br/>--------------------------------------------------------------<br/>
	#、include @用于导入一个jsp文件,等同于:jsp:include标签<br/>
	<s:include value="success.jsp"></s:include>
	  <br/>--------------------------------------------------------------<br/>
	#、param @用于给指定参数设置值<br/>
	<s:bean name="com.rao.bean.UserBean" var="user">
		<s:param name="userId" value="1001"></s:param>
		<s:param name="userName" value="'张三'"></s:param>
	</s:bean>
	userId:<s:property value="#user.userId"/><br>
	userName:<s:property value="#user.userName"/>
	  <br/>--------------------------------------------------------------<br/>
	#、property @输出结果,很像EL表达式,但是可以依托于OGNL表带是很强大<br/>
	同上
	  <br/>--------------------------------------------------------------<br/>
	#、push @该标签可以把程序员在ActionContext中引用的对像压入valuestack中,为以后访问对象提供了方便<br/>
	<s:push value="#request.user"><s:property value="userName"/></s:push>
	  <br/>--------------------------------------------------------------<br/>
	#、set @用户声明对象或属性<br/>
	<s:set name="uName" value="#request.user.userName"></s:set>
	<s:property value="#uName"/>,你好啊!
	  <br/>--------------------------------------------------------------<br/>
	#、text @用户获取国际化资源文件的内容<br/>
	请参考 il8n标签
	  <br/>--------------------------------------------------------------<br/>
	#、url @用于组拼一个请求路径<br/>
	<s:url var="url1" action="MyAction" method="add">
		<s:param name="id" value="%{23}"></s:param>
		<s:param name="name" value="%{'tom'}"></s:param>
	</s:url>
	<s:property value="#url1"/>
	<br/>
	注意:<br/>   
        <s:set name="myurl" value="'http://www.baidu.com'"></s:set>   
        value以字符处理:   <s:url value="#myurl"></s:url><br>   
        value明确指定以ognl表达式处理:    <s:url value="%{#myurl}"></s:url>   
	
	  <br/>--------------------------------------------------------------<br/>
    
       三、UI标签<br/>
    <hr size="3" color="red">
    <s:form>
    #、checkboxlist @复选框列表<br>
   		 1> .list 生成;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~<br>   
        name:checkboxlist的名字<br>   
        list:checkboxlist要显示的列表<br>   
        value:checkboxlist默认被选中的选项,checked=checked<br>   
        <s:checkboxlist theme="simple" name="checkbox1" list="{'上网','看书','爬山','游泳','唱歌'}" value="{'上网','看书'}" ></s:checkboxlist>   
        <br>   
       
        2> .Map 生成;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~<br>   
        name:checkboxlist的名字<br>   
        list:checkboxlist要显示的列表<br>   
        listKey:checkbox 的value的值<br>   
        listValue:checkbox 的lablel(显示的值)<br>   
        value:checkboxlist默认被选中的选项,checked=checked<br>   
        <s:checkboxlist theme="simple" name="checkbox2" list="#{1:'上网',2:'看书',3:'爬山',4:'游泳',5:'唱歌'}" listKey="key" listValue="value" value="{1,2,5}" ></s:checkboxlist>   
  
         <br/>--------------------------------------------------------------<br/>
     #、combobox <br/>
    <s:combobox theme="simple" label="选择你喜欢的颜色" name="colorNames"  headerValue="------请选择------" headerKey="1"  list="{'红','橙','黄','绿','青','蓝','紫'}" /> 
	<br/>--------------------------------------------------------------<br/>
     #、radio @单选框<br/> 
    	 <%   
            Sex sex1 = new Sex(1,"男");    
            Sex sex2 = new Sex(2,"女");   
            List<Sex> list = new ArrayList<Sex>();    
            list.add(sex1);   
            list.add(sex2);   
            request.setAttribute("sexs",list);    
        %>   
                      这个与checkboxlist差不多;<br>   
        1>.如果集合为javabean:<s:radio theme="simple" name="sex" list="#request.sexs" listKey="id" listValue="name"></s:radio><br>   
        2>.如果集合为list:<s:radio theme="simple" name="sexList" list="{'男','女'}"></s:radio><br>   
        3>.如果集合为map:<s:radio theme="simple" name="sexMap" list="#{1:'男',2:'女'}" listKey="key" listValue="value"></s:radio><br>   
        <hr>   
     <br/>--------------------------------------------------------------<br/>
     #、select @下拉列表框<br/>  
     	这个与s:checkboxlist差不多;<br>   
        1>.如果集合为javabean:<s:select theme="simple" name="sex" list="#request.sexs" listKey="id" listValue="name"></s:select><br>   
        2>.如果集合为list:<s:select theme="simple" name="sexList" list="{'男','女'}"></s:select><br>   
        3>.如果集合为map:<s:select theme="simple" name="sexMap" list="#{1:'男',2:'女'}" listKey="key" listValue="value"></s:select><br>   
     
     <br/>--------------------------------------------------------------<br/>
     #、doubleselect @级联菜单 <br/>
    <!--   可以用直接指定,当然也可以跟数据库绑定的 -->
     <s:set name="proviList" value="{'江西省','湖北省'}"></s:set>
     <s:set name="jxList" value="{'南昌市','赣州市','九江市','上饶市','鹰潭市'}"></s:set>
     <s:set name="hbList" value="{'武汉市','恩施市','十堰市','荆州市','襄樊市'}"></s:set>
     <s:doubleselect theme="simple"  name="provi" doubleList="top=='江西省' ? #jxList : #hbList" list="#proviList" doubleName="city"></s:doubleselect>
     <br/>--------------------------------------------------------------<br/>
     #、optiontransferselect <br/>
     <s:optiontransferselect theme="simple" label="change" name="abc" doubleList="{'111','222','333','444'}" list="{'aaa','bbb','ccc','ddd'}" doubleName="number"></s:optiontransferselect>
     <br/>--------------------------------------------------------------<br/>
     #、updownselect @可上下选择的select <br/>
     <s:updownselect label="selectCity" emptyOption="true" name="selectCity" list="#jxList" headerValue="-Please Select The City-" headerKey="-1"></s:updownselect>
	  <br/>--------------------------------------------------------------<br/>
	 #、sx:datetimepicker @日期选择控件 <br/>
	 使用步骤:声明:我这里用的是strut 2.1.8.1,在struts2.0的版本中可能有所不同;<br/>
	 		  1.导入struts2-dojo-plugin-2.1.8.1.jar DoJo 插件包;<br/>
	 		  2. 导入标签:<%--@ taglib prefix="sx" uri="/struts-dojo-tags"--%>;<br/>
	 		  3.在需要使用的页面中的head标签之间加上<%-- <sx:head parseContent="true"/> --%>;<br/>
	 <sx:datetimepicker label="birthday" name="bir" value="#dt"></sx:datetimepicker>
	  <br/>--------------------------------------------------------------<br/>
     #、sx:tabbedpanel @选项卡控件 <br/>
   	  声明:这个标签代码转至:http://blog.sina.com.cn/s/blog_6145ed810100ecud.html,版权归作者所有;写的挺好拿来大家共同学习。
     
      <!-- tabbedpanel标签 -->
		<!-- 最简单的选项卡,两个选项卡加载都是本页面 -->
		  <hr color="blue">
		  <b>最简单的选项卡:</b>
		  <br>
		        <sx:tabbedpanel id="tab1" beforeSelectTabNotifyTopics="/beforeSelect">
		     <sx:div label="Tab 1" >
		         Local Tab 1
		     </sx:div>  
		     <sx:div label="Tab 2" >
		         Local Tab 2
		     </sx:div>  
		        </sx:tabbedpanel>
		
		
		<!-- 加载其他页面的选项卡 -->
		  <hr color="blue">
		  <b>加载其他页面的选项卡:</b>
		  <br>
		  <sx:tabbedpanel id="tab2">
		  <sx:div label="Remote Tab 1" href="upload.jsp">
		             Remote Tab 1
		        </sx:div>
		     <sx:div label="Remote Tab 2" href="multipleUpload.jsp" >
		             Remote Tab 1
		        </sx:div>
		  </sx:tabbedpanel>
		
		
		<!-- 设置选项卡底下的内容懒加载,即等需要的时候再加载,使用属性preload="false"-->
		  <hr color="blue">
		  <b>设置选项卡底下的内容懒加载,即等需要的时候再加载,使用属性preload="false":</b>
		  <br>
		        <sx:tabbedpanel id="tab3">
		     <sx:div label="Remote Tab 1" href="upload.jsp">
		         Remote Tab 1
		     </sx:div> 
		     <sx:div label="Remote Tab 2" href="multipleUpload.jsp" preload="false">
		         Remote Tab 1
		     </sx:div>     
		        </sx:tabbedpanel>
		
		
		<!-- 固定大小的选项卡 -->
		  <hr color="blue">
		  <b>固定大小的选项卡,使用属性cssStyle和doLayout:</b>
		  <br>
		        <sx:tabbedpanel cssStyle="width: 200px; height: 100px;" doLayout="true" id="tab4">
		     <sx:div label="Tab 1" >
		         Local Tab 1
		     </sx:div>  
		     <sx:div label="Tab 2" >
		         Local Tab 2
		     </sx:div>  
		        </sx:tabbedpanel>
		
		
		<!-- 每次点击选项卡时都重新刷新内容 -->
		  <hr color="blue">
		  <b>每次点击选项卡时都重新刷新内容,使用属性refreshOnShow:</b>
		  <br>
		  <sx:tabbedpanel id="tab5">
		     <sx:div label="Remote Tab 1" href="upload.jsp" refreshOnShow="true">
		         Remote Tab 1
		     </sx:div> 
		     <sx:div label="Remote Tab 2" href="multipleUpload.jsp" refreshOnShow="true">
		         Remote Tab 2
		     </sx:div>     
		  </sx:tabbedpanel>
		
		 
		
		<!-- 使得其中一个选项卡失效 -->
		  <hr color="blue">
		  <b>使得其中一个选项卡失效:</b>
		  <br>
		         <sx:tabbedpanel id="tab6">
		    <sx:div label="Tab 1" >
		        Local Tab 1
		    </sx:div>  
		    <sx:div label="Tab 2" disabled="true">
		        Local Tab 2
		    </sx:div>  
		        </sx:tabbedpanel>
		
		
		<!-- 设置选项卡在底部显示 (可以是: top, right, bottom, left) -->
		  <hr color="blue">
		  <b>设置选项卡在底部显示 (可以是: top, right, bottom, left):</b>
		  <br>
		  <sx:tabbedpanel id="tab7" labelposition="bottom" cssStyle="width:200px;height:100px;" doLayout="true">
		     <sx:div label="Tab 1" >
		         Local Tab 1
		     </sx:div>  
		     <sx:div label="Tab 2" >
		         Local Tab 2
		     </sx:div>  
		  </sx:tabbedpanel>
		
		<!-- 设置选项卡允许关闭,使用属性closeable -->
		  <hr color="blue">
		  <b>设置选项卡允许关闭,使用属性closeable:</b>
		  <br>       
		  <sx:tabbedpanel id="tab8">
		     <sx:div label="Tab 1" >
		         Local Tab 1
		     </sx:div>  
		     <sx:div label="Tab 2"  closable="true">
		         Local Tab 2
		     </sx:div>  
		  </sx:tabbedpanel>

 	 <br/>--------------------------------------------------------------<br/>
     #、sx:textarea @textarea控件 <br/>
     <sx:textarea label="简介" value="sx:textareasx:textareasx:<br/>textareasx:textareasx:textareasx:<br/>textareasx:textareasx:<br/>textareasx:textarea"></sx:textarea>
     
     <br/>--------------------------------------------------------------<br/>
     #、sx:tree @树控件 <br/>
     <sx:tree id="tree1" label="根节点">
	   <sx:treenode id="tn1" label="财务部" />
	   <sx:treenode id="tn2" label="开发部">
	       <sx:treenode id="tn3" label="JAVA" />
	       <sx:treenode id="tn4" label=".NET" />
	   </sx:treenode>
	   <sx:treenode id="tn5" label="人事部" />
	</sx:tree>
     
 </s:form>   
     
  </body>
</html>

 

 

struts.xml 代码:

Xml代码   收藏代码
  1. <? xml   version = "1.0"   encoding = "UTF-8" ?>   
  2. <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1.7//EN" "struts-2.1.7.dtd" >   
  3. < struts >   
  4.     < constant   name = "struts.custom.i18n.resources"   value = "struts2" > </ constant >   
  5.     < constant   name = "struts.configuration.xml.reload"   value = "true" > </ constant >   
  6.       
  7.     < package   name = "package1"   namespace = "/com/rao"   extends = "struts-default" >   
  8.         < action   name = "tagsAction1"   class = "com.rao.action.TagsAction1" >   
  9.             < result > /success.jsp </ result >   
  10.               
  11.         </ action >   
  12.     </ package >   
  13. </ struts >   

 

 TagsAction1.java 代码:

Java代码   收藏代码
  1. package  com.rao.action;  
  2.   
  3. import  com.opensymphony.xwork2.ActionSupport;  
  4.   
  5. public   class  TagsAction1  extends  ActionSupport {  
  6.     private  String userName;  
  7.     public  String getUserName() {  
  8.         return  userName;  
  9.     }  
  10.     public   void  setUserName(String userName) {  
  11.         this .userName = userName;  
  12.     }  
  13.   
  14.     @Override   
  15.     public  String execute()  throws  Exception {  
  16.           
  17.         return  SUCCESS;  
  18.     }  
  19.   
  20. }  
package com.rao.action;

import com.opensymphony.xwork2.ActionSupport;

public class TagsAction1 extends ActionSupport {
	private String userName;
	public String getUserName() {
		return userName;
	}
	public void setUserName(String userName) {
		this.userName = userName;
	}

	@Override
	public String execute() throws Exception {
		
		return SUCCESS;
	}

}

 

 

GlobalNativeAction.java

Java代码   收藏代码
  1. package  com.rao.action;  
  2.   
  3. import  com.opensymphony.xwork2.ActionContext;  
  4. import  com.opensymphony.xwork2.ActionSupport;  
  5. /**  
  6.  * 演示的是在Action 中获取国际化资源文件中的内容  
  7.  * @author Administrator  
  8.  *  
  9.  */   
  10. public   class  GlobalNativeAction  extends  ActionSupport {  
  11.   
  12.     @Override   
  13.     public  String execute()  throws  Exception {  
  14.         //不带有占位符的获取方法   
  15.         //ActionContext.getContext().put("message", this.getText("welcome"));   
  16.         //带有占位符的获取方法   
  17.         ActionContext.getContext().put("message" ,  this .getText( "welcome" , new  String[]{ "raozhiyong" , "study" }));  
  18.         return   "message" ;  
  19.     }  
  20.   
  21. }  
package com.rao.action;

import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
/**
 * 演示的是在Action 中获取国际化资源文件中的内容
 * @author Administrator
 *
 */
public class GlobalNativeAction extends ActionSupport {

	@Override
	public String execute() throws Exception {
		//不带有占位符的获取方法
		//ActionContext.getContext().put("message", this.getText("welcome"));
		//带有占位符的获取方法
		ActionContext.getContext().put("message", this.getText("welcome",new String[]{"raozhiyong","study"}));
		return "message";
	}

}

 

 

struts2_zh_CN.properties

 

 

welcome      全局范围:{0},这是一个中文的国际化资源文件,欢迎你的使用{1}!!!

 

GlobalNativeAction_zh_CN.properties

 

 

welcome      Action范围:{0},这是一个中文的国际化资源文件,欢迎你的使用{1}!!!

 

package_zh_CN.properties

 

 

welcome      package范围:{0},这是一个中文的国际化资源文件,欢迎你的使用{1}!!!

 

Sex.java

 

 

Java代码   收藏代码
  1. package  com.rao.bean;  
  2.   
  3. public   class  Sex {  
  4.     private   int  id;  
  5.     private  String name;  
  6.       
  7.     public  Sex( int  id, String name) {  
  8.         super ();  
  9.         this .id = id;  
  10.         this .name = name;  
  11.     }  
  12.       
  13.     public   int  getId() {  
  14.         return  id;  
  15.     }  
  16.     public   void  setId( int  id) {  
  17.         this .id = id;  
  18.     }  
  19.     public  String getName() {  
  20.         return  name;  
  21.     }  
  22.     public   void  setName(String name) {  
  23.         this .name = name;  
  24.     }  
  25.   
  26. }  
package com.rao.bean;

public class Sex {
	private int id;
	private String name;
	
	public Sex(int id, String name) {
		super();
		this.id = id;
		this.name = name;
	}
	
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}

}

 

 

UserBean.java

 

Java代码   收藏代码
  1. package  com.rao.bean;  
  2.   
  3. import  java.io.Serializable;  
  4.   
  5. public   class  UserBean  implements  Serializable{  
  6.   
  7.     private   static   final   long  serialVersionUID = 1L;  
  8.     public  UserBean() {}  
  9.       
  10.     private  Integer userId;  
  11.     private  String userName;  
  12.     public  Integer getUserId() {  
  13.         return  userId;  
  14.     }  
  15.     public   void  setUserId(Integer userId) {  
  16.         this .userId = userId;  
  17.     }  
  18.     public  String getUserName() {  
  19.         return  userName;  
  20.     }  
  21.     public   void  setUserName(String userName) {  
  22.         this .userName = userName;  
  23.     }  
  24.   
  25. }  
package com.rao.bean;

import java.io.Serializable;

public class UserBean implements Serializable{

	private static final long serialVersionUID = 1L;
	public UserBean() {}
	
	private Integer userId;
	private String userName;
	public Integer getUserId() {
		return userId;
	}
	public void setUserId(Integer userId) {
		this.userId = userId;
	}
	public String getUserName() {
		return userName;
	}
	public void setUserName(String userName) {
		this.userName = userName;
	}

}

 

 

MyComparator.java

 

 

Java代码   收藏代码
  1. package  com.rao.comparator;  
  2.   
  3. import  java.util.Comparator;  
  4.   
  5. public   class  MyComparator  implements  Comparator<Integer> {  
  6.   
  7.     public   int  compare(Integer o1, Integer o2) {  
  8.         int  c = o1.compareTo(o2);   
  9.         return  c; //可以完成顺序排序   
  10.         //return -c;//可以完成倒序排序   
  11.     }  
  12. }  
package com.rao.comparator;

import java.util.Comparator;

public class MyComparator implements Comparator<Integer> {

	public int compare(Integer o1, Integer o2) {
		int c = o1.compareTo(o2); 
		return c;//可以完成顺序排序
		//return -c;//可以完成倒序排序
	}
}

 

 运行结果,附上图片:

 


 

 

 

 

 

 

【LAMMPS学习】八、基础知识(2.1)2D模拟 此部分描述了如何使用 LAMMPS 为用户和开发人员执行各种任务。术语表页面还列出了 MD 术语,以及相应 LAMMPS 手册页的链接。LAMMPS 源代码分发的examples目录中包含的示例输入脚本以及示例脚本页面上突出显示的示例输入脚本还展示了如何设置和运行各种模拟。 阅读详情

相关推荐

告别盲打:为NXOpen Python API生成智能代码提示的完整指南

本文提供了一份为NXOpen Python API生成智能代码提示的完整指南。通过配置匹配的Python环境、利用类型存根文件生成工具创建.pyi文件,并在PyCharm或VSCode中正确配置,开发者可以彻底告别“盲打”,获得精准的代码补全和参数提示,从而大幅提升NX二次开发的效率和体验。

weixin_29057695的博客 372

Struts中JAVA.UTIL.DATE的日期转换器必须自己写

1.首先写一个类型转换器,主要就是要实现一下Converter这个接口就行了    public class UtilDateConverter implements Converter { /**  * value 表示从表单上面提交过去的值  */ public Object convert(Class type, Object value) {  if(value == null

专注于数据 706

iTunes登录协议抓包实战:绕过反检测与TLS解密的完整方案

在软件逆向与网络协议分析中,抓包工具扮演着关键角色。代理型工具如Fiddler通过修改系统代理实现HTTPS解密,而驱动型工具如HTTPDebugger则注入进程钩取网络API,但这些实现机制往往会被具有反检测策略的客户端识别。以iTunes登录协议为例,其内置证书锁定、进程完整性与系统代理检测等防护,导致常规抓包方案失效。从工具原理出发,对比不同抓包方案的暴露面,重点介绍如何利用Fiddler通过中间人代理获取明文流量,以及使用Wireshark进行被动监听规避检测的进阶技巧,并总结常见问题排查经验,为分

weixin_28607671的博客 367

Struts2.1 标签详细说明(1)

   Struts 2.1 Tags最近学习  Struts 2.1 Tags 做了些笔记,贴出来大家一起学习下,希望大家多多交流。 别的都不说了,我就贴代码,代码里注释比较详细,呵呵。 文件目录,如下:       index.jsp 代码Java代码  1. &lt;%@ page language="java" import="java.util.*" pageEncoding="UTF-8...

五谷杂粮 209

MS1030超声波流量计电路实战:如何用15ps精度优化水表设计(附配置代码)

本文深入探讨了如何利用MS1030超声波流量计芯片实现15ps高精度测量,以优化水表设计。文章从系统误差分配出发,详细解析了硬件电路设计要点、SPI通信配置及核心优化技巧,如利用可编程偏置电压和8回波累加功能来提升抗干扰能力与测量稳定性,并附有实用的配置代码示例。

svm4gardener的博客 341

智能驾驶感知模块的测试评估方法(上)

对于智能驾驶系统而言,感知模块是开发难度最大、投入资源最多的核心部分。在智能驾驶开发团队内部,感知模块需要独立进行评测才能及早发现潜在缺陷或判断性能是否有改进。随着近几年BEV、OCC、E2E等新技术方案被越来越多企业应用,感知的评测变得越来越艰难,效率也变得越来越低下。本文作者基于在智驾测试行业多年经验,试图总结感知评测的基本规律和效率提升方法,以供读者一些启发。

vincent_321的博客 2559

Struts2.1 标签详细说明(2)

&lt;!-- 最简单的选项卡,两个选项卡加载都是本页面 --&gt;              &lt;hr color="blue"&gt;              &lt;b&gt;最简单的选项卡:&lt;/b&gt;              &lt;br&gt;                    &lt;sx:tabbedpanel id="tab1&quot

五谷杂粮 127

有线CarPlay连接全解析:从USB数据线到故障排查实战

车载互联是现代驾驶体验的重要一环,而CarPlay作为手机与车机深度融合的桥梁,其连接稳定性直接关系到导航、通话和娱乐体验。无线方案虽然便利,但在延迟、发热和连接确定性上仍有短板,这使得有线USB连接成为追求可靠性的主流选择。理解USB协议与CarPlay握手原理,是解决连接问题的关键。从USB枚举、认证到iAP2通信,每一步都影响最终体验。本文从线材选型、接口判断出发,深入老车加装方案与故障排查链路,并结合USB抓包等进阶调试手段,帮助车主和开发者从底层理解并解决CarPlay连接难题,让每一次上车都能获

weixin_34183910的博客 451

1. Struts2页面开发中常用标签使用说明

1. Struts2页面开发中常用标签使用说明 1.1.往action里传值的使用方式: a. userName属性需要在访问的action中提供相应的属性,并有SET/GET方法。 b. 可以不在访问的action中提供相应的属性,用request.getParameter(“userName”);1.2.显示标签 property 用于输出指定值: 当action返回到...

lisj0731的专栏 101

从零玩转Vitis裸机开发:手把手教你创建、移植与实战优化

✅ Vitis裸机开发全流程✅ 中断系统配置技巧✅ 跨平台移植方法论✅ 性能优化实战经验研究FreeRTOS移植探索AMP(非对称多处理)架构学习使用Vitis Analyzer进行性能分析技术雷达:关注Xilinx最新推出的Vitis Unified IDE,其集成了更强大的调试和分析工具。立即动手实践吧!

QQ_778132974的博客 584

华为OD机试 - 机器人活动区域(Java 双机位C卷 200分)

现有一个机器人,可放置于 M × N的网格中任意位置,每个网格包含一个非负整数编号。之后M行表示网格数值,每行N个数值(数值大小用k表示),数值间用单个空格分隔,行首行尾无多余空格。说明:图中绿色区域,相邻网格差值绝对值都小于等于1,且为最大区域,对应网格点数目为6。M、N、k均为整数,且1

学Java,找哪吒 916

struts2.1或2.2不能识别的部分标签

<br />struts2.1以后,有些标签包含在了<%@ taglib prefix="sx" uri="/struts-dojo-tags" %> 标签库中,所以必须导入struts2-dojo-plugin-2.1.8.1.jar包,所以除了包含导入<%@ taglib uri="/struts-tags" prefix="s" %>,还要加上<%@ taglib prefix="sx" uri="/struts-dojo-tags" %>,目前发现的是日历标签和树状结构标签,而<S:/head>就不

shuye001的专栏 434

Halcon那些事:Halcon非常核心的1个概念reduce_domain算子的理解和1个详细的使用示例

Reduce是减少的意思。并不是真的去裁剪图像,而是定义一个“感兴趣的区域(Region of Interest, ROI)”。后续的图像处理算子将只在这个定义的区域内有效,区域外的像素将被忽略。在一张白纸(完整图像)上放一张镂空的纸板(Domain)。我们后续的绘画(图像处理操作)只会透过镂空的部分影响到下面的白纸。镂空纸板之外的部分保持不变,也不会被处理。关键步骤:使用ReduceDomain,将图像的域限制为ROI区域,图像在原来图像基础上存在图像区域。

十多年IT经验,专注机器视觉,智能制造半导体行业 580

开发Struts 2项目遇到的一个问题,就是在struts-tags标签库下没有了s:datetimepicker标签的解决办法

今天在学习struts 2.0框架的时候,要用到标签库struts-tags里的标签:s:datetimepicker,后来运行项目的时候竟然报错了,说:datetimepiceker没有在标签库里定义,后来在网上查了一下,下面是相应的解决方案。错误提示:org.apache.jasper.JasperException: /struts2/index.jsp(16,3) No tag “datet

Merryhyl的专栏 1075

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

Struts2.1中datetimepicker标签使用

官方参考文档:http://struts.apache.org/2.1.6/docs/datetimepicker.html 在以前的struts2.0版本中s:datetimepicker只需要在head标签处设置 , 就可以直接使用s:datetimepicker的标签了。 而在2.1.6版本中不能直接这样使用了,将datetimepicker移除了。 原因是此标签调用了dojo...

生活如此悲剧 175

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Struts标签中的字符串格式化输出

一、Struts1中的表示字符串的原样输出,同。如果所要输出的字符串中含有html标签的话,标签内容将原样输出(不解析)。如果要解析html中的内容,只要将filter属性值设为"false"就可以了。 二、Struts2中对应的Struts1中的filter属性为escape,只需将escape的值置为相应的true和false就可以了。例如默认情况下escape="true"

bzkfn的专栏 2062

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

Struts2之标签库常用标签

基本概述:在JavaWeb中,Struts2标签库是一个比较完善,而且功能强大的标签库,它将所有标签都统一到一个标签库中,从而简化了标签的使用,它还提供主题和模板的支持,极大地简化了视图页面代码的编写,同时它还提供对ajax的支持,大大的丰富了视图的表现效果。与JSTL(JSP Standard Library,JSP 标准标签库)相比,Struts2标签库更加易用和强大。 PS:使用标签,需要...

weixin_42687829的博客 928

OGNL表达式语言与struts2标签库简单介绍

OGNL表达式语言概述 OGNL是Object Graphic Navigation Language(对象图导航语言)的缩写,一般结合struts标签库一起使用,也是Struts2框架使用OGNL作为默认的表达式语言; OGNL的优势 1、支持对象方法调用 2、支持类静态的方法调用和值访问:@[类全名@[方法名|值名]] 3、支持赋值操作和表达式串联 4、访问OGNL上下文(上下文...

小鞋子的博客 307

Struts1 标签库 说明

Struts提供了五个标签库,即:HTML、Bean、Logic、Template和Nested。 HTML标签 : 用来创建能够和Struts 框架和其他相应的HTML 标签交互的HTML 输入表单 Bean标签:  在访问JavaBeans 及其属性,以及定义一个新的bean 时使用 Logic标签: 管理条件产生的输出和对象集产生的循环 Template标签:随着Tiles框架包的出

zhulefei的专栏 2万+

Struts2 标签配置详细(2)

在介绍常用标志前,我想先从总体上,对Struts 1.x与Struts 2.0的标志库(Tag Library)作比较。  Struts 1.xStruts 2.0分类将标志库按功能分成HTML、Tiles、Logic和Bean等几部分严格上来说,没有分类,所有标志都在URI为“/struts-tags”命名空间下,不过,我们可以从功能上将其分为两大类:

ccsky001的天空 3093

Struts2标签<1>-HTML标签与struts2标签区别

一)struts2中的HTML标签与用原始的hteml标签哪个更好?有什么区别?为什么要使用上struts2标签? 1)应该根据实际情况的选取,当你的标签中出现了action返回的参数,选用struts的html标签可能好些,否则你的页面会出现,这在项目中不允许的,当然要是普通的html,就没有必要使用struts的html标签。  也不是一定要用,只是用struts2标签会比纯html标

飞翔的心 4337

struts2常用的标签介绍

一:Struts2框架的标签库可以分为以下三类:     1.用户界面标签(UI标签):主要用来生成HTML元素的标签。 (1)表单标签:主要用于生成HTML页面的FORM元素,以及普通表单元素的标签。 (2)非表单标签:主要用于生成页面上的tree,Tab页等。    2.非用户界面标签(非UI标签):主要用于数据访问,逻辑控制。 (1)数据访问标签:主要包含用于输出值栈(ValueS

smile juan的专栏 4679

struts2标签说明

struts2 标签  a    a标签创建一个HTML超链接,等价于HTML 的 示范代码: 登陆 更多 a 信息  action    使用action标签 可以允许在JSP页面中直接调用Action。 范例如下: 更多 action 信息  actionerror    这个标签负责输出错误信息到客户

screensky的专栏 1970
上一篇: Java关键字final、static使用总结
下一篇: Struts2中表单与Action传递数据三种方式
弘里木扇
博客等级 码龄17年 69粉丝 8原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值