struts标签

<s:if>标签

拥有一个test属性,其表达式的值用来决定标签里内容是否显示

  1. <s:if test="#request.username=='clf'">欢迎clf</s:if> 
  2.      <s:elseif test="#request.username=='yqy'>欢迎yqy</s:elseif> 
  3. <s:else>请登录</s:else> 
<s:if test="#request.username=='clf'">欢迎clf</s:if>
	 <s:elseif test="#request.username=='yqy'>欢迎yqy</s:elseif>
 <s:else>请登录</s:else>

<s: iterator>标签

用于遍历集合(java.util.Collection)或者枚举值(java.util.Iterator)类型的对象,value属性表示集合或枚举对象,status属性表示当前循环的对象,在循环体内部可以引用该对象的属性

  1. <s:iterator value="userList" status="user"> 
  2. 姓名:<s:property value="user.userName" /> 
  3. 年龄:<s:property value="user.age" /> 
  4. </s:iterator> 
  5. <s:debug></s:debug> 
<s:iterator value="userList" status="user">
姓名:<s:property value="user.userName" />
年龄:<s:property value="user.age" />
</s:iterator>
<s:debug></s:debug>

  1. <s:iterator value="#request.strs" var="strs"> 
  2.      <s:property value="#strs"/> 
  3. </s:iterator> 
  4. <s:debug></s:debug> 
<s:iterator value="#request.strs" var="strs">
     <s:property value="#strs"/>
</s:iterator>
<s:debug></s:debug>

<s:textfield>

文本框标签,可填写文本内容,同时该标签含有很多有用的属性:

      readonly 只读属性

      disabled 可用/不可用属性,如果设置为不可用在提交表单的时候该文本框的值不会传到后台

      cssClass 指定css的class

      cssStyle 自定义css样式

      maxlength 文本框可输入的文字个数

      tooltip 冒泡提示

  1. <s:form action="register" method="post"> 
  2.    <s:textfield name="username" label="用户名"></s:textfield> 
  3. </s:form> 
<s:form action="register" method="post">
   <s:textfield name="username" label="用户名"></s:textfield>
</s:form>

<s:password>

与<s:textfield>类似

<s:textarea>

与<s:textfield>类似

其核心属性cols和rows分别指定文本域的宽度和高度

<s:file>标签

与<s:textfield>类似

<s:submit>标签

生成提交按钮

<s:reset>标签

生成重置按钮

<s:radio>标签

  1. <s:radio name="sex"list="#{'male':'男','female':'女'}" value="male" label="性别" tooltip="选择性别"/> 
<s:radio name="sex"list="#{'male':'男','female':'女'}" value="male" label="性别" tooltip="选择性别"/>

使用value指定默认值

radio标签的list属性必须是Map类型,key为实际值,value为显示值,如果为List类型会抛出异常

<s:checkbox>标签

  1. <s:checkbox name="checkName" value="true" fieldValue="Y"/> 
<s:checkbox name="checkName" value="true" fieldValue="Y"/>

struts2的checkbox标签在使用的时候需要注意它的两个属性。value和fieldValue,在其他的标签中value是真实值。而在checkbox中,value如果为true,就表示复选框被选中;如果为false就表示不被选中。fieldValue才是此复选框对应的真实的值。

<s: checkboxlist>标签

拥有list、listKey、listValue属性,参照<s:select>标签的注解

  1. <s:checkboxlist name="interest" list="{'足球','篮球','排球','游泳'}" label="兴趣爱好"/> 
<s:checkboxlist name="interest" list="{'足球','篮球','排球','游泳'}" label="兴趣爱好"/>

需要用复选框时,如果对应的属性为Boolean类型时用checkbox标签,如果为集合类或者数组类则用checkboxlist标签

<s: combobox>标签

此标签用于生成一个组合框,即可选择,也可编辑,就是一个编辑框加一个下拉框

  1. <s:combobox list="#request.list2" name="fruit" label="最喜爱的水果"/> 
<s:combobox list="#request.list2" name="fruit" label="最喜爱的水果"/>

<s:select>标签

输出一个下拉列表框,相当于HTML代码中的<select/>

常用属性如下:

list:必需,可以为Cellection、Map、Enumeration、Iterator、array类型,指定要迭代的集合,使用集合中的元素来设置各个选项,如果list的属性为Map则Map的key成为选项的value,Map的value会成为选项的内容

listKey:指定集合对象中的哪个属性作为选项的value

listValue:指定集合对象中的哪个属性作为选项的内容

