- 浏览: 7972100 次
- 性别:
- 来自: 广州
-
文章分类
- 全部博客 (2425)
- 软件工程 (75)
- JAVA相关 (662)
- ajax/web相关 (351)
- 数据库相关/oracle (218)
- PHP (147)
- UNIX/LINUX/FREEBSD/solaris (118)
- 音乐探讨 (1)
- 闲话 (11)
- 网络安全等 (21)
- .NET (153)
- ROR和GOG (10)
- [网站分类]4.其他技术区 (181)
- 算法等 (7)
- [随笔分类]SOA (8)
- 收藏区 (71)
- 金融证券 (4)
- [网站分类]5.企业信息化 (3)
- c&c++学习 (1)
- 读书区 (11)
- 其它 (10)
- 收藏夹 (1)
- 设计模式 (1)
- FLEX (14)
- Android (98)
- 软件工程心理学系列 (4)
- HTML5 (6)
- C/C++ (0)
- 数据结构 (0)
- 书评 (3)
- python (17)
- NOSQL (10)
- MYSQL (85)
- java之各类测试 (18)
- nodejs (1)
- JAVA (1)
- neo4j (3)
- VUE (4)
- docker相关 (1)
最新评论
-
xiaobadi:
jacky~~~~~~~~~
推荐两个不错的mybatis GUI生成工具 -
masuweng:
(转)JAVA获得机器码的实现 -
albert0707:
有些扩展名为null
java 7中可以判断文件的contenttype了 -
albert0707:
非常感谢!!!!!!!!!
java 7中可以判断文件的contenttype了 -
zhangle:
https://zhuban.me竹板共享 - 高效便捷的文档 ...
一个不错的网络白板工具
1 #号,能访问actioncontext的上下文资源,例子如下:
public class OgnlAction extends ActionSupport implements ServletContextAware,
ServletRequestAware, SessionAware {
private static final long serialVersionUID = -6175904602786022346L;
private HttpServletRequest request;
private ServletContext application;
private Map<String, Object> session;
@SuppressWarnings("all")
private List<Magazine> magazineList = new ArrayList<Magazine>() {
{
add(new Magazine("时代周刊", 10));
add(new Magazine("足球之夜", 19));
add(new Magazine("时尚", 20));
add(new Magazine("时代影视", 50));
}
};
public void setServletRequest(HttpServletRequest request) {
this.request = request;
}
public void setServletContext(ServletContext application) {
this.application = application;
}
@SuppressWarnings("all")
public void setSession(Map session) {
this.session = session;
}
public String execute() {
request.setAttribute("account", "account from request");
application.setAttribute("account", "account from response");
session.put("account", "account from session");
return Action.SUCCESS;
}
public List<Magazine> getMagazineList() {
return magazineList;
}
public void setMagazineList(List<Magazine> bookList) {
this.magazineList = bookList;
}
JSP页面:
所有的ID:<struts:property value="#parameters.id"/> <br/>
第一个ID:<struts:property value="#parameters.id[0]"/> <br/>
request 中取属性:<struts:property value="#request.account"/> <br/>
session 中取属性:<struts:property value="#session.account"/> <br/>
application 中取属性:<struts:property value="#application.account"/> <br/>
attr 中取属性:<struts:property value="#attr.account"/> <br/>
<hr />
价格大于18元的杂志共有 <struts:property value="magazineList.{?#this.price>18}.size()" /> 本,分别是:<br/>
<struts:iterator value="magazineList.{?#this.price>18}">
<struts:property value="name" /> - ¥<struts:property value="price" />. <br/>
</struts:iterator>
<hr />
名称包含“时代”二字的杂志共有 <struts:property value="magazineList.{?#this.name.contains('时代')}.size()"/> 本,分别是:<br/>
<struts:iterator value="magazineList.{?#this.name.contains('时代')}">
<struts:property value="name" /> - ¥<struts:property value="price" />. <br/>
</struts:iterator>
<hr />
“足球之夜”的价格为 ¥<struts:property value="magazineList.{?#this.name.contains('足球之夜')}[0].price"/>。
其中注意OGNL的灵活用法
2 下面两个注意区别:
<struts:label label="#request.account"></struts:label>
<struts:label label="%{#request.account}"></struts:label>
其中第一个会输出字符串#request.account",第二个会把request.account的结果输出.
3 autocomplete控件:
<s:url id="dataUrl" value="/autocompleteAjaxData.jsp" />
请选择国家:
<struts:autocompleter name="country" theme="ajax" href="%{dataUrl}"
loadOnTextChange="true" loadMinimumCount="1" autoComplete="false"
showDownArrow="true" indicator="indicator" />
<img id="indicator" src="images/loading.gif" />
其中href为获取数据的URL,indicator可以为一个属性或文字,获取数据的JSP如下:
out.clear();
request.setCharacterEncoding("UTF-8");
response.setHeader("Pragma", "no-cache");
response.setHeader("Cache-Control", "no-cache");
response.setDateHeader("Expires", 0);
String[] countries = { "。。。。。“}
String country = request.getParameter("country");
if (country == null)
country = "";
StringBuffer buffer = new StringBuffer();
for (int i = 0; i < countries.length; i++) {
if (countries[i].toLowerCase()
.startsWith(country.toLowerCase())) {
if (buffer.length() != 0)
buffer.append(",");
buffer.append("['" + countries[i] + "']");
}
}
Thread.sleep(500);
out.print("[" + buffer + "]");
4 连动框doubleselect:
<struts:head theme="ajax" />
<%
List<String> provinceList = new ArrayList<String>();
provinceList.add("北京");
provinceList.add("上海");
provinceList.add("天津");
provinceList.add("重庆");
provinceList.add("河北");
provinceList.add("河南");
provinceList.add("山东");
provinceList.add("山西");
provinceList.add("江苏");
provinceList.add("浙江");
request.setAttribute("provinceList", provinceList);
Map<String, List<String>> cityMap = new HashMap<String, List<String>>();
{
// 北京市
List<String> cityList = new ArrayList<String>();
cityList.add("东城区");
cityList.add("西城区");
cityList.add("海淀区");
cityList.add("朝阳区");
cityMap.put("北京", cityList);
}
{
// 山东省
List<String> cityList = new ArrayList<String>();
cityList.add("青岛");
cityList.add("济南");
cityList.add("潍坊");
cityList.add("烟台");
cityList.add("淄博");
cityMap.put("山东", cityList);
}
request.setAttribute("cityMap", cityMap);
%>
<struts:form action="login">
<struts:doubleselect name="province" list="#request.provinceList"
doubleName="city" doubleList="#request.cityMap.get(top)" label="请选择省份、市"/>
</struts:form>
5 optiontransferselect标签
<%
List<String> provinceSelected = new ArrayList<String>();
provinceSelected.add("北京");
provinceSelected.add("上海");
provinceSelected.add("天津");
provinceSelected.add("重庆");
provinceSelected.add("河北");
provinceSelected.add("河南");
provinceSelected.add("山东");
provinceSelected.add("山西");
provinceSelected.add("江苏");
provinceSelected.add("浙江");
request.setAttribute("provinceSelected", provinceSelected);
List<String> provinceUnselected = new ArrayList<String>();
provinceUnselected.add("湖南");
provinceUnselected.add("湖北");
provinceUnselected.add("云南");
provinceUnselected.add("广东");
provinceUnselected.add("广西");
request.setAttribute("provinceUnselected", provinceUnselected);
%>
<struts:form action="login">
<struts:optiontransferselect name="province"
doubleList="#request.provinceSelected"
list="#request.provinceUnselected" doubleName="city" leftUpLabel="向上"
leftDownLabel="向下" rightDownLabel="向下" rightUpLabel="向上"
leftTitle="已经选中的省份" headerKey="" headerValue="---请选择省份---"
rightTitle="剩余的省份" />
</struts:form>
6 TAB标签
<s:tabbedPanel id="test">
<s:div id="one" label="第一个 TabItem" theme="ajax" labelposition="top"
cssStyle="padding: 10px; ">
第一个 TabItem <br />
第一个 TabItem <br />
</s:div>
<s:div id="two" label="第二个 TabItem" theme="ajax"
cssStyle="padding: 10px; ">
第二个 TabItem <br />
第二个 TabItem <br />
</s:div>
<s:url action="divNews" id="divNewsUrl"></s:url>
<s:div id="three" label="新闻列表" theme="ajax" href="%{#divNewsUrl}">
</s:div>
</s:tabbedPanel>
<br/>
<s:tabbedPanel id="test2" closeButton="tab">
<s:div id="one2" label="第一个 TabItem" theme="ajax" labelposition="top"
cssStyle="padding: 10px; ">
第一个 TabItem <br />
第一个 TabItem <br />
</s:div>
<s:div id="two2" label="第二个 TabItem" theme="ajax"
cssStyle="padding: 10px; ">
第二个 TabItem <br />
第二个 TabItem <br />
</s:div>
<s:div id="three2" label="新闻列表" theme="ajax" href="%{#divNewsUrl}">
</s:div>
</s:tabbedPanel>
public class OgnlAction extends ActionSupport implements ServletContextAware,
ServletRequestAware, SessionAware {
private static final long serialVersionUID = -6175904602786022346L;
private HttpServletRequest request;
private ServletContext application;
private Map<String, Object> session;
@SuppressWarnings("all")
private List<Magazine> magazineList = new ArrayList<Magazine>() {
{
add(new Magazine("时代周刊", 10));
add(new Magazine("足球之夜", 19));
add(new Magazine("时尚", 20));
add(new Magazine("时代影视", 50));
}
};
public void setServletRequest(HttpServletRequest request) {
this.request = request;
}
public void setServletContext(ServletContext application) {
this.application = application;
}
@SuppressWarnings("all")
public void setSession(Map session) {
this.session = session;
}
public String execute() {
request.setAttribute("account", "account from request");
application.setAttribute("account", "account from response");
session.put("account", "account from session");
return Action.SUCCESS;
}
public List<Magazine> getMagazineList() {
return magazineList;
}
public void setMagazineList(List<Magazine> bookList) {
this.magazineList = bookList;
}
JSP页面:
所有的ID:<struts:property value="#parameters.id"/> <br/>
第一个ID:<struts:property value="#parameters.id[0]"/> <br/>
request 中取属性:<struts:property value="#request.account"/> <br/>
session 中取属性:<struts:property value="#session.account"/> <br/>
application 中取属性:<struts:property value="#application.account"/> <br/>
attr 中取属性:<struts:property value="#attr.account"/> <br/>
<hr />
价格大于18元的杂志共有 <struts:property value="magazineList.{?#this.price>18}.size()" /> 本,分别是:<br/>
<struts:iterator value="magazineList.{?#this.price>18}">
<struts:property value="name" /> - ¥<struts:property value="price" />. <br/>
</struts:iterator>
<hr />
名称包含“时代”二字的杂志共有 <struts:property value="magazineList.{?#this.name.contains('时代')}.size()"/> 本,分别是:<br/>
<struts:iterator value="magazineList.{?#this.name.contains('时代')}">
<struts:property value="name" /> - ¥<struts:property value="price" />. <br/>
</struts:iterator>
<hr />
“足球之夜”的价格为 ¥<struts:property value="magazineList.{?#this.name.contains('足球之夜')}[0].price"/>。
其中注意OGNL的灵活用法
2 下面两个注意区别:
<struts:label label="#request.account"></struts:label>
<struts:label label="%{#request.account}"></struts:label>
其中第一个会输出字符串#request.account",第二个会把request.account的结果输出.
3 autocomplete控件:
<s:url id="dataUrl" value="/autocompleteAjaxData.jsp" />
请选择国家:
<struts:autocompleter name="country" theme="ajax" href="%{dataUrl}"
loadOnTextChange="true" loadMinimumCount="1" autoComplete="false"
showDownArrow="true" indicator="indicator" />
<img id="indicator" src="images/loading.gif" />
其中href为获取数据的URL,indicator可以为一个属性或文字,获取数据的JSP如下:
out.clear();
request.setCharacterEncoding("UTF-8");
response.setHeader("Pragma", "no-cache");
response.setHeader("Cache-Control", "no-cache");
response.setDateHeader("Expires", 0);
String[] countries = { "。。。。。“}
String country = request.getParameter("country");
if (country == null)
country = "";
StringBuffer buffer = new StringBuffer();
for (int i = 0; i < countries.length; i++) {
if (countries[i].toLowerCase()
.startsWith(country.toLowerCase())) {
if (buffer.length() != 0)
buffer.append(",");
buffer.append("['" + countries[i] + "']");
}
}
Thread.sleep(500);
out.print("[" + buffer + "]");
4 连动框doubleselect:
<struts:head theme="ajax" />
<%
List<String> provinceList = new ArrayList<String>();
provinceList.add("北京");
provinceList.add("上海");
provinceList.add("天津");
provinceList.add("重庆");
provinceList.add("河北");
provinceList.add("河南");
provinceList.add("山东");
provinceList.add("山西");
provinceList.add("江苏");
provinceList.add("浙江");
request.setAttribute("provinceList", provinceList);
Map<String, List<String>> cityMap = new HashMap<String, List<String>>();
{
// 北京市
List<String> cityList = new ArrayList<String>();
cityList.add("东城区");
cityList.add("西城区");
cityList.add("海淀区");
cityList.add("朝阳区");
cityMap.put("北京", cityList);
}
{
// 山东省
List<String> cityList = new ArrayList<String>();
cityList.add("青岛");
cityList.add("济南");
cityList.add("潍坊");
cityList.add("烟台");
cityList.add("淄博");
cityMap.put("山东", cityList);
}
request.setAttribute("cityMap", cityMap);
%>
<struts:form action="login">
<struts:doubleselect name="province" list="#request.provinceList"
doubleName="city" doubleList="#request.cityMap.get(top)" label="请选择省份、市"/>
</struts:form>
5 optiontransferselect标签
<%
List<String> provinceSelected = new ArrayList<String>();
provinceSelected.add("北京");
provinceSelected.add("上海");
provinceSelected.add("天津");
provinceSelected.add("重庆");
provinceSelected.add("河北");
provinceSelected.add("河南");
provinceSelected.add("山东");
provinceSelected.add("山西");
provinceSelected.add("江苏");
provinceSelected.add("浙江");
request.setAttribute("provinceSelected", provinceSelected);
List<String> provinceUnselected = new ArrayList<String>();
provinceUnselected.add("湖南");
provinceUnselected.add("湖北");
provinceUnselected.add("云南");
provinceUnselected.add("广东");
provinceUnselected.add("广西");
request.setAttribute("provinceUnselected", provinceUnselected);
%>
<struts:form action="login">
<struts:optiontransferselect name="province"
doubleList="#request.provinceSelected"
list="#request.provinceUnselected" doubleName="city" leftUpLabel="向上"
leftDownLabel="向下" rightDownLabel="向下" rightUpLabel="向上"
leftTitle="已经选中的省份" headerKey="" headerValue="---请选择省份---"
rightTitle="剩余的省份" />
</struts:form>
6 TAB标签
<s:tabbedPanel id="test">
<s:div id="one" label="第一个 TabItem" theme="ajax" labelposition="top"
cssStyle="padding: 10px; ">
第一个 TabItem <br />
第一个 TabItem <br />
</s:div>
<s:div id="two" label="第二个 TabItem" theme="ajax"
cssStyle="padding: 10px; ">
第二个 TabItem <br />
第二个 TabItem <br />
</s:div>
<s:url action="divNews" id="divNewsUrl"></s:url>
<s:div id="three" label="新闻列表" theme="ajax" href="%{#divNewsUrl}">
</s:div>
</s:tabbedPanel>
<br/>
<s:tabbedPanel id="test2" closeButton="tab">
<s:div id="one2" label="第一个 TabItem" theme="ajax" labelposition="top"
cssStyle="padding: 10px; ">
第一个 TabItem <br />
第一个 TabItem <br />
</s:div>
<s:div id="two2" label="第二个 TabItem" theme="ajax"
cssStyle="padding: 10px; ">
第二个 TabItem <br />
第二个 TabItem <br />
</s:div>
<s:div id="three2" label="新闻列表" theme="ajax" href="%{#divNewsUrl}">
</s:div>
</s:tabbedPanel>
评论
2 楼
java_xiaoyi
2011-08-08
1 楼
omanhom
2010-08-18
到这里下载CHM版本的struts2标签说明啦
http://code.google.com/p/myjdemo/downloads/list
http://code.google.com/p/myjdemo/downloads/list
发表评论
-
复习:强迫线程顺序执行方式
2019-01-03 23:42 1620方法1: 三个线程,t1,t2,t3,如果一定要按顺序执行, ... -
(转)不错的前后端处理异常的方法
2019-01-02 23:16 2033前言 在 Web 开发中, 我们经常会需要处理各种异常, 这是 ... -
info q的极客时间大咖说等资料下载
2018-08-15 08:40 3494info q的极客时间大咖说等资料下载,还有不少思维导图 链 ... -
CXF 客户端超时时间设置(非Spring配置方式)
2018-07-03 22:38 2257import org.apache.cxf.endpoint. ... -
(转)synchronized关键字画像:正确打开方式
2018-06-14 09:25 509https://mp.weixin.qq.com/s/b3Sx ... -
CountDownLatch的例子
2018-06-13 14:10 707public class StatsDemo { ... -
两道面试题,带你解析Java类加载机制
2018-06-12 16:29 634https://mp.weixin.qq.com/s/YTa0 ... -
Spring中获取request的几种方法,及其线程安全性分析
2018-06-11 09:03 687https://mp.weixin.qq.com/s/KeFJ ... -
内部类小结
2018-06-06 10:25 452https://mp.weixin.qq.com/s/hErv ... -
JVM虚拟机小结1
2018-06-04 20:43 5691 jps -l //列出详细的类名和进程ID 2)jps ... -
windows下自带命令行工具查看CPU资源情况等
2018-06-04 12:53 3124微软提供了不少命令行 ... -
(收藏)深入分析Java的序列化与反序列化
2018-05-30 15:21 635https://mp.weixin.qq.com/s/T2Bn ... -
apache common包中的序列化工具
2018-05-30 09:10 1858什么是序列化 我们的 ... -
JAVA8 JVM的变化: 元空间(Metaspace)
2018-05-24 22:30 983本文将会分享至今为至我收集的关于永久代(Permanent G ... -
(转)服务器性能指标(一)——负载(Load)分析及问题排查
2018-05-21 21:03 1394原创: Hollis Hollis 负载 ... -
(转)对象复用
2018-05-20 15:27 879public class Student { priv ... -
mapreduce中入门中要注意的几点
2018-05-06 08:59 688在 mapreduce中,比如有如下的词: I love b ... -
HDFS的基本操作
2018-05-02 21:47 952-mkdir 在HDFS创建目录 ... -
一个不错的开源工具类,专门用来解析日志头部的,好用
2018-05-02 20:00 784一个不错的开源工具类,专门用来解析日志头部的,好用。 http ... -
介绍个不错的RESTFUL MOCK的工具wiremock
2018-04-27 21:02 1920介绍个不错的RESTFUL MOCK的工具wiremock,地 ...
相关推荐
### Struts2学习小结 #### 一、Struts2简介及环境搭建 **Struts2** 是一款基于 **MVC**(Model-View-Controller)设计模式的开源框架,用于简化 Java Web 应用程序的开发过程。通过将业务逻辑、用户界面以及控制...
"struts2标签小结 - jackyrong - ITeye技术网站.htm"很可能对这些标签进行了总结,包括`s:select`、`s:form`、`s:textfield`等常用标签的用法,以及如何在页面上动态绑定数据和进行条件判断等。 3. **Struts2与...
Struts2的标签库定义在URI为 `/struts-tags` 的命名空间下,主要分为三类:UI标签、非UI标签和AJAX标签。 UI标签主要用来构建用户界面,包括表单标签和非表单标签,如树形视图、选项卡等。表单标签用于创建HTML表单...
Struts2提供了一个内置标签`s:fielderror/>`,它可以自动找到ActionContext中保存的错误信息并显示在页面上。 2. 搭配使用`<s:reset/>`标签。此标签用于清空表单的字段值,但要注意,它并不会清除错误信息。因此,...
6.2.1 Struts 2标签API语法 113 6.2.2 使用OGNL设置标签属性 115 6.3 数据标签 117 6.3.1 property标签 117 6.3.2 set标签 118 6.3.3 push标签 119 6.3.4 bean标签 120 6.3.5 action标签 122 6.4 控制标签 124 6.4.1...
以上是对Struts框架的简单总结,每个知识点都涉及到Struts2的核心特性,理解和掌握这些知识点对于进行Struts2应用的开发至关重要。在实际项目中,还需要结合其他技术如Spring、Hibernate等进行更复杂的集成和配置。
### 小结 《Struts 2实战 Struts 2 in action 的中文版》这本书系统地介绍了Struts 2框架的基础知识、核心组件、工作原理以及实际开发技巧。对于希望深入学习和掌握Struts 2框架的开发者来说,这本书是一本不可多得...
5.1 Struts标签的使用方法 59 5.2 表单标签的共同属性 60 5.3 form标签 62 5.4 textfield、password、hidden标签 63 5.5 submit标签 65 5.6 reset标签 65 5.7 label标签 66 5.8 head标签 66 5.9 textarea...
第1章 Struts 2概述1 1.1 MVC思想概述2 1.1.1 Web技术的发展2 1.1.2 Model 1和Model 24 1.1.3 MVC思想及其优势6 1.1.4 常用的MVC框架7 1.2 Struts 2的起源和背景8 ... 1.6 本章小结22
### 小结 通过对Struts2框架的国际化功能的介绍和示例分析,我们可以看出Struts2在处理多语言应用方面具有非常强大的能力。通过合理的配置资源文件和使用Struts2提供的标签,开发者可以轻松地为用户提供多语言支持...
一、准备工作及实例 3 ...小结Action 14 9.使用通配符 14 10.使用0配置:ZERO Annotation 15 11.Result配置详解 15 探讨type类型: 16 Type类型值 16 作用说明 16 对应类 16 chain 16 用来处理Action链 16 ...
### 关于Struts2实验时的临时总结 #### 概述 本文档是对Struts2实验过程中的几个关键问题及解决方案进行了归纳与整理。通过实际操作过程中遇到的问题及其解决办法,帮助其他开发者避免同样的错误,并提供高效的学习...
#### 小结 通过这个简单的Struts2实例,我们不仅学习了如何设置Struts2的环境,还掌握了基本的页面设计和交互逻辑。更重要的是,我们接触到了Struts2框架的一些核心概念,如过滤器配置、标签库使用、动态URL生成等...
在"struts资料\前半阶段小结"这个主题中,我们可以理解为是对学习或使用Struts框架初期阶段的一个总结。以下是对Struts框架核心知识点的详细解释: 1. **MVC模式**:MVC是一种设计模式,用于分离应用程序的数据、...
#### 小结 通过上述步骤,我们可以成功地在Struts 2中实现文件上传功能。需要注意的是,在实际应用中可能还需要考虑更多的细节,比如文件大小限制、文件类型过滤以及错误处理等。这些额外的功能可以通过调整Struts...
#### 五、小结 通过本文档的学习,我们不仅了解了如何在 MyEclipse 8 环境中快速搭建 Struts 2 开发环境,还掌握了 Struts 2 的基本配置文件 `struts.xml` 和 `web.xml` 的配置方法。这对于初学者来说是非常有价值...
#### 12.7 小结 本章节简要介绍了如何在 MyEclipse 6 中整合 Struts2 和 Spring 框架,包括下载 Struts2 开发包、开发简单的 HelloWorld 应用、使用国际化消息、自定义 Action 方法、表单处理、表单验证、文件上传...
#### 12.7 小结 本章主要介绍了如何使用MyEclipse开发Struts2+Spring应用。通过一系列的实际操作,不仅学习了Struts2的基本用法,还了解了如何将其与Spring框架进行整合。通过这些示例,开发者可以更加深入地理解这...