struts2 标签(5)

来源:互联网 发布:お知らせいたします 编辑:程序博客网 时间:2024/05/22 09:49

struts标签

要点集合:
  •  通用标签
  1. property
  2. set (默认为action scope 会将值放入request 和 ActionContext中  ;   page,request,session,application)
  3. bean
  4. include(对中文文件有支持问题,不建议使用,如需包含,改用jsp包含)
  5. param
  6. debug
  • 控制标签
  1. if、elseif、 else
  2.  iterator(collections map  enumeration iterator array,循环遍历)
  3. subset(截取集合一部分)
  • UI标签
  1. theme(simple xhtml:默认 、 css xhtml、 ajax )
  • AJAX标签
  1. 再补充
  • $  #  %的区别
  1. $用于 i18n 和 struts配置文件
  2. #取得ActionContext的值
  3. %将原本的文本属性解析为ognl,对于本来就是ongl的属性不起作用(参考<s:property>和<s:include>)
在此我们还是使用小项目的形式来进行总结:
首先我们需要配置几个jsp页面
index.jsp:
<%--  Created by IntelliJ IDEA.  User: Alex  Date: 2017/5/16  Time: 23:15  To change this template use File | Settings | File Templates.--%><%@ page contentType="text/html;charset=UTF-8" language="java" %><html>  <head>    <title>首页</title>  </head>  <body>  访问属性:<br/>  <a href="tags.action?username=alex&password=123">tags</a>  </body></html>
在此处我们传了两个参数(username和password)至struts.xml

tags.jsp:
<%--  Created by IntelliJ IDEA.  User: Alex  Date: 2017/5/17  Time: 5:21  To change this template use File | Settings | File Templates.--%><%@ page contentType="text/html;charset=UTF-8" language="java" %><%@taglib prefix="s" uri="/struts-tags" %><html><head>    <title>Title</title></head><body><ol>   在此处写例子</ol></body></html>


在配置完成后,再看看struts.xml是如何配置的:
<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE struts PUBLIC    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"    "http://struts.apache.org/dtds/struts-2.0.dtd"><struts>    <constant name="struts.devMode" value="true" />    <package name="tags" extends="struts-default">            <action name="tags" class="tags.tagsAction">                <result>/tags.jsp</result>            </action>    </package></struts>

然后是action:

tagsAction:
package tags;import com.opensymphony.xwork2.ActionSupport;/** * Created by Alex on 2017/5/17. */public class tagsAction extends ActionSupport {    private String username;    private String password;    public tagsAction(){    }    @Override    public String execute(){        this.addFieldError("fieldError.test","wrong!");        return SUCCESS;    }    public String getUsername() {        return username;    }    public void setUsername(String username) {        this.username = username;    }    public String getPassword() {        return password;    }    public void setPassword(String password) {        this.password = password;    }}

注意学习方法:
尽量多查阅官方DOC文档,帮助很大。


通用标签:

struts标签的property标签
官方文档:

页面代码:
    <li>property: <s:property value="username" /> </li>    <li>property 取值为字符串: <s:property value="'username'" /> </li>    <li>property 设定默认值: <s:property value="admin" default="管理员" /> </li>    <li>property 设定HTML: <s:property value="'<hr/>'" escape="false" /> </li>
P.S:value的属性为object类型,都会把里面的对象解析为OGNL表达式。设定默认值意思是,当property在值栈中找不到对象,则会使用这个默认值。


struts标签的set标签
官方文档:

页面内容:
    <li>set 设定adminName值(默认为request和ActionContext):<s:set var="adminName" value="username" /> var adminName = username</li>    <li>set 从request里取值 :<s:property value="#request.adminName" /></li>    <li>set 从ActionContext里取值 :<s:property value="#adminName" /></li>    <%--<li>set 设定范围:<s:set name="adminPassword" value="password" scope="page" /> name adminPassword = password (page) </li>--%>    <%--<li>set 从相应的范围取值:<%=pageContext.getAttribute("adminPassword")%></li>--%>    <li>set 设定var 范围为ActionContext: <s:set name="adminPassword" value="password" var="a"/> var a = password(废弃) </li>    <li>set 使用#取值: <s:property value="#a" /> </li>    <li>set 设定var 范围为Session: <s:set var="adminPassword" value="password" scope="session"/> var adminPassword = password(主流) </li>    <li>set 从相应的范围取值: <s:property value="#session.adminPassword" /> </li>