headerKey:设置当用户选择了header选项时,提交的的value,如果使用该属性,不能为该属性设置空值,headerKey指定缺省的选项"value",headerValue指定缺省的选项"text"

headerValue:显示在页面中header选项内容

emptyOption:是否在header选项后面添加一个空选项

multiple:是否多选

size:显示的选项个数

示例如下

  1. <s:select list="{'aa','bb','cc'}" headerKey="00"  headerValue="00"></s:select> 
  2.   
  3. <s:select list="#{1:'aa',2:'bb',3:'cc'}"  label="abc" listKey="key" listValue="value"  headerKey="0"headerValue="aabb"> 
<s:select list="{'aa','bb','cc'}" headerKey="00"  headerValue="00"></s:select>
 
<s:select list="#{1:'aa',2:'bb',3:'cc'}"  label="abc" listKey="key" listValue="value"  headerKey="0"headerValue="aabb">

  1. <
  2. java.util.HashMapmap = new java.util.LinkedHashMap(); 
  3. map.put(1,"aaa"); 
  4. map.put(2,"bbb"); 
  5. map.put(3,"ccc"); 
  6. request.setAttribute("map",map); 
  7. request.setAttribute("aa","2"); 
  8. %> 
  9. <s:select list="#request.map"  label="abc" listKey="key" listValue="value" 
  10. value="#request.aa"  headerKey="0"  headerValue="aabb"></ 
  11. s:select> 
<%
java.util.HashMapmap = new java.util.LinkedHashMap();
map.put(1,"aaa");
map.put(2,"bbb");
map.put(3,"ccc");
request.setAttribute("map",map);
request.setAttribute("aa","2");
%>
<s:select list="#request.map"  label="abc" listKey="key" listValue="value"
 value="#request.aa"  headerKey="0"  headerValue="aabb"></
s:select>

<s:doubleselect>标签

输出关联的两个HTML列表框,产生联动效果

list、listKey、listValue、headerKey、headerValue、emptyOption、multiple、size属性与<s:select>标签一样,作用域第一个下拉框

doubleId:指定第二个列表框的ID

doubleList:指定第二个下拉框要迭代的集合

doubleListKey:指定集合对象中的哪个属性作为选项的value,该选项只对第二个列表框起作用

doubleListValue:指定集合对象中的哪个属性作为选项的内容,该选项只对第二个列表框起作用

doubleSize:选项个数

doubleName:指定第二个列表框的name映射

doubleValue:第二个列表框的初始选项

