- 浏览: 74277 次
- 性别:
- 来自: 惠州
文章分类
最新评论
-
woyaonuli:
各位大侠,请教下,怎么让生成的pdf每页都有背景图片, ...
iText 跨行and背景图片 -
lixia0417:
恩,LZ,谢谢了,那我还是练习把SSh的例子改成S2sh的吧, ...
struts2+hibernate3+spring2读书笔记4(数据校验器) -
hhr_michael:
哥们,你好,这本书着重s2sh的各个部分开发,而整合的例子不是 ...
struts2+hibernate3+spring2读书笔记4(数据校验器) -
lixia0417:
对,哥们,问一下,这本书中关于S2SH整合开发的例子多吗,就是 ...
struts2+hibernate3+spring2读书笔记4(数据校验器) -
hhr_michael:
谢谢提醒,由于只是着重校验的过程,所以这代码没有在struts ...
struts2+hibernate3+spring2读书笔记4(数据校验器)
第9章 OGNL
本章导读语
OGNL是一种功能强大的EL表达式,它简化了对数据的访问,使得开发人员能够通过非常简单的表达式访问对象层。在struts2的OGNL中,数据放在以下几个地方:ValueStack、request、session、application的顺序进行遍历
一. OGNL的使用
1. 通过OGNL获取各种属性
(1) 编写Action类:OgnlAction.java
(2)编写jsp页面:ognl.jsp
2.OGNL中的集合操作
二. EL表达式
(1)编写Action类:ElAction.java
(2)在web.xml中配置初始化参数encoding
(3)编写jsp页面:el.jsp
(4)配置struts.xml
三. Lambda表达式
本章导读语
OGNL是一种功能强大的EL表达式,它简化了对数据的访问,使得开发人员能够通过非常简单的表达式访问对象层。在struts2的OGNL中,数据放在以下几个地方:ValueStack、request、session、application的顺序进行遍历
一. OGNL的使用
1. 通过OGNL获取各种属性
(1) 编写Action类:OgnlAction.java
package amigo.struts.ognl; import java.util.Map; import javax.servlet.ServletContext; import javax.servlet.http.HttpServletRequest; import org.apache.struts2.interceptor.ServletRequestAware; import org.apache.struts2.interceptor.SessionAware; import org.apache.struts2.util.ServletContextAware; import com.opensymphony.xwork2.ActionContext; import com.opensymphony.xwork2.ActionSupport; /** * OGNL简单操作使用举例 * */ public class OgnlAction extends ActionSupport implements ServletRequestAware,SessionAware,ServletContextAware{ private static final long serialVersionUID=1L; private HttpServletRequest request; private Map<String,String> session; private ServletContext application; /**用户名*/ private String username; /**密码*/ private String password; public HttpServletRequest getRequest() { return request; } public void setServletRequest(HttpServletRequest request) { this.request = request; } public Map<String, String> getSession() { return session; } public void setSession(Map session) { this.session = session; } public ServletContext getApplication() { return application; } public void setServletContext(ServletContext application) { this.application = application; } 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; } public static long getSerialVersionUID() { return serialVersionUID; } /** * 定义处理登录请求的execute方法 * */ public String execute(){ //Action属性设置 this.setUsername("amigo"); this.setPassword("1234"); ActionContext ctx = ActionContext.getContext(); ctx.put("address", "北京市海淀区"); //request属性设置 request.setAttribute("address", "request中属性的值"); //session属性设置 session.put("address", "session中属性的值"); //application属性设置 application.setAttribute("address", "application中属性的值"); return this.SUCCESS; } }
(2)编写jsp页面:ognl.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="s" uri="/struts-tags"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>OGNL简单操作实例</title> </head> <body> 访问Action实例的属性时,使用和不使用“#”都是可以的:<br/> <s:property value="username"/><br/> <s:property value="password"/><br/> <s:property value="address"/><br/><br/> 访问parameter中的信息,使用#parameters.paramName或#parameters["paramname"]:<br/> <s:property value="#parameters.address"/><br/> <s:property value='#parameters["address"]'/><br/><br/> 访问request中的信息,使用#request.paramName或#request["paramName"]:<br/> <s:property value="#request.address"/><br/> <s:property value='#request["address"]'/><br/><br/> 访问session中的信息,使用#session.paramName或#session["paramName"]:<br/> <s:property value="#session.address"/><br/> <s:property value='#session["address"]'/><br/><br/> 访问application中的信息,使用#application.paramName或#application["paramName"]:<br/> <s:property value="#application.address"/><br/> <s:property value='#application["address"]'/><br/><br/> 使用#attr.paramName或#attr["paramName"]访问时,按request>session>application顺序访问属性<br/> <s:property value="#attr.address"/><br/> <s:property value='#attr["address"]'/><br/><br/> </body> </html>(3)编写Struts2配置文件:struts.xml
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd"> <struts> <include file="struts-default.xml"/> <package name="tags" extends="struts-default"> <action name="ognl" class="amigo.struts.ognl.OgnlAction"> <result name="success">/ognl/ognl.jsp</result> </action> </package> </struts>
2.OGNL中的集合操作
<%@ page contentType="text/html; charset=UTF-8" %> <%@ taglib prefix="s" uri="/struts-tags" %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>OGNL的集合操作实例</title> </head> <body> List类型集合: <br/>(1)iterator标签:<br/> <s:iterator value="{'香蕉', '苹果', '橘子', '樱桃'}" id="fruitName"> <s:property value="fruitName"/> </s:iterator> <br/>(2)select标签(生成的select的各option的value属性与显示的名称相同):<br/> <s:select label="userName" name="userName" list="{'阿蜜果', 'amigo', '阿蜜果2'}" value="'阿蜜果2'" /> <br/><br/>Map类型集合: <br/>(1)iterator标签:<br/> <s:iterator value="#{'1' : '香蕉', '2' : '苹果', '3': '橘子', '4' : '樱桃'}"> <s:property value="key"/>:<s:property value="value"/> </s:iterator> <br/>(2)select标签(生成的select的各option中的value值为各key-value对的key):<br/> <s:select label="userName" name="userName" list="#{'1' : '阿蜜果', '2' : 'amigo', '3' : '阿蜜果2'}" listKey="key" listValue="value" value="3"/> </body> </html>
二. EL表达式
(1)编写Action类:ElAction.java
package amigo.struts.el; import java.util.Map; import java.util.Enumeration; import javax.servlet.ServletContext; import javax.servlet.http.HttpServletRequest; import org.apache.struts2.interceptor.ServletRequestAware; import org.apache.struts2.interceptor.SessionAware; import org.apache.struts2.util.ServletContextAware; import com.opensymphony.xwork2.ActionSupport; /** * EL表达式使用举例. */ public class ElAction extends ActionSupport implements ServletRequestAware, SessionAware, ServletContextAware { private static final long serialVersionUID = 1L; private HttpServletRequest request; private Map<String,String> session; private ServletContext application; public void setServletRequest(HttpServletRequest request) { this.request=request; } public void setSession(Map session) { this.session = session; } public void setServletContext(ServletContext application) { this.application=application; } public String execute() { // request属性设置 request.setAttribute("address", "request中属性的值"); // session属性设置 session.put("address", "session中属性的值"); // application属性设置 application.setAttribute("address", "application中属性的值"); return this.SUCCESS; } }
(2)在web.xml中配置初始化参数encoding
<context-param> <param-name>encoding</param-name> <param-value>UTF-8</param-value> </context-param>
(3)编写jsp页面:el.jsp
<%@ page contentType="text/html; charset=UTF-8" %> <%@ taglib prefix="s" uri="/struts-tags" %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <% String address = "Page范围中的address变量"; pageContext.setAttribute("address", address); %> <html> <head> <title>el表达式使用实例</title> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <script language="javascript"> var oneDay = 24*60*60*1000; var expDate = new Date(); expDate.setTime(expDate.getTime() + oneDay); var cookieExpires = expDate.toGMTString(); document.cookie="loginName=amigo;expires=" + cookieExpires; </script> </head> <body> 四种范围中变量的获取:<br/> Page范围:${pageScope.address}<br/> Request范围:${requestScope.address}<br/> Session范围:${sessionScope.address}<br/> Application范围:${applicationScope.address}<br/> <br/>用户请求参数的获取:<br/> 获取单个用户请求参数:${param.loginName}<br/> 获取用户请求参数的一组值:${paramValues.address[0]}、${paramValues.address[1]}<br/> <br/>cookie中变量的获取:<br/> ${cookie.loginName} <br/>header中值的获取:<br/> HTTP连接头部的host值: ${header["host"]}<br/> HTTP连接头部的accept值: ${header["accept"]}<br/> HTTP连接头部的user-agent值: ${header["user-agent"]}<br/> <br/>应用范围内的初始化参数:<br/> 初始化参数encoding:${initParam.encoding}<br/> <br/>常用request信息:<br/> 取得请求的参数字符串:${pageContext.request.queryString}<br/> 取得请求的URL,但不包括请求之参数字符串:${pageContext.request.requestURL}<br/> 服务的web application 的名称 :${pageContext.request.contextPath}<br/> 取得HTTP 的方法(GET、POST):${pageContext.request.method}<br/> 取得使用的协议(HTTP/1.1、HTTP/1.0):${pageContext.request.protocol}<br/> 取得用户名称:${pageContext.request.remoteUser}<br/> 取得用户的IP地址:${pageContext.request.remoteAddr}<br/> <br/>常用session信息:<br/> 判断session是否为新的:${pageContext.session.new}<br/> 取得sessionID:${pageContext.session.id} </body> </html>
(4)配置struts.xml
<action name="el" class="amigo.struts.el.ElAction"> <result name="success">/el/el.jsp</result> </action>
三. Lambda表达式
<%@ page contentType="text/html; charset=UTF-8" %> <%@ taglib prefix="s" uri="/struts-tags" %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>Lambda表达式实例</title> </head> <body> -1小于0:<s:property value="#isLessThanZero =:[#this < 0 ? 'true' : 'false'], #isLessThanZero(-1)"/><br/> 2小于0:<s:property value="#isLessThanZero =:[#this < 0 ? 'true' : 'false'], #isLessThanZero(2)"/> </body> </html>
发表评论
-
struts2+hibernate3+spring2读书笔记15(核心机制-----IOC)
2010-07-21 12:16 1427... -
struts2+hibernate3+spring2读书笔记14(Spring入门)
2010-06-21 14:31 1044... -
struts2+hibernate3+spring2读书笔记13(Hibernate的事务控制)
2010-06-21 11:27 1173... -
struts2+hibernate3+spring2读书笔记12(操纵实体对象)
2010-06-21 10:07 990... -
struts2+hibernate3+spring2读书笔记11(Hibernate查询)
2010-06-15 14:25 1476... -
struts2+hibernate3+spring2读书笔记10(Hibernate配置文件)
2010-06-14 09:27 1409... -
struts2+hibernate3+spring2读书笔记9(Hibernate入门)
2010-06-10 09:41 945第1 ... -
struts2+hibernate3+spring2读书笔记7(Struts 2 标签库)
2010-06-08 15:15 1024... -
struts2+hibernate3+spring2读书笔记6(拦截器)
2010-06-02 16:42 895第 ... -
struts2+hibernate3+spring2读书笔记5(类型转换)
2010-05-27 11:45 958第 ... -
struts2+hibernate3+spring2读书笔记4(数据校验器)
2010-05-20 17:05 1293最近买了谢星星(阿蜜果)的企业应用架构设计-Struts2+H ... -
struts2+hibernate3+spring2读书笔记3(国际化web 应用 )
2010-05-19 10:21 1191最近买了谢星星(阿蜜果)的企业应用架构设计-Struts2+H ... -
struts2+hibernate3+spring2读书笔记2(struts2配置文件)
2010-05-17 16:45 1111最近买了谢星星(阿蜜 ... -
struts2+hibernate3+spring2读书笔记1(struts2 开发环境)
2010-05-17 10:10 1280最近买了谢星星(阿蜜果)的企业应用架构设计-Struts2+H ...
相关推荐
本系统的开发与设计是基于vue为前端页面核心框架为django/flask,技术方面主要采用了Html、Js、CSS3、python、Mysql。 本课题使用Python语言进行开发。代码层面的操作主要在PyCharm中进行,将系统所使用到的表以及数据存储到MySQL数据库中,方便对数据进行操作本课题基于WEB的开发平台 ②前端开发选择:Vue。 ②后端开发选择:python、django/flask。 ③数据库选择:MySQL。 ④开发工具选择:pycharm、Navicat for MySQL。 包含了我的信息、用户管理、期货公司管理、开户信息管理、充值信息管理、期货期货信息管理、期货投资管理、取消投资管理、投资风险管理、意见反馈、系统管理
springboot052基于Springboot+Vue旅游管理系统毕业源码案例设计 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。 替换数据可以直接使用,注释清楚,适合新手
1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。 替换数据可以直接使用,注释清楚,适合新手
1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。 替换数据可以直接使用,注释清楚,适合新手
1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。 替换数据可以直接使用,注释清楚,适合新手
1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。 替换数据可以直接使用,注释清楚,适合新手
计算机图形学之动画和模拟算法:Keyframe Animation:碰撞检测与响应.docx
行业研究报告、行业调查报告、研报
调用文心一言api的一个尝试
hertzbeat的docker镜像文件
1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。 替换数据可以直接使用,注释清楚,适合新手
1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。 替换数据可以直接使用,注释清楚,适合新手
项目经过测试均可完美运行! 环境说明: 开发语言:java jdk:jdk1.8 数据库:mysql 5.7+ 数据库工具:Navicat11+ 管理工具:maven 开发工具:idea/eclipse
1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。 替换数据可以直接使用,注释清楚,适合新手
1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。 替换数据可以直接使用,注释清楚,适合新手
计算机图形学之动画和模拟算法:Procedural Animation:物理基础:力与运动.docx
1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。 替换数据可以直接使用,注释清楚,适合新手
1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。 替换数据可以直接使用,注释清楚,适合新手
2112312312321321