通用标签和控制标签

第一部分。代码

//前端
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GB18030" />
<title>Insert title here</title>
</head>
<body>
訪问属性
<a href="<%=contextPath %>/tags.action? username=u&password=p">tags</a>
</body>
</html>
//struct.xml
<constant name="struts.ui.theme" value="simple" />
<package name="tags" extends="struts-default">
<action name="tags" class="com.struts2.tags.TagsAction">
<result>/tags.jsp</result>
</action>
</package>
//类包
package com.struts2.tags;
import com.opensymphony.xwork2.ActionSupport;
public class TagsAction extends ActionSupport {
private String password;
private String username; public TagsAction() {
} public String execute() {
this.addFieldError("fielderror.test", "wrong!");
return SUCCESS;
} public String getPassword() {
return password;
} public String getUsername() {
return username;
} public void setPassword(String password) {
this.password = password;
} public void setUsername(String username) {
this.username = username;
}
}
//展示
</head>
<body>
<ol>
<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>
<hr /> <li>set 设定adminName值(默觉得request 和 ActionContext): <s:set var="adminName" value="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"/></li>
<li>set 从对应范围取值: <%=pageContext.getAttribute("adminPassword") %></li>
--%>
<li>set 设定var,范围为ActionContext: <s:set var="adminPassword" value="password" scope="session"/></li>
<li>set 使用#取值: <s:property value="#adminPassword"/> </li>
<li>set 从对应范围取值: <s:property value="#session.adminPassword"/> </li> <hr /> <%--<li>push:<s:set name="myDog" value="new com.bjsxt.struts2.ognl.Dog('oudy')"></s:set></li>
<li>
push:<s:push value="#myDog">
<s:property value="name"/>
</s:push>
</li>
<li>push: <s:property value="name"/></li>
--%> <hr />
<li>bean 定义bean,并使用param来设定新的属性值:
<s:bean name="com.bjsxt.struts2.tags.Dog" >
<s:param name="name" value="'pp'"></s:param>
<s:property value="name"/> </s:bean> </li> <li>bean 查看debug情况:
<s:bean name="com.bjsxt.struts2.tags.Dog" var="myDog">
<s:param name="name" value="'oudy'"></s:param>
</s:bean>
拿出值:
<s:property value="#myDog.name"/> </li>
<hr /> <li>include _include1.html 包括静态英文文件
<s:include value="/_include1.html"></s:include>
</li> <li>include _include2.html 包括静态中文文件
<s:include value="/_include2.html"></s:include>
</li> <li>include _include1.html 包括静态英文文件。说明%使用方法
<s:set var="incPage" value="%{'/_include1.html'}" />
<s:include value="%{#incPage}"></s:include>
</li> <hr /> <li>if elseif else:
age = <s:property value="#parameters.age[0]" /> <br />
<s:set var="age" value="#parameters.age[0]" />
<s:if test="#age < 0">wrong age!</s:if>
<s:elseif test="#parameters.age[0] < 20">too young!</s:elseif>
<s:else>yeah!</s:else><br /> <s:if test="#parameters.aaa == null">null</s:if>
</li> <hr /> <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>使用status:<br />
<s:iterator value="{'aaa', 'bbb', 'ccc'}" status="status">
<s:property/> |
遍历过的元素总数:<s:property value="#status.count"/> |
遍历过的元素索引:<s:property value="#status.index"/> |
当前是偶数?:<s:property value="#status.even"/> |
当前是奇数?:<s:property value="#status.odd"/> |
是第一个元素吗?:<s:property value="#status.first"/> |
是最后一个元素吗?:<s:property value="#status.last"/>
<br />
</s:iterator> </li> <li>
<s:iterator value="#{1:'a', 2:'b', 3:'c'}" >
<s:property value="key"/> | <s:property value="value"/> <br />
</s:iterator>
</li> <li>
<s:iterator value="#{1:'a', 2:'b', 3:'c'}" var="x">
<s:property value="#x.key"/> | <s:property value="#x.value"/> <br />
</s:iterator>
</li> <li> <s:fielderror fieldName="fielderror.test" theme="simple"></s:fielderror> </li>
</ol>
</body>
</html>

第二部分:分析

前端:<a href="<%=contextPath %>/tags.action?username=u&password=p">tags</a>点击之后,传递了给

tag.action两个參数username和password。

-> struct.xml配置,调用TagsAction.java类。初始化对象,并对对象设置初值。

	<package name="tags" extends="struts-default">
<action name="tags" class="com.struts2.tags.TagsAction">
<result>/tags.jsp</result>
</action>
</package>

-> 依据struct.xml配置的结果信息,将结果传递到<result>/tags.jsp</result>中说明的tag.jsp中进行显示,并通过标签进