P.S:这里的value的属性也为object类型,官方doc文档有bug。
 id与name属性已经废弃,可以不使用。 var使用时,默认为Action,但是用 scope可以指定特定的储存空间。


struts标签的bean标签
官方文档:

页面内容:
     <li>        bean 定义bean,并使用param来设定新的属性值:        <s:bean name="tags.Dog" var="myDog">            <s:param name="name" value="'linda'"></s:param>        </s:bean>    </li>    <li>bean 取值:<s:property value="#myDog.name" /> </li>    <li>bean 查看debug:<s:debug></s:debug></li>
P.S:param子标签内部的value值我们若需要插入字符串格式,那么需要在里面加上单引号,若是需要插入OGNL表达式,则不需要单引号。
struts标签的include标签
官方文档:
页面内容:
    <li>        include _include1.html 包含静态英文文件:        <s:include value="_include1.html" ></s:include>    </li>    <li>        include _include1.html 包含静态中文文件:        <s:include value="_include2.html" ></s:include>    </li>    <li>        include _include1.html 包含静态中文文件,说明%的用法:        <s:set var="incPage" value="'/_include2.html'" />        <s:include value="%{#incPage}" ></s:include>    </li>
P.S:老版本的中文include bug已经修复,在此提到%{}的作用,即强制将字符串定义为OGNL表达式进行传递


struts标签的fieldError标签
官方文档

页面内容:
    <li>        fieldError simple:<s:fielderror fieldName="fieldError.test" theme="simple"></s:fielderror>    </li>
P.S:此标签有默认样式(ul li标签)若需要去除标签样式,请转至本博客另一篇《去除struts2中s:fieldError标签中的默认样式》中查阅

控制标签

if、else if与else标签
官方文档:
if:

elseif:

页面内容:
    <li>        if elseif 和 else:        age = <s:property value="#parameters.age" /><br/>        <s:if test="#parameters.age[0] < 0">wrong age!</s:if>        <s:elseif test="#parameters.age[0] <= 20" >too young!</s:elseif>        <s:else>这才对嘛</s:else>        <s:if test="#parameters.aaa == null">null</s:if>    </li>
简单easy,通俗易懂
P.S:不难发现这里多次用到#parameters.age[0] 我们可以使用set标签来优化语句


iterator标签
官方文档:

页面内容:
    <li>        遍历集合:<br/>        <s:iterator value="{1,2,3}">            <s:property /> |        </s:iterator>    </li>    <li>        自定义变量:<br/>        <s:iterator value="{'aaa','bbb','ccc'}" var="x" >            <s:property value="#x.toUpperCase()" /> |        </s:iterator>    </li>    <li>        使用struts:<br/>        <hr/>        <s:iterator value="{'aaa','bbb','ccc'}" status="status">            元素值:<s:property/> <br/>            遍历过的元素总数:<s:property value="#status.count" /> <br/>            遍历过的元素索引:<s:property value="#status.index" /> <br/>            当前是偶数? <s:property value="#status.even"/><br/>            当前是奇数? <s:property value="#status.odd"/><br/>            是第一个元素吗? <s:property value="#status.first" /><br/>            是最后一个元素吗? <s:property value="#status.last" /> <br/>            <hr/>        </s:iterator>    </li>    <li>        遍历Map:<br/>        <s:iterator value="#{1:'a',2:'b',3:'c'}">            <s:property  value="key" /> | <s:property value="value"/> <br/>        </s:iterator>    </li>
P.S:在遍历Map时,需要在value里加入#符。


subset标签
官方文档:

页面内容:
     <s:subset source="myList" count="13" start="3">        <s:iterator>          <s:property />        </s:iterator>     </s:subset>
P.S:截取部分集合内容,了解即可,过多不再阐述


UI标签

开发中不常用,因为有不方便之处,与JavaScript结合不完美
总的 来说:
  1. 把所有的主体定义为simple
  2. fieldError特殊化处理
  3. 自己控制其他标签的展现
原创粉丝点击