struts2 标签(5)

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. 自己控制其他标签的展现
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值