行取值操作;

第三部分:通用标签操作

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>

分析:

property 取值为字符串: <s:property value="'username'"/>,当标签中的s:proerty中的值为双引號里面加上单引號时,表

示将单引號里面的值当做字符串进行处理。

set标签:
<li>set 设定adminName值(默觉得request 和 ActionContext): <s:set var="adminName" value="username" /></li>
<li>set 从request取值: <s:property value="#request.adminName" /></li>
<li>set 从ActionContext取值: <s:property value="#adminName" /></li>
<s:debug></s:debug> <li>set 设定var。范围为ActionContext: <s:set var="adminPassword" value="password" scope="session"/></li>
<li>set 使用#取值: <s:property value="#adminPassword"/> </li>
<li>set 从对应范围取值: <s:property value="#session.adminPassword"/> </li>

分析:

在set里面能够设置作用范围值:scope

scope 默觉得action,能够取得的scope有五个:The scope in which to assign the variable. Can be application, 

session, request, page, or action.

bean标签:
<li>bean 定义bean,并使用param来设定新的属性值:
<s:bean name="com.struts2.tags.Dog" >
<s:param name="name" value="'pp'"></s:param>
<s:property value="name"/>
</s:bean>
</li> <li>bean 查看debug情况:
<s:bean name="com.struts2.tags.Dog" var="myDog">
<s:param name="name" value="'oudy'"></s:param>
</s:bean>
拿出值:
<s:property value="#myDog.name"/>
</li>

分析:

bean标签

參数name的类型为String,作用是The class name of the bean to be instantiated (must respect JavaBean 

specification),定义一个须要实例化的类。

取值的方法:都是以#开头,家伙是哪个变量名称

#adminPassword

#session.adminPassword

#myDog.name

注意一下两种不同:

<s:bean name="com.struts2.tags.Dog" >

s:bean运行開始时,会构造一个对象入栈到栈顶,运行完成之后从栈顶取出。

<s:bean name="com.struts2.tags.Dog" var="myDog">

运行之后放在Stack Context

include标签
<s:set var="incPage" value="%{'/_include1.html'}" />
<s:include value="%{#incPage}"></s:include>

%{}作用:将其强制转为ognl表达式;

第四部分:控制标签操作

	<hr />
<li>if elseif else:
age = <s:property value="#parameters.age[0]" /> <br />
<s:set var="age" value="#parameters.age[0]" />
<s:if test="#age < 0">wrong age!</s:if>
<s:elseif test="#parameters.age[0] < 20">too young!</s:elseif>
<s:else>yeah!</s:else><br /> <s:if test="#parameters.aaa == null">null</s:if>
</li>
<hr />

通过set设置短名称;

第五部分:遍历标签

	<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>

分析:字符串集合,var = "x"相当于for循环里面定义的暂时变量,集合中的每一个值取出来,每循环一次把值放到x里面。

利用#进行訪问就能够。

	<li>使用status:<br />
<s:iterator value="{'aaa', 'bbb', 'ccc'}" status="status">
<s:property/> |
遍历过的元素总数:<s:property value="#status.count"/> |
遍历过的元素索引:<s:property value="#status.index"/> |
当前是偶数?:<s:property value="#status.even"/> |
当前是奇数?:<s:property value="#status.odd"/> |
是第一个元素吗?:<s:property value="#status.first"/> |
是最后一个元素吗?:<s:property value="#status.last"/>
<br />
</s:iterator>
</li>

分析:status作用If specified, an instanceof IteratorStatus will be pushed into stack upon each iteration

s:property取出循环的当前值。

通过对status取值。来得到循环情况

	<li>
<s:iterator value="#{1:'a', 2:'b', 3:'c'}" >
<s:property value="key"/> | <s:property value="value"/> <br />
</s:iterator>
</li> <li>
<s:iterator value="#{1:'a', 2:'b', 3:'c'}" var="x">
<s:property value="#x.key"/> | <s:property value="#x.value"/> <br />
</s:iterator>
</li>

分析:定义map时,须要在前面加上#;