注意,list属性必须为结合类型或者数组类型,而doublelist属性必须为Map类型

  1. //城市对象 
  2. public class CityBean { 
  3. private intcityid; 
  4. private Stringcityname; 
  5. //省略了setter、getter方法 
  6.   
  7. //区域对象 
  8. public class AreaBean { 
  9. private intareaid; 
  10. private Stringareaname; 
  11. private int cityid; 
  12. //省略了setter、getter方法 
  13.   
  14. public class CityAction extends ActionSupport { 
  15. //map映射cityid--区域列表 
  16. private Map<Integer, List<AreaBean>> areaMap = new HashMap<Integer,List<AreaBean>>(); 
  17. //list装所有city集合 
  18. private List<CityBean> cityBeans = new ArrayList<CityBean>(); 
  19. public Map<Integer, List<AreaBean>> getAreaMap() { 
  20. return areaMap; 
  21. public void setAreaMap(Map<Integer, List<AreaBean>> areaMap) { 
  22. this.areaMap =areaMap; 
  23. publicList<CityBean> getCityBeans() { 
  24. returncityBeans; 
  25. public void setCityBeans(List<CityBean> cityBeans) { 
  26. this.cityBeans =cityBeans; 
//城市对象
public class CityBean {
private intcityid;
private Stringcityname;
//省略了setter、getter方法
}
 
//区域对象
public class AreaBean {
private intareaid;
private Stringareaname;
private int cityid;
//省略了setter、getter方法
}
 
public class CityAction extends ActionSupport {
//map映射cityid--区域列表
private Map<Integer, List<AreaBean>> areaMap = new HashMap<Integer,List<AreaBean>>();
//list装所有city集合
private List<CityBean> cityBeans = new ArrayList<CityBean>();
public Map<Integer, List<AreaBean>> getAreaMap() {
return areaMap;
}
public void setAreaMap(Map<Integer, List<AreaBean>> areaMap) {
this.areaMap =areaMap;
}
publicList<CityBean> getCityBeans() {
returncityBeans;
}
public void setCityBeans(List<CityBean> cityBeans) {
this.cityBeans =cityBeans;
}

areaMap[top.cityid]:top是指前一个下拉框整个的选中项cityBean, cityid就是指cityBean中cityid

所以areaMap[top.cityid]指map集合中第一个下拉框选中的id对应的list集合

list里面每个元素放的是AreaBean


  1. <s:doubleselect 
  2. tooltip="选择城市操作" 
  3. label="请选择城市" 
  4. name="city" 
  5. list="cityBeans" 
  6. listKey="cityid" 
  7. listValue="cityname" 
  8. doubleList="areaMap[top.cityid]" 
  9. doubleName="area" 
  10. doubleListKey="areaid" 
  11. doubleListValue="areaname" 
  12. /> 
<s:doubleselect
tooltip="选择城市操作"
label="请选择城市"
name="city"
list="cityBeans"
listKey="cityid"
listValue="cityname"
doubleList="areaMap[top.cityid]"
doubleName="area"
doubleListKey="areaid"
doubleListValue="areaname"
/>


让它们一行显示,比较简单的做法是:

定义样式:

  1. <style type="text/css"> 
  2. .doubleselectbr{ 
  3. display: none
  4. < /style> 
<style type="text/css">
.doubleselectbr{
display: none;
}
< /style>

  1. < div class="doubleselect"><s:form>的代码放进来</div> 
< div class="doubleselect">把<s:form>的代码放进来</div>

<s:date>标签

用以输出一个格式化的日期对象,name表示要输出的对象,format表示输出的日期格式

  1. <s:date name="user.birthday" format="dd/MM/yyyy" /> 
  2.   
  3. <s:date name="user.birthday" format="%{getText('some.i18n.key')}" /> 
  4.   
  5. <s:date name="user.birthday" />--默认格式 
<s:date name="user.birthday" format="dd/MM/yyyy" />
 
<s:date name="user.birthday" format="%{getText('some.i18n.key')}" />
 
<s:date name="user.birthday" />--默认格式

<s:append>标签

用于将多个枚举值对象进行叠加,形成一个新的枚举值列表

如将3个列表对象进行了组合,形成新的列表对象:

  1. <s:append var="newIteratorList"> 
  2.       <s:param value="%{myList1}" /> 
  3.       <s:param value="%{myList2}" /> 
  4.       <s:param value="%{myList3}" /> 
  5. </s:append> 
<s:append var="newIteratorList">
      <s:param value="%{myList1}" />
      <s:param value="%{myList2}" />
      <s:param value="%{myList3}" />
</s:append>

<s:generator>标签

下面的代码将分隔为3个字符串,然后循环输出

  1. <s:generator val="%{'aaa,bbb,ccc'}"> 
  2.       <s:iterator> 
  3.              <s:property /> 
  4.       </s:iterator> 
  5. </s:generator> 
<s:generator val="%{'aaa,bbb,ccc'}">
      <s:iterator>
             <s:property />
      </s:iterator>
</s:generator>

<s:merge>标签

用于将多个枚举值按照数组的索引位置进行合并

  1. <s:merge var="newMergeList"> 
  2.       <s:param value="%{mylist1}">--设mylist1列表中有a,b,c三个元素 
  3.       <s:param value="%{mylist2}">--设mylist2列表中有1,2,3三个元素 
  4. </s:merge> 
<s:merge var="newMergeList">
      <s:param value="%{mylist1}">--设mylist1列表中有a,b,c三个元素
      <s:param value="%{mylist2}">--设mylist2列表中有1,2,3三个元素
</s:merge>

合并后新的列表的元素及其顺序为:a,1,b,2,c,3

<s:sort>标签

用于对一组枚举值进行排序,属性comparator指向一个继承自java.util.Comparator的比较器,该比较器可以是对应Action页面中的一个比较器变量,source指定要排序的列表对象

  1. <s:bean id="myComparator" name="com.clf.MyComparator"></s:bean>  
  2. <s:sort comparator="myComparator" source="budget.approve">  
  3.      <s:iterator value="budget.approve" status="st"></s:iterator>  
  4. </s:sort>  
<s:bean id="myComparator" name="com.clf.MyComparator"></s:bean> 
<s:sort comparator="myComparator" source="budget.approve"> 
     <s:iterator value="budget.approve" status="st"></s:iterator> 
</s:sort> 

  1. import java.util.Comparator;  
  2.   
  3. public class MyComparator implements Comparator<Object> {  
  4.     public int compare(Object arg0, Objectarg1) {  
  5.   
  6.           System.out.println(arg0.toString().compareTo(arg1.toString()));  
  7.   
  8.           //默认从小到大排列  
  9.            returnarg0.toString().compareTo(arg1.toString());      
  10.   
  11.            //从大到小排列  
  12.            //return -(arg0.toString().compareTo(arg1.toString()));      
  13.         }  
  14. }  
import java.util.Comparator; 
 
public class MyComparator implements Comparator<Object> { 
    public int compare(Object arg0, Objectarg1) { 
 
          System.out.println(arg0.toString().compareTo(arg1.toString())); 
 
          //默认从小到大排列 
           returnarg0.toString().compareTo(arg1.toString());     
 
           //从大到小排列 
           //return -(arg0.toString().compareTo(arg1.toString()));     
        } 
} 

<s:subset>标签

subset标签用于取得集合的子集,该标签的底层通过org.apache.Struts2.util.Subset.IteratorFilter类提供实现。使用subset标签可以指定如下几个属性:

count:可选属性,指定子集中元素的个数,默认取得源集合的所有元素

source:可选属性,指定源集合,如果不指定,默认取得valueStack栈顶的集合,一般都会指定

start:可选属性,指定从源集合的第几个元素开始截取,,默认从第一个元素(即start=0)开始

decider:可选属性,由开发者自己决定是否选中该元素

  1. <!--截取从下标1开始的三个元素--> 
  2. <s:subset source="{'Java','Spring2.0','J2EE','Ajax','WebWork'}"    start="1" count="3"> 
  3. </s:subset> 
<!--截取从下标1开始的三个元素-->
<s:subset source="{'Java','Spring2.0','J2EE','Ajax','WebWork'}"    start="1" count="3">
</s:subset>

此外,Struts2还允许开发者决定截取标准,开发者只需要实现一个Decider类,实现SubsetIteratorFilter.Decider接口中的booleandecide(Object element)方法,如果该方法返回真,则表明该元素将被选入子集中。看如下代码:

  1. import org.apache.struts2.util.SubsetIteratorFilter; 
  2. public class MyDecider implements SubsetIteratorFilter.Decider 
  3. public boolean decide(Object element) throws Exception 
  4.    String str = (String)element; 
  5.    return str.indexOf("J2EE") > 0
import org.apache.struts2.util.SubsetIteratorFilter;
public class MyDecider implements SubsetIteratorFilter.Decider
{
public boolean decide(Object element) throws Exception
{
   String str = (String)element;
   return str.indexOf("J2EE") > 0;
}
}

  1. <!--截取包含"J2EE"的所有元素--> 
  2. <s:subset source="{'Java','Spring2.0','J2EE','Ajax','WebWork'}" decider="#mydecider"> 
  3. </s:subset> 
<!--截取包含"J2EE"的所有元素-->
<s:subset source="{'Java','Spring2.0','J2EE','Ajax','WebWork'}" decider="#mydecider">
</s:subset>

<s:a>标签

用于创建一个<a>标签,errorText用于显示错误信息,preInvokeJS表示该链接执行时的javascript提示函数,href表示跳转地址.

  1. <s:a errorText="删除错误" preInvokeJS="confirm('确认删除?')"  href="test.jsp"> 
  2.       <img src="/image/delete.gif" /> 
  3. </s:a> 
<s:a errorText="删除错误" preInvokeJS="confirm('确认删除?')"  href="test.jsp">
      <img src="/image/delete.gif" />
</s:a>

带参数的链接

  1. <s:iterato rvalue="#request.userList">  
  2.     <tr align="center">           
  3.       <td><s:property value="id"/> :<s:property value="username"/></td>  
  4.       <td><s:property value="age"/></td>  
  5.       <td><s:property value="sex"/></td>  
  6.       <td><s:property value="address"/></td>  
  7.       <td>  
  8.         <s:a href="userAction!addUser.action">添加</s:a>|   
  9.             //第一种方式,在标签内使用标签时用%  
  10.             <s:a href="userAction!loadUser.action?user.id=%{id}">编辑</s:a>|         
  11.            //第二种方式:使用<s:url>标签解决    
  12.         <s:url id="idUrl" action="userAction!delUser.action">  
  13.            <s:param name="user.id" value="%{id}"></s:param>  
  14.         </s:url>   
  15.         <s:a href="%{idUrl}">删除</s:a>  
  16.                //第三种:直接加入  
  17.         <a href="<s:urlactions:urlaction="userAction!delUser.action">  
  18.                     <s:param name="user.id" value="id"/>  
  19.                  </s:url>>删除2  
  20.               </a>          
  21.       </td>  
  22.     </tr>  
  23. </s:iterator>   
<s:iterato rvalue="#request.userList"> 
    <tr align="center">          
      <td><s:property value="id"/> :<s:property value="username"/></td> 
      <td><s:property value="age"/></td> 
      <td><s:property value="sex"/></td> 
      <td><s:property value="address"/></td> 
      <td> 
        <s:a href="userAction!addUser.action">添加</s:a>|  
            //第一种方式,在标签内使用标签时用% 
            <s:a href="userAction!loadUser.action?user.id=%{id}">编辑</s:a>|        
           //第二种方式:使用<s:url>标签解决   
        <s:url id="idUrl" action="userAction!delUser.action"> 
           <s:param name="user.id" value="%{id}"></s:param> 
        </s:url>  
        <s:a href="%{idUrl}">删除</s:a> 
               //第三种:直接加入 
        <a href="<s:urlaction="userAction!delUser.action"> 
                    <s:param name="user.id" value="id"/> 
                 </s:url>">删除2 
              </a>         
      </td> 
    </tr> 
 </s:iterator>  

<s:url>标签

<s:url>生成一个url地址,可以通过url标签制定的<s:param>子元素向URL地址发送请求参数

<s:urlaction=""> 指定请求地址

<s:paramname="" value=""></s:param> 指定参数

</s:url>

属性includeParams:该属性有三个值:none、get、 all,默认值为get

当该属性值为get时,该url会将访问其所在jsp的的请求的所有get方法的参数添加到自身来

当它的属性值为all时,更是将get和post的的参数值全部添加到自身来

当includeParams的值是all或get,param标签中定义的参数将有优先权,也就是说其会覆盖其他同名参数的值

<s:action>标签

使用action标签,可以允许在jsp页面中直接调用Action,在调用Action时候,可以指定需要被调用的Action的name和namespace.如果指定了executeResult参数的属性值为true,该标签会把Action的处理结果(视图资源)包含到本页面中. 使用action标签指定属性有:

id: 可选属性,作为该Action的引用ID   

name:必选属性,指定调用Action   

namespace:可选属性,指定该标签调用Action所属namespace   

executeResult:可选属性,指定是否将Action的处理结果包含到本页面中.默认值为false,不包含.   

ignoreContextParam:可选参数,指定该页面的请求参数是否需要传入调用的Action中,默认值是false,即传入参数.

传递参数

  1. <s:action name="actionName" executeResult="true" namespace="/"> 
  2.     <s:param name="currentPage" value="传递的值"></s:param> 
  3. </s:action> 
<s:action name="actionName" executeResult="true" namespace="/">
    <s:param name="currentPage" value="传递的值"></s:param>
 </s:action>

< s:param></s:param>是以request.setAttribute方式的值的,而不是以参数传值

所以request.getParameter("")会获取不到值

通过request.getAttribute("")方式可以获取

另外,使用<s:param></s:param> value指代的是action定义的对象的名称,而不是一个具体的值,和 <s:textfield>中的name是一个意思,所以要要传递字符串不能把值写value中而应该写到

<s:param >写到这里</s:param>

<s:param >标签

param标签用来把一个参数传递给包含着它的那个标签。

不管在给出value属性值时有没有使用"%{"和"}",Struts都会对它进行求值。就是说value指代的是action定义的对象、属性的名称,而不是一个具体的值

例如,下面这个param标签的值是userName动作属性:

  1. <s:param name="userName" value="userName"/>  
<s:param name="userName" value="userName"/> 

它与下面这个标签是等价的:

  1. <s:param name="userName" value="%{userName}"/>  
<s:param name="userName" value="%{userName}"/> 

如果想传递一个String类型的字符串作为参数值,必须把它用单引号括起来。例如,下面这个param标签的值是字符串"clf"

  1. <s:param name="userName" value="'clf'"/>  
<s:param name="userName" value="'clf'"/> 

该值会以java.lang.Object的格式放入statck

等价于

  1. <s:param name="userName">clf</s:param>  
<s:param name="userName">clf</s:param> 

参数会以String的格式放入statck

这种写法还可以使用一个EL表达式,例如,下面代码将把当前主机名传递给host参数:

  1. <s:param name="host">${header.host}</s:param>  
<s:param name="host">${header.host}</s:param> 

而下面这样的写法就不行了:

  1. <s:param name="host" value="${header.host}"/><!-- 无效的。-->  
<s:param name="host" value="${header.host}"/><!-- 无效的。--> 

<s:bean>标签

用于创建一个JavaBean对象,name表示JavaBean类全名,var表示变量的实例名,并可以包含<s:param>设置实例化输入参数

  1. public classTest1 { 
  2.     private String str; 
  3.   
  4.     public String getStr() { 
  5.         return str; 
  6.     } 
  7.   
  8.     public void setStr(String str) { 
  9.         this.str = str; 
  10.     } 
  11.     
  12.     public String hello() 
  13.     { 
  14.         return "Hello World!"; 
  15.     } 
  16.     
  17.     public String hello(String name) 
  18.     { 
  19.         return "Hello," + name; 
  20.     } 
public classTest1 {
    private String str;
 
    public String getStr() {
        return str;
    }
 
    public void setStr(String str) {
        this.str = str;
    }
   
    public String hello()
    {
        return "Hello World!";
    }
   
    public String hello(String name)
    {
        return "Hello," + name;
    }
}

然后就可以使用这个bean了:

  1. <s:bean name="test.Test1" id="mybean"> 
  2.       <s:param name="str" value="'abc'"></s:param> 
  3. </s:bean> 
  4.   
  5. <s:property value="#mybean.str"/><br/> 
  6. <s:property value="#mybean.hello()"/><br/> 
  7. <s:property value="#mybean.hello('tom')"/> 
<s:bean name="test.Test1" id="mybean">
      <s:param name="str" value="'abc'"></s:param>
</s:bean>
 
<s:property value="#mybean.str"/><br/>
<s:property value="#mybean.hello()"/><br/>
<s:property value="#mybean.hello('tom')"/>

<s:property>标签

1,访问Action值栈中的普通属性:

  1. <s:property value="attrName"/> 
<s:property value="attrName"/>

2,访问Action值栈中的对象属性(要有getter、 setter方法):

  1. <s:property value="obj.attrName"/> 
  2.   
  3. <s:property value="obj1.obj2.attrName"/> 
<s:property value="obj.attrName"/>
 
<s:property value="obj1.obj2.attrName"/>

3,访问值栈中对象属性的方法

  1. <s:property value="obj.methodName()"/> 
<s:property value="obj.methodName()"/>

4,访问值栈中action的普通方法:

  1. <s:property value="methodName()"/> 
<s:property value="methodName()"/>

5,访问静态方法:

  1. <s:property value="@com.softeem.LoginAction@methodName()"/> 
<s:property value="@com.softeem.LoginAction@methodName()"/>

6,访问静态属性:

配置属性文件,允许ognl访问静态方法struts.ognl.allow...=true

  1. <s:property value="@com.softeem.LoginAction@attrName"/> 
<s:property value="@com.softeem.LoginAction@attrName"/>

7,访问Math类的静态方法:

  1. <s:property value="@@min(9,7)"/> 
<s:property value="@@min(9,7)"/>

8,访问普通类的构造方法:

  1. <s:property value="newcom.softeem.User(2)"/> 
<s:property value="newcom.softeem.User(2)"/>

9,访问集合:

①list集合对象

  1. <s:property value="listName"/> 
<s:property value="listName"/>

②list集合中的某个元素

  1. <s:property value="listName[1]"/> 
<s:property value="listName[1]"/>

③list中某个属性的集合

  1. <s:propertyvalues:propertyvalue="listName.{field}"/> 
<s:propertyvalue="listName.{field}"/>

④list中某个属性集合的特定值

  1. <s:property value="listName.{field}[0]"/> 
<s:property value="listName.{field}[0]"/>

⑤访问set

  1. <s:property value="setName"/> 
<s:property value="setName"/>

⑥访问set中某个元素

  1. <s:propertyv alue="setName[0]"/> 
<s:propertyv alue="setName[0]"/>

⑦访问map

  1. <s:property value="mapName"/> 
<s:property value="mapName"/>

⑧根据key访问Map中的元素

  1. <s:property value="mapName.username"/> 
  2.   
  3. <s:property value="mapName['username']"/> 
  4.   
  5. <s:property value="mapName[/"username/"]"/> 
<s:property value="mapName.username"/>
 
<s:property value="mapName['username']"/>
 
<s:property value="mapName[/"username/"]"/>

⑨访问map中所有的key

  1. <s:property value="mapName.keys"/> 
<s:property value="mapName.keys"/>

10,访问map中所有的values

  1. <s:property value="mapName.values"/> 
<s:property value="mapName.values"/>

11,访问map的大小

  1. <s:property value="mapName.size()"/> 
<s:property value="mapName.size()"/>

12,投影

  1. <s:property value="listName.{?#this.age==1}"/> 
  2.   
  3. <s:property value="listName.{^#this.age>1}"/> 
  4.   
  5. <s:property value="listName.{$#this.age==1}"/> 
  6.   
  7. <s:property value="listName.{$#this.age==1}.{age}==null"/> 
  8.   
  9. []:<s:propertyvalues:propertyvalue="[0]"/>值栈中的对象 
<s:property value="listName.{?#this.age==1}"/>
 
<s:property value="listName.{^#this.age>1}"/>
 
<s:property value="listName.{$#this.age==1}"/>
 
<s:property value="listName.{$#this.age==1}.{age}==null"/>
 
[]:<s:propertyvalue="[0]"/>值栈中的对象

<s:i18n>与<s:text>标签

<s:i18n>加载资源包到值堆栈。它可以允许<s:text>访问任何资源包的信息,而不只当前action相关联的资源包

用<s:text>标签来访问国际化信息,只需要在它的name属性上填入需要的key即可

  1. <s:i18n name="xxx.xxx.xxx.ApplilcationMessages"> 
  2.       <s:text name="HelloWord" /> 
  3. </s:i18n> 
<s:i18n name="xxx.xxx.xxx.ApplilcationMessages">
      <s:text name="HelloWord" />
</s:i18n>

<s:debug>标签

用以输出页面的值栈调试信息,通常在进行程序调用时使用,便于查找JSP页面中的错误

它提供的是StrutsValueStack Debug ..也就是说,都是struts2的值栈(就是各个值的信息).

这个值栈又分为两种.Value StackContents 和 Stack Context .

(1).Value StackContents 里面的信息我们可以用 <s:property value="sss"> 这样来直接访问.

(2) StackContext 里面的信息我们可以 <s:property value="#sss">这样来访问

<s:include>标签

用来包含一个Servlet的输出(Servlet或JSP页面),使用value属性指定包含页名称,可以使用<s:param>传递参数给子页

  1. <s:include value="/test.jsp"> 
  2.       <s:param name="username">clf</s:param> 
  3. </s:include> 
<s:include value="/test.jsp">
      <s:param name="username">clf</s:param>
</s:include>

<s:push>标签

用以加入一个值到值栈中

user为一个JavaBean对象,里面包含name和age属性

  1. <s:push value="user"> 
  2.       <s:property value="name" /> 
  3.       <s:property value="age" /> 
  4. </s:push> 
<s:push value="user">
      <s:property value="name" />
      <s:property value="age" />
</s:push>

<s:set>标签

赋予变量一个特定范围内的值

name: 必填,重新生成的新变量的名字

scope: 可选,指定新变量被放置的范围,该属性可以接受application、session、request、page或action 5个值。如果没有指定,默认是放置在Stack Context中。

value: 可选,指定将赋给变量的值。如果没指定,则将ValueStack栈顶的值赋给新变量。

var: 可选,指定该元素的引用ID,如果指定了将会将该值放在ValueStack中

将Stack Context中的p值放入默认范围内。

  1. <s:set value="#p" name="xxx"/> 
  2. <s:property value="#xxx.name"/> 
<s:set value="#p" name="xxx"/>
<s:property value="#xxx.name"/>

将Stack Context中的p值放入application范围内

  1. <s:set value="#p" name="xxx" scope="application"/> 
  2. <s:property value="#attr.xxx.name"/> 
<s:set value="#p" name="xxx" scope="application"/>
<s:property value="#attr.xxx.name"/>

将Stack Context中的p值放入session范围内

  1. <s:set value="#p" name="xxx" scope="session"/> 
<s:set value="#p" name="xxx" scope="session"/>

< !--使用JSP2.0表达式语言直接访问session中的属性-->

${sessionScope.xxx.name}

<s:fielderror>标签

显示数据校验错误信息

在action中使用

this.addFieldError("错误信息");

然后错误信息会在JSP页面的

<s: fielderror/>说在的地方显示出来

<s:actionerror>标签

显示Action中的错误信息

Action中的对应方法

this.addActionError("错误信息");

<s:actionmessage>标签

显示Action中的消息

Action中的对应方法

this.addActionMessage("消息");

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
后台采用apache服务器下的cgi处理c语言做微信小程序后台逻辑的脚本映射。PC端的服务器和客户端都是基于c语言写的。采用mysql数据库进行用户数据和聊天记录的存储。.zip C语言是一种广泛使用的编程语言,它具有高效、灵活、可移植性强等特点,被广泛应用于操作系统、嵌入式系统、数据库、编译器等领域的开发。C语言的基本语法包括变量、数据类型、运算符、控制结构(如if语句、循环语句等)、函数、指针等。下面详细介绍C语言的基本概念和语法。 1. 变量和数据类型 在C语言中,变量用于存储数据,数据类型用于定义变量的类型和范围。C语言支持多种数据类型,包括基本数据类型(如int、float、char等)和复合数据类型(如结构体、联合等)。 2. 运算符 C语言中常用的运算符包括算术运算符(如+、、、/等)、关系运算符(如==、!=、、=、<、<=等)、逻辑运算符(如&&、||、!等)。此外,还有位运算符(如&、|、^等)和指针运算符(如、等)。 3. 控制结构 C语言中常用的控制结构包括if语句、循环语句(如for、while等)和switch语句。通过这些控制结构,可以实现程序的分支、循环和多路选择等功能。 4. 函数 函数是C语言中用于封装代码的单元,可以实现代码的复用和模块化。C语言中定义函数使用关键字“void”或返回值类型(如int、float等),并通过“{”和“}”括起来的代码块来实现函数的功能。 5. 指针 指针是C语言中用于存储变量地址的变量。通过指针,可以实现对内存的间接访问和修改。C语言中定义指针使用星号()符号,指向数组、字符串和结构体等数据结构时,还需要注意数组名和字符串常量的特殊性质。 6. 数组和字符串 数组是C语言中用于存储同类型数据的结构,可以通过索引访问和修改数组中的元素。字符串是C语言中用于存储文本数据的特殊类型,通常以字符串常量的形式出现,用双引号("...")括起来,末尾自动添加'\0'字符。 7. 结构体和联合 结构体和联合是C语言中用于存储不同类型数据的复合数据类型。结构体由多个成员组成,每个成员可以是不同的数据类型;联合由多个变量组成,它们共用同一块内存空间。通过结构体和联合,可以实现数据的封装和抽象。 8. 文件操作 C语言中通过文件操作函数(如fopen、fclose、fread、fwrite等)实现对文件的读写操作。文件操作函数通常返回文件指针,用于表示打开的文件。通过文件指针,可以进行文件的定位、读写等操作。 总之,C语言是一种功能强大、灵活高效的编程语言,广泛应用于各种领域。掌握C语言的基本语法和数据结构,可以为编程学习和实践打下坚实的基础。
该资源内项目源码是个人的课程设计、毕业设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。 该资源内项目源码是个人的课程设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。
C语言是一种广泛使用的编程语言,它具有高效、灵活、可移植性强等特点,被广泛应用于操作系统、嵌入式系统、数据库、编译器等领域的开发。C语言的基本语法包括变量、数据类型、运算符、控制结构(如if语句、循环语句等)、函数、指针等。下面详细介绍C语言的基本概念和语法。 1. 变量和数据类型 在C语言中,变量用于存储数据,数据类型用于定义变量的类型和范围。C语言支持多种数据类型,包括基本数据类型(如int、float、char等)和复合数据类型(如结构体、联合等)。 2. 运算符 C语言中常用的运算符包括算术运算符(如+、、、/等)、关系运算符(如==、!=、、=、<、<=等)、逻辑运算符(如&&、||、!等)。此外,还有位运算符(如&、|、^等)和指针运算符(如、等)。 3. 控制结构 C语言中常用的控制结构包括if语句、循环语句(如for、while等)和switch语句。通过这些控制结构,可以实现程序的分支、循环和多路选择等功能。 4. 函数 函数是C语言中用于封装代码的单元,可以实现代码的复用和模块化。C语言中定义函数使用关键字“void”或返回值类型(如int、float等),并通过“{”和“}”括起来的代码块来实现函数的功能。 5. 指针 指针是C语言中用于存储变量地址的变量。通过指针,可以实现对内存的间接访问和修改。C语言中定义指针使用星号()符号,指向数组、字符串和结构体等数据结构时,还需要注意数组名和字符串常量的特殊性质。 6. 数组和字符串 数组是C语言中用于存储同类型数据的结构,可以通过索引访问和修改数组中的元素。字符串是C语言中用于存储文本数据的特殊类型,通常以字符串常量的形式出现,用双引号("...")括起来,末尾自动添加'\0'字符。 7. 结构体和联合 结构体和联合是C语言中用于存储不同类型数据的复合数据类型。结构体由多个成员组成,每个成员可以是不同的数据类型;联合由多个变量组成,它们共用同一块内存空间。通过结构体和联合,可以实现数据的封装和抽象。 8. 文件操作 C语言中通过文件操作函数(如fopen、fclose、fread、fwrite等)实现对文件的读写操作。文件操作函数通常返回文件指针,用于表示打开的文件。通过文件指针,可以进行文件的定位、读写等操作。 总之,C语言是一种功能强大、灵活高效的编程语言,广泛应用于各种领域。掌握C语言的基本语法和数据结构,可以为编程学习和实践打下坚实的基础。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值