`

Struts2 -- s:if标签的使用

阅读更多

A:<s:if>判断字符串的问题:

 1、判断单个字符:<s:if test="#session.user.username=='c'">

 这样是从session中取出username的值,并且判断其是否为c,但是这样判断是不正确的,这样判断的话,根本判断不出来,要改成下面这样:

 <s:if test="#session.user.username=='c'.toString()">

 这样判断才能正确判断,至于原因我也不知道,在网上看到struts2中可能它判断的是char类型。

 2、判断字符串:<s:if test="#session.user.username=='milo'">

 这样写的就是判断username是不是milo,是String的判断,这个是不用加toString()的。

 3、判断数值:<s:if test="#session.user.username==0">

 这样写的就是判断username是不是0,是int的判断。

  

 B:判断为空的问题:

 <s:if test="#session.user.username==null">

 struts2中的判空似乎只能这么写

 判断非空可以这样写:

 <s:if test="#session.user.username!=null" >

 ps:如果从action中取属性值,test中的属性值前面的'#'不需要,action中的属性与jsp中的属性是互通的。

------------------------------------------------------------------------------------------------------------------------------------------------------------

字符串N一定要用“”双引号包含,从test的包含则用单引号 ‘ ’,如果相反,则不能正确判断该属性是否与该字符串相等。

 

正确:

<s:if test='activityBean.searchForce=="N" '>

 

错误:

 

<s:if test="activityBean.searchForce=='N' ">

 

因为java是强类型语言,单引号表示char类型,只能赋给一个字符给char类型,

而双引号则表示String类型

 

所以我的activityBean.searchForce属性是String类型,那么N必须要用双引号

 

/*************************************************************************************************************************************************************

例如这个语句 

要判断struts堆栈里systemSettingModel.settingValue 是否等于 "A" 

写成 

<s:if test="systemSettingModel.settingValue == 'A'">...</s:if> 

是不对的。 

这样A被认为是字符,而systemSettingModel.settingValue是单字符的字符串,不匹配 

 

 

应写成 

<s:if test='systemSettingModel.settingValue == "A"'>。。。 </s:if> 

或 

<s:if test="systemSettingModel.settingValue == \"A\"">... </s:if> 

 

参考: 

http://struts.apache.org/2.1.8.1/docs/why-wont-the-if-tag-evaluate-a-one-char-string.html 

 

另外systemSettingModel.settingValue的值可以这样取得 

${systemSettingModel.settingValue} 

<s:property value="systemSettingModel.settingValue"/> 

<s:property value="#request.systemSettingModel.settingValue"/> 

 

#表示不在struts堆栈里,没有#表示从struts堆栈里取 

 

/*********************************************************************************************************************************************************

Struts2堆栈

struts2中的标签 

s:a 中的href 什么时候使用“# ” 什么时候该用“%{ }” 什么时候该用“%{# }” 什么时候用“” 

s:select 中的list 什么时候使用“# ” 什么时候该用“%{ }” 什么时候该用“%{# }” 什么时候用“” 

s:if 中的test 什么时候使用“# ” 什么时候该用“%{ }” 什么时候该用“%{# }” 什么时候用“” 

s:iterator 中的value什么时候使用“# ” 什么时候该用“%{ }” 什么时候该用“%{# }” 什么时候用“” 

s:checkboxlist 中的list 什么时候使用“# ” 什么时候该用“%{ }” 什么时候该用“%{# }” 什么时候用“”

 

Struts2中有值堆栈和堆栈上下文的概念,你用 <s:debug />可以看出. 

 

S标签中用#可以取出堆栈上下文中的存放的对象. 

用%{}可以取出存在值堆栈中的Action对象,直接调用它的方法.例如你的Action如果继承了ActionSupport .那么在页面标签中,用%{getText('key')}的方式可以拿出国际化信息. %{#}, 这是JSP2.1最新规范中的语法,是Struts2为其解决兼容性问题而写成%{#}的

 

在域对象中使用%{#} 

比如%{#session.user.userName} 

将获得user对象的 userName属性值

 

%{}强调的是从你设定的root点取

 

%{}用于计算表达式 

如%{10+20}结果将输出30 

如%{"a"+"b"}结果将输出"ab" 

#通常强调从上下文取 

如#parameters.name[0]等价于request.getParameter("name") 

如#session.name等价于session.getAttribute("name") 

如#request.name等价于request.getAttribute("name") 

%{#}仍然用于计算表达式,只不过操作元可以是变量 

如先定义一个变量 

<s:set name="age" value="%{25}"/> 

则%{#age}将输出25,也可以省略"#",写为%{age} 

若将age加10,可这么写: 

%{#age+10},将输出30.不能省略"#"。也就说变量用于计算时不能省略"#"

 

===================================================================================================

 

 

ognl中的#、%和$

#、%和$符号在OGNL表达式中经常出现,而这三种符号也是开发者不容易掌握和理解的部分。在这里笔者简单介绍它们的相应用途。

1.#符号的用途一般有三种。

 1)访问非根对象属性,例如示例中的#session.msg表达式,由于Struts 2中值栈被视为根对象,所以访问其他非根对象时,需要加#前缀。实际上,#相当于ActionContext. getContext();#session.msg表达式相当于ActionContext.getContext().getSession(). getAttribute(”msg”) 。

 2)用于过滤和投影(projecting)集合,如示例中的persons.{?#this.age>20}。

 3)用来构造Map,例如示例中的#{’foo1′:’bar1′, ’foo2′:’bar2′}。

2.%符号

%符号的用途是在标志的属性为字符串类型时,计算OGNL表达式的值。如下面的代码所示:

构造Map

<s:set name=”foobar” value=”#{’foo1′:’bar1′, ‘foo2′:’bar2′}” />

<p>The value of key “foo1″ is <s:property value=”#foobar['foo1']” /></p>

<p>不使用%:<s:url value=”#foobar['foo1']” /></p>

<p>使用%:<s:url value=”%{#foobar['foo1']}” /></p>

3.$符号

$符号主要有两个方面的用途。

 在国际化资源文件中,引用OGNL表达式,例如国际化资源文件中的代码:reg.agerange=国际化资源信息:年龄必须在${min}同${max}之间。

 在Struts 2框架的配置文件中引用OGNL表达式,例如下面的代码片断所示:

<validators>

 <field name=”intb”>

 <field-validator type=”int”>

 <param name=”min”>10</param>

 <param name=”max”>100</param>

 <message>BAction-test校验:数字必须为${min}为${max}之间!</message>

 </field-validator>

 </field>

</validators>

0
1
分享到:
评论

相关推荐

    struts2 标签使用

    ### Struts2 `&lt;s:if&gt;` 标签使用详解 #### 概述 Struts2 是一款基于 Java 的企业级 Web 应用框架,它利用了 MVC(Model-View-Controller)架构模式来帮助开发者构建可扩展、易于维护的 Web 应用程序。在 Struts2 中...

    Struts2标签 s:if test 判断String类型的对象属性值和单字符是否相等的问题

    在使用Struts2中的`s:if`标签进行条件渲染时,特别是涉及到字符串和字符的比较时,需要注意Java语言的基本数据类型及其转换规则。通过明确地指定类型转换(如使用`toString()`),可以避免潜在的类型不匹配问题,...

    Struts2全部标签使用说明

    以上只是Struts2标签库的一部分,实际使用中还有更多标签如`&lt;s:textfield&gt;`(文本输入框)、`&lt;s:textarea&gt;`(文本区域)、`&lt;s:submit&gt;`(提交按钮)等,每个都有其特定的用途,极大地简化了JSP页面的编写。...

    struts2标签大全

    在JSP中,我们通常使用`&lt;%@ taglib prefix="s" uri="/struts-tags" %&gt;`来引入Struts2的标签库。下面将详细介绍一些重要的Struts2标签及其功能。 **A. 超链接和Action标签** - `&lt;s:a href=""&gt;&lt;/s:a&gt;`:创建一个...

    struts2标签使用例子

    在压缩包中的"example"文件可能包含了一个或多个使用Struts2标签的实际示例,可以参考这些示例来理解和学习Struts2标签的用法。通过实践,你会更好地掌握这些标签的功能和用法,从而在开发过程中更加得心应手。

    struts2 标签 api chm

    通过查阅这个CHM文件,开发者可以快速掌握Struts2标签的使用方法,提高开发效率,减少错误,同时也可以更好地理解和利用Struts2框架的优势。对于初学者,了解和熟练使用Struts2标签API是掌握Struts2框架的关键步骤。

    struts2<s:if>使用心得

    本篇文章将深入解析这段代码所涉及的关键知识点,并通过实际案例帮助理解如何使用Struts2中的`&lt;s:if&gt;`标签进行逻辑控制。 ### Struts2概述 Struts2是基于MVC设计模式的Web应用开发框架,它提供了丰富的标签库以及...

    struts2标签用法(详情见附件)

    使用Struts2标签时,开发者需要注意以下几点: - 标签需要放在`&lt;s:head&gt;`或`&lt;%@ taglib prefix="s" uri="/struts-tags"%&gt;`引入标签库之后。 - 每个标签都有对应的属性,例如`s:property`的`value`属性就是指定要显示...

    struts2标签库

    通过使用Struts2标签库,开发者可以避免过多的手动Java代码,提高开发效率,同时使得JSP页面更加整洁,易于维护。 了解并熟练掌握Struts2标签库,不仅有助于提升开发速度,还有利于项目的长期维护。在深入学习时,...

    struts2常用标签详解

    - 表单提交:使用`s:form`标签创建表单,它可以自动处理表单的提交动作。 最后,导入到MyEclipse或其他IDE后,可以直接在项目中引用这些标签,方便快速构建页面。理解并熟练运用Struts2的标签,能够提高开发效率,...

    struts2.0 taglib 标签库

    Struts2.0 Taglib标签库是Struts2框架中的核心组成部分,它提供了一组丰富的JSP标签,...在使用Struts2开发时,只需在JSP页面中引入Struts2的Taglib,即可使用这些标签来构建用户界面,从而实现与后台Action的交互。

    struts2-tags-API

    - `s:action`:此标签用于执行一个Struts2 Action,可以传递参数,重定向或转发到不同的结果页面。 - `s:url`:生成URL,支持Action映射,可以在链接中包含Action参数。 2. **字段标签**: - `s:textfield`:...

    struts2 标签库 帮助文档

    &lt;%@ taglib prefix="s" uri="/struts-tags" %&gt; 就能使用struts2.0的标签库 下面就介绍每个标签的具体应用实例说明:按字母排列 A: 1. 2. &lt;s:a href=""&gt;&lt;/s:a&gt;-----超链接,类似于html里的&lt;a&gt;&lt;/a&gt; 3. &lt;s:...

    struts2-tags-文档.rar

    Struts2的标签库丰富多样,包括显示数据的标签(如`s:property`)、表单元素标签(如`s:textfield`)、控制流标签(如`s:if`、`s:iterator`)等。这个文档会详细介绍这些标签的用法、属性及应用场景,帮助开发者更...

    struts2 tag 使用实例

    使用Struts2标签可以有效地减少JSP页面中的Java代码,提高开发效率。在实际应用中,通过配置Struts2的拦截器和Action类,可以实现复杂的业务逻辑和数据验证。同时,标签库的扩展性使得开发者能够自定义标签,满足...

    struts标签.zip

    - `&lt;s:if&gt;`和 `&lt;s:else&gt;`:条件判断标签,类似于Java的if-else语句。 - `&lt;s:iterator&gt;`:迭代标签,用于遍历集合或数组。 - `&lt;s:include&gt;`:包含其他JSP或Struts标签页。 2. **表单标签库**: - `&lt;s:form&gt;`:...

    struts2-s标签

    ### Struts2 S 标签库详解 #### 引言 Struts2 是一款流行的 Java Web 开发框架,它提供了一系列强大的功能来帮助开发者构建健壮的 Web 应用程序。其中,Struts2 的标签库是其核心特性之一,为开发者提供了丰富的 ...

    struts2.0的标签库

    - `&lt;s:if&gt;`, `&lt;s:elseif&gt;`, `&lt;s:else&gt;`:提供条件语句,类似于 Java 中的 if-else 语句。 F. 文件操作: - `&lt;s:fielderror&gt;`:显示字段级别的错误信息。 - `&lt;s:file&gt;`:支持文件上传功能。 G. 表单处理: - `&lt;s:...

    struts2的标签应用

    例如,可能有如何使用`s:property`标签来显示模型数据,如何用`s:iterator`标签迭代数组或集合,以及如何利用`s:if`和`s:choose`标签进行条件控制的例子。 在实际开发中,Struts2的标签使得视图层的代码更加简洁易...

    struts2.0的标签库(简介)

    Struts2.0 是一款基于 MVC 设计模式的开源 Java Web 框架,它极大地简化了企业级应用开发。在 Struts2 中,标签库是其核心特性之一...在实际项目中,熟练掌握这些标签的使用,能让你的 Struts2 应用开发更加得心应手。

Global site tag (gtag.js) - Google Analytics