【web开发学习笔记】Struts-Tags学习笔记1 - 通用标签和控制标签的更多相关文章

  1. Java Web开发及应用软件方向的学习计划

    从接触计算机以来,一直抱有很浓厚的兴趣.我并不擅长与人交际,与机器对话可能更有性格方面的优势.虽然我很想做出一些改变,但总得需要时间和历练,暂时也只能这样了~ 一直很向往代码的神秘,在梦之站待过两年时 ...

  2. java web从零单排第十六期《struts2》控制标签(2)

    1.s:subset标签概述: s:subset标签功能是从一个集合中取出部分元素合并成一个新的集合,新生成的这个集合是原来集合的子集.属性和意义如下: 属性名 是否必需 默认值 类型 说明介绍 co ...

  3. 想做web开发 就学JavaScript

    有一天我被问到,为了快速地在 web 开发工作上增加优势,应该学习什么语言.我的思绪回到了大学,那时候我用 Pascal.Fortran.C和汇编语言,不过那个时候有不同的目标. 鉴于当前的状况和趋势 ...

  4. HTML5移动Web开发实战 PDF扫描版​

    <HTML5移动Web开发实战>提供了应对这一挑战的解决方案.通过阅读本书,你将了解如何有效地利用最新的HTML5的那些针对移动网站的功能,横跨多个移动平台.全书共分10章,从移动Web. ...

  5. web开发中比较常用的html标签

    作为一名web开发人员,总结了一下经常用到的html标签,如下:<html> <head> <!--meta头标签 表示页面三秒后跳转到新浪页面--> <me ...

  6. 【前端】移动端Web开发学习笔记【2】 & flex布局

    上一篇:移动端Web开发学习笔记[1] meta标签 width设置的是layout viewport 的宽度 initial-scale=1.0 自带 width=device-width 最佳实践 ...

  7. 【前端】移动端Web开发学习笔记【1】

    下一篇:移动端Web开发学习笔记[2] Part 1: 两篇重要的博客 有两篇翻译过来的博客值得一看: 两个viewport的故事(第一部分) 两个viewport的故事(第二部分) 这两篇博客探讨了 ...

  8. 《应用Yii1.1和PHP5进行敏捷Web开发》学习笔记(转)

    学习地址为: http://www.yiibook.com/book/agile_web_application_development_with_yii1.1_and_php5   1.建立应用程序 ...

  9. ASP.NET Core Web开发学习笔记-1介绍篇

    ASP.NET Core Web开发学习笔记-1介绍篇 给大家说声报歉,从2012年个人情感破裂的那一天,本人的51CTO,CnBlogs,Csdn,QQ,Weboo就再也没有更新过.踏实的生活(曾辞 ...

随机推荐

  1. oracle视图总结(创建、查询、改动、删除等)

    视图定义: - -视图是一种虚表. - -视图建立在已有表的基础上, 视图赖以建立的这些表称为基表. - -向视图提供数据内容的语句为 SELECT 语句, 能够将视图理解为存储起来的 SELECT ...

  2. 分享一个基于 Node.js 的 Web 开发框架 - Nokitjs

    简介 Nokit 是一个简单易用的基于 Nodejs 的 Web 开发框架,默认提供了 MVC / NSP / RESTful 等支持,并提供对应项目模板.管理工具. 资源 GitHub https: ...

  3. OpenShift 容器日志和应用日志分离问题

    一般来说应用日志和容器日志一样输出到console,这样oc logs的时候就能把所有的获取到,但这种模式下输出的日志比较多,问题定位不方便,更多的时候开发人员只想通过应用日志来查看定位问题就够了,所 ...

  4. Kafka实战-Flume到Kafka (转)

    原文链接:Kafka实战-Flume到Kafka 1.概述 前面给大家介绍了整个Kafka项目的开发流程,今天给大家分享Kafka如何获取数据源,即Kafka生产数据.下面是今天要分享的目录: 数据来 ...

  5. linux系统的磁盘挂载

    1.查看数据盘在没有分区和格式化数据盘之前,使用 “df –h”命令,是无法看到数据盘的,可以使用“fdisk -l”命令查看.如下图:2. 对数据盘进行分区执行“fdisk /dev/xvdb”命令 ...

  6. mac下的一些命令

    1.显示隐藏文件 defaults write com.apple.finder AppleShowAllFiles -bool true 2.隐藏隐藏文件 defaults write com.ap ...

  7. hadoop中InputFormat 接口的设计与实现

    InputFormat 主要用于描述输入数据的格式, 它提供以下两个功能.❑数据切分:按照某个策略将输入数据切分成若干个 split, 以便确定 Map Task 个数以及对应的 split.❑为 M ...

  8. 算法导论-矩阵乘法-strassen算法

    目录 1.矩阵相乘的朴素算法 2.矩阵相乘的strassen算法 3.完整测试代码c++ 4.性能分析 5.参考资料 内容 1.矩阵相乘的朴素算法 T(n) = Θ(n3) 朴素矩阵相乘算法,思想明了 ...

  9. Android -- 写xml到SD卡中

    信息类                                                                                          private ...

  10. Transformer中引用iqd作为数据源导入报错TR1907与TR3312

    好久没和transform接触了,初次接触就给我送了个大礼,在选择好iqd文件执行最后一步导入的时候,要求我对数据源输入用户名密码,我连续输入了三次用户名和密码,在我十分肯定用户名和密码没错的情况下, ...