`

struts2 ognl tags标签总结

 
阅读更多
以下来自尚学堂马士兵的例子:
<ol>
		<li>访问值栈中的action的普通属性: username = <s:property value="username"/> </li>
		<li>访问值栈中对象的普通属性(get set方法):<s:property value="user.age"/> | <s:property value="user['age']"/> | <s:property value="user[\"age\"]"/> | wrong: <%--<s:property value="user[age]"/>--%></li>
		<li>访问值栈中对象的普通属性(get set方法): <s:property value="cat.friend.name"/></li>
		<li>访问值栈中对象的普通方法:<s:property value="password.length()"/></li>
		<li>访问值栈中对象的普通方法:<s:property value="cat.miaomiao()" /></li>
		<li>访问值栈中action的普通方法:<s:property value="m()" /></li>
		<hr />
		<li>访问静态方法:<s:property value="@com.bjsxt.struts2.ognl.S@s()"/></li>
		<li>访问静态属性:<s:property value="@com.bjsxt.struts2.ognl.S@STR"/></li>
		<li>访问Math类的静态方法:<s:property value="@@max(2,3)" /></li>
		<hr />
		<li>访问普通类的构造方法:<s:property value="new com.bjsxt.struts2.ognl.User(8)"/></li>
		<hr />
		<li>访问List:<s:property value="users"/></li>
		<li>访问List中某个元素:<s:property value="users[1]"/></li>
		<li>访问List中元素某个属性的集合:<s:property value="users.{age}"/></li>
		<li>访问List中元素某个属性的集合中的特定值:<s:property value="users.{age}[0]"/> | <s:property value="users[0].age"/></li>
		<li>访问Set:<s:property value="dogs"/></li>
		<li>访问Set中某个元素:<s:property value="dogs[1]"/></li>----》没有意义,set是无序的
		<li>访问Map:<s:property value="dogMap"/></li>
		<li>访问Map中某个元素:<s:property value="dogMap.dog101"/> | <s:property value="dogMap['dog101']"/> | <s:property value="dogMap[\"dog101\"]"/></li>
		<li>访问Map中所有的key:<s:property value="dogMap.keys"/></li>
		<li>访问Map中所有的value:<s:property value="dogMap.values"/></li>
		<li>访问容器的大小:<s:property value="dogMap.size()"/> | <s:property value="users.size"/> </li>
		<hr />
		<li>投影(过滤):<s:property value="users.{?#this.age==1}[0]"/></li>
		<li>投影:<s:property value="users.{^#this.age>1}.{age}"/></li>
		<li>投影:<s:property value="users.{$#this.age>1}.{age}"/></li>
		<li>投影:<s:property value="users.{$#this.age>1}.{age} == null"/></li>
		<hr />
		<li>[]:<s:property value="[0].username"/></li>
		
	</ol>
	
	<s:debug></s:debug>

 

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

 

OGNL要结合struts2标签来使用,下面是总结:

1、“#”符号有三种用途:

  (1) 得到上下文对象

 

名称 作用 例子

parameters

包含当前HTTP请求参数的Map #parameters.id[0]作用相当于request.getParameter("id"
request 包含当前HttpServletRequest的属性(attribute)的Map #request.userName相当于request.getAttribute("userName"

session

包含当前HttpSession的属性(attribute)的Map #session.userName相当于session.getAttribute("userName"

application

包含当前应用的ServletContext的属性(attribute)的Map #application.userName相当于application.getAttribute("userName")    
attr 用于按 request > session > application 顺序访问其属性attribute #attr.userName相当于按顺序在以上三个范围(scope)内读取userName属性,直到找到为止。

  (2) 用于过滤和投影(projecting)集合,如: books.{?#this.price>35

  (3)构造Map,如: #{'foo1':'bar1''foo2':'bar2'

        

   #{'foo1':'bar1''foo2':'bar2'}这种方式常用在给radio或select、checkbox等标签赋值上。如果要在页面中取一个    map的值可以这样写:    

  

  <s:property value="#myMap['foo1']"/>     

  

  <s:property value="#myMap['foo1']"/>

2. “%”符号的用途是在标签的属性值被理解为字符串类型时,告诉执行环境%{}里的是OGNL表达式。

    如:<s:set name="myMap" value="#{'key1':'value1','key2':'value2'}"/>   

             <s:url value="%{#myMap['key1']}"/>  

3、“$”有两种用途   

  

(1)、在国际化资源文件中,引用OGNL表达式。   

  

(2)、在Struts 2配置文件中,引用OGNL表达式:    

  

<action name="saveUser" class="userAction" method="save">   

  

<result type="redirect">listUser.action?msg=${msg}</result>   

  

</action>   

  

<action name="saveUser" class="userAction" method="save">       

  

<result type="redirect">listUser.action?msg=${msg}</result>   

  

</action> 

分享到:
评论

相关推荐

    struts2 OGNL表达式

    3. **JSP标签库**:Struts2提供的JSP标签库,如`s:property`、`s:iterator`等,它们内部使用了OGNL。 4. **安全问题**:理解OGNL注入的风险和如何防御。 5. **调试技巧**:如何在开发过程中调试和测试OGNL表达式。 ...

    struts2-tags-API,struts2标签api

    总结,`struts2-tags-API`是学习和使用Struts2框架标签的重要资源。通过深入理解和应用这些标签,开发者可以构建出高效、整洁且易于维护的Web应用。对于Java web开发者来说,掌握Struts2标签的API是提升开发效率的...

    struts2 标签 tags API 参考文档

    本参考文档主要关注的是Struts2中的标签(Tags)和它们的API,这对于构建动态、交互式的用户界面至关重要。 1. **标签库概述** Struts2的标签库是基于JSP标准标签库(JSTL)扩展的,提供了一系列用于简化视图层...

    Struts2 OGNL示例(Maven项目)

    这个"Struts2 OGNL示例(Maven项目)"提供了使用OGNL与Struts2集成的实例,帮助开发者更好地理解和应用这一强大的特性。 首先,让我们了解什么是OGNL。OGNL是一种强大的表达式语言,允许我们访问和修改对象图中的...

    struts2-tags-API.rar

    总结来说,Struts2标签库是Struts2框架中的重要工具,它通过提供一系列预定义的JSP标签,简化了Web应用的视图层开发。掌握这些标签的使用,能帮助开发者构建出更加规范、高效的Java Web应用。"struts2-tags-API.rar...

    struts2 Ognl表单提交问题

    ### Struts2 OGNL 表单提交问题详解 #### 一、背景介绍 Struts2框架作为一款流行的企业级应用开发框架,在处理MVC架构方面有着独特的优势。其中,OGNL (Object-Graph Navigation Language) 作为一种强大的表达式...

    Struts2的标签库及OGNL表达式语言

    Struts2的标签库分为UI标签(UI Tags)和非UI标签(Non-UI Tags)。UI标签主要用于创建HTML表单,而非UI标签则包含了条件控制和逻辑操作等功能。 1. **UI标签(表单部分)** - **通用属性**: - `label`:指定...

    struts2标签使用例子

    - 引入Struts2标签库:在JSP页面头部添加`&lt;%@ taglib prefix="s" uri="/struts-tags"%&gt;`。 - 在Action中定义相关属性和方法。 - 在JSP页面中使用标签,如`s:textfield name="username"`绑定Action的username属性...

    struts2 taglib ognl java jsp

    总结来说,Struts2 Taglib和OGNL是Struts2框架的重要组成部分,它们使得开发者能够更加方便地处理JSP页面中的逻辑和数据展示。通过熟练掌握这两个工具,可以大大提高开发效率,同时提升Web应用的用户体验。在实际...

    Struts2 API 以及标签手册

    中文版的`struts2-tags-API.chm`文件是Struts2标签库的详细文档,包含了每个标签的用法、属性、示例和注意事项。通过查阅这个手册,开发者可以更深入地理解如何在JSP页面上使用Struts2标签,提高开发效率和代码质量...

    Struts2 的OGNL使用简介

    2. **JSP标签**:Struts2的标签库如`s:property`、`s:set`等都支持OGNL表达式,方便在视图层操作数据。 3. **异常处理**:通过OGNL表达式,可以在全局异常处理中获取并显示错误信息。 4. **拦截器**:OGNL可以在拦截...

    struts2-tags-API

    Struts2 Tags API是Struts2框架中一个关键的部分,它提供了一系列的标签库,用于简化Web应用开发,特别是视图层的构建。Struts2框架是基于MVC(Model-View-Controller)设计模式的Java Web应用框架,旨在简化开发...

    Struts2常用标签

    而Struts2则没有明确的分类,所有的标签都位于统一的URI命名空间"/struts-tags"下,但可以根据功能大致分为非UI标签和UI标签。Struts2的一个显著特点是支持多种表达语言,包括OGNL(Object-Graph Navigation ...

    struts2学习笔记(完美总结)——转自OPEN经验库

    本文将深入探讨Struts2的核心概念,包括Action、Result、配置文件、OGNL与ValueStack、Tags以及项目中的关键实践。 **一、Action** Action是Struts2中处理业务逻辑的核心组件,它是实现了`...

    Java struts2 ongl 标签 jsp页面

    例如,在提供的代码片段中,可以看到`&lt;%@ taglib prefix="s" uri="/struts-tags"%&gt;`引入了Struts2的标签库,这使得在JSP中可以方便地使用OGNL表达式来操作页面上的Java对象。 ```jsp ("sex", Sex.MALE); %&gt; This ...

    Struts2标签使用及API文档

    - **OGNL表达式**:在Struts2标签中广泛使用,可以用来访问Action的属性,如`s:property value="%{user.name}"`。 - **标签组合使用**:通过组合多个标签,可以实现复杂的业务逻辑和界面渲染。 6. **最佳实践** ...

    struts2标签库

    在使用Struts2标签库前,需要在JSP页面中引入相应的标签库,通常使用`&lt;%@taglib&gt;`指令,如`&lt;%@taglib uri="/struts-tags" prefix="s"%&gt;`。对于Servlet2.3之前的版本,可能还需要在web.xml中配置标签库的定义,但...

    中文-Struts2-Tags-API chm格式 非常详细的标签使用说明有例子

    这个“中文-Struts2-Tags-API chm格式”的资源,正是一个详尽的Struts2标签API指南,包含了各种标签的使用方法和实例,对于理解和应用Struts2标签库非常有帮助。 Struts2的标签API主要包括以下几个部分: 1. **...

    struts2 jar包 包含 标签

    Struts2标签具有动态性,可以结合OGNL(Object-Graph Navigation Language)表达式来访问和操作对象。例如,`s:property`标签可以显示Action中对象的属性值: ```jsp ``` 在这个例子中,"user"是Action中的一...

    Struts2 OGNL调用公共静态方法详细介绍

    或者,如果你使用的是Struts2的展示标签库,可以写成: ```jsp ('tiantian')"/&gt; ``` 这里,`@com.xxx.util.Util@sayHello('tiantian')`是OGNL表达式,`@`符号后跟类的全限定名,然后是`.`和静态方法名,最后是方法...

Global site tag (gtag.js) - Google Analytics