一 : struts2 s:if标签以及 #,%{},%{#}的使用方法等在资料整理
<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>
另外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
另一个很容易错误应用的问题
<s:if test="deptType==1" >下属</s:if>如果你的数据库对应的字段类型为整形,可以这样使用;
<s:if test="deptType=='1'" >下属</s:if>如果你的数据库对应的字段类型为char,可以这样使用;
<s:if test="deptType=='aa'" >下属</s:if>如果你的数据库对应的字段类型为varchar,并且数据库中的字符串都是多余一个字符的字符串,可以这样使用;
<s:if test="deptType==\"1\"" >下属</s:if><s:else>直属</s:else>(测试通过,这样用是最正确的)
我遇到的样式选中问题解决方法:
<li>
<a href="/pro/pro!productList.action?proId=${productType.id}" <s:if test="#productType.id == #parameters.productType[0]"></s:if>>${productType.typeName}</a>
</li>
二 : EXCEL中的IF与CEILING或ROUNDUP函数组合使用
日常工作中,我们经常用到IF函数,即根据不同条件,返回不同的结果。三 : IF函数使用方法
IF函数使用方法
IF 请参阅
执行真假值判断,根据逻辑计算的真假值,返回不同结果。 可以使用函数 IF 对数值和公式进行条件检测。
语法
IF(logical_test,value_if_true,value_if_false)
Logical_test 表示计算结果为 TRUE 或 FALSE 的任意值或表达式。例如,A10=100 就是一个逻辑表达式,如果单元格 A10 中的值等于 100,表达式即为 TRUE,否则为 FALSE。本参数可使用任何比较运算符。
Value_if_true logical_test 为 TRUE 时返回的值。例如,如果本参数为文本字符串“预算内”而且 logical_test 参数值为 TRUE,则 IF 函数将显示文本“预算内”。如果 logical_test 为 TRUE 而 value_if_true 为空,则本参数返回 0(零)。如果要显示 TRUE,则请为本参数使用逻辑值 TRUE。Value_if_true 也可以是其他公式。
Value_if_false logical_test 为 FALSE 时返回的值。例如,如果本参数为文本字符串“超出预算”而且 logical_test 参数值为 FALSE,则 IF 函数将显示文本“超出预算”。如果 logical_test 为 FALSE 且忽略了
Value_if_false(即 value_if_true 后没有逗号),则会返回逻辑值 FALSE。如果 logical_test 为 FALSE 且 Value_if_false 为空(即 value_if_true 后有逗号,并紧跟着右括号),则本参数返回 0(零)。Value_if_false 也可以是其他公式。
说明
? 函数 IF 可以嵌套七层,用 value_if_false 及 value_if_true 参数可以构造复杂的检测条件。请参阅下面最后一个示例。 ? 在计算参数 value_if_true
后,函数 和IF 返value_if_false
回相应语句执行后的返回值。
? 如果函数 IF 的参数包含在行和列中排列的一组参数进行运算的单个公式。数组区域共用一个公式;数组常量是用作参数的一组常量。),则在执行 IF 语句时,数组中的每一个元素都将计算。
? Microsoft Excel 还提供了其他一些函数,可依据条件来分析数据。例如,
如果要计算单元格区域中某个文本字符串或数字出现的次数,则可使用 COUNTIF 工作表函数。如果要根据单元格区域中的某一文本字符串或数字求和,则可使用 SUMIF 工作表函数。请了解关于根据条件计算值。 示例 1
如果您将示例复制到空白工作表中,可能会更易于理解该示例。 操作方法
1. 创建空白工作簿或工作表。
2. 请在“帮助”主题中选取示例。不要选取行或列标题。
从帮助中选取示例。
3. 按 Ctrl+C。
4. 在工作表中,选中单元格 A1,再按 Ctrl+V。
5. 若要在查看结果和查看返回结果的公式之间切换,请按 Ctrl+`(重音符),
或在“工具”菜单上,指向“公式审核”,再单击“公式审核模式”。
A
数据
50
1 公式 说明(结果) 如果上面的数字小于等于 100,则公式将
显示“Within budget”。否则,公式显
示“Over budget”。(Within budget)
如果上面数字为 100,则计算单元格区域
B5:B15,否则返回空文本 ("") =IF(A2<=100,"Within 2 budget","Over budget") =IF(A2=100,SUM(B5:B15),"")
示例 2
如果您将示例复制到空白工作表中,可能会更易于理解该示例。 操作方法
1. 创建空白工作簿或工作表。
2. 请在“帮助”主题中选取示例。不要选取行或列标题。
从帮助中选取示例。
3. 按 Ctrl+C。
4. 在工作表中,选中单元格 A1,再按 Ctrl+V。
5. 若要在查看结果和查看返回结果的公式之间切换,请按 Ctrl+`(重音符),或在“工具”菜单上,指向“公式审核”,再单击“公式审核模式”。
A
1500 1 500 2 500 3
4 B 预算费用 900 900 925 实际费用 公式 说明(结果)
=IF(A2>B2,"Over Budget","OK") 判断第 1 行是否超出预算 (Over Budget) =IF(A3>B3,"Over Budget","OK") 判断第 2 行是否超出预算 (OK) 示例 3
如果您将示例复制到空白工作表中,可能会更易于理解该示例。 操作方法
1. 创建空白工作簿或工作表。
2. 请在“帮助”主题中选取示例。不要选取行或列标题。
从帮助中选取示例。
3. 按 Ctrl+C。
4. 在工作表中,选中单元格 A1,再按 Ctrl+V。
5. 若要在查看结果和查看返回结果的公式之间切换,请按 Ctrl+`(重音符),或在“工具”菜单上,指向“公式审核”,再单击“公式审核模式”。
A
成绩
45
90
1 78
2 公式 说明(结果)
为第一个成绩指定一
个字母等级 (F)
为第二个成绩指定一
个字母等级 (A)
为第三个成绩指定一
个字母等级 (C) 3 =IF(A2>89,"A",IF(A2>79,"B", IF(A2>69,"C",IF(A2>59,"D","F")))) 4 =IF(A3>89,"A",IF(A3>79,"B", IF(A3>69,"C",IF(A3>59,"D","F")))) =IF(A4>89,"A",IF(A4>79,"B", IF(A4>69,"C",IF(A4>59,"D","F"))))
在上例中,第二个 IF 语句同时也是第一个 IF 语句的参数 value_if_false。同样,第三个 IF 语句是第二个 IF 语句的参数 value_if_false。例如,如果第一个 logical_test (Average > 89) 为 TRUE,则返回“A”;如果第一个 logical_test 为 FALSE,则计算第二个 IF 语句,以此类推。
用下列关键字指定数字的字母等级。
如果成绩是 则返回
大于 89 A
80 到 89 B
70 到 79 C
60 到 69 D
小于 60
F
四 : if函数的使用方法
if函数的使用方法
函数:“=IF(A,B,C)”,意思是“如果A,那么B,否则C” 如“=IF(A1<60,"不及格","及格"),意思是“如果A1<60,那么‘不及格’,否则‘及格’”。(www.61k.com)有时候,情况不是这么简单,比如及格的成绩中又要分为“及格”“良好”“优秀”三个等级,这时就可以在C中重复应用函数IF。实际上,“=IF(A,B,C)”中的A、B、C三处都可以再用函数IF。
1、先认识函数语法:“=IF(要求的条件,满足条件的返回值,不满足条件的返回值)”。
2、第2层套嵌应在上述第2个逗号之后加IF(),第3层套嵌应在第2层套嵌括弧里的第2个逗号后添加IF()......最多可套嵌7层。这样也可以进一步理解上述第2项的“第2层套嵌应在上述第2个逗号之后加IF()”的意思。如:
=IF(A1<60,"不及格",IF(A1<75,"及格",IF(A1<90,"良好","优秀"))),等等。
if函数除了遵守一般函数的通用规则以外,还有其特有的注意事项:?? 1 、括号必须成对,上下对应。??
2 、if函数有N个条件则有N+1个结果,即若结果只有3种情况的,那么条件只要2个就够了。??
3、 if函数最多允许出现8个返回值(结果),也就意味着,最多套用7个if 。??
if函数的用法 if函数的使用方法
4 、多个if嵌套时,尽量使用同一种逻辑运算符。[www.61k.com)即:统一使用大于号或者统一使用小于号。避免出现不必要的错误。??
5、 if是个好函数,很管用。他的格式是:=if(条件1,返回值1,返回值2) 。多个嵌套的格式:=if(条件1,返回值1,if(条件2,返回值2,if(条件3,返回值3,返回值4))) 。这里先写3层嵌套,4、5、6、7层同理。
本文标题:if函数的使用方法-struts2 s:if标签以及 #,%{},%{#}的使用方法等在资料整理61阅读| 精彩专题| 最新文章| 热门文章| 苏ICP备13036349号-1