s:property 用法

OGNL:Object Graph Navigation Language(对象图导航语言)

 

1,访问Action值栈中的普通属性:

<s:property value="attrName"/>

2,访问Action值栈中的对象属性(要有get set方法):

<s:property value="obj.attrName"/>

<s:property value="obj1.obj2.attrName"/>

3,访问值栈中对象属性的方法

<s:property value="obj.methodName()"/>

4,访问值栈中action的普通方法:

<s:property value="methodName()"/>

5,访问静态方法:

<s:property value="@com.softeem.LoginAction@methodName()"/>

6,访问静态属性:

配置属性文件,允许ognl访问静态方法struts.ognl.allow...=true

<s:property value="@com.softeem.LoginAction@attrName"/>

7,访问Math类的静态方法:

<s:property value="@@min(9,7)"/>

8,访问普通类的构造方法:

<s:property value="new com.softeem.User(2)"/>

9,访问集合:

①list集合对象

<s:property value="listName"/>

②list集合中的某个元素

<s:property value="listName[1]"/>

③list中某个属性的集合

<s:property value="listName.{field}"/>

④list中某个属性集合的特定值

<s:property value="listName.{field}[0]"/>

⑤访问set

<s:property value="setName"/>

⑥访问set中某个元素

<s:property value="setName[0]"/>

⑦访问map

<s:property value="mapName"/>

⑧根据key访问Map中的元素

<s:property value="mapName.username"/>

<s:property value="mapName['username']"/>

<s:property value="mapName[/"username/"]"/>

⑨访问map中所有的key

<s:property value="mapName.keys"/>

10,访问map中所有的values

<s:property value="mapName.values"/>

11,访问map的大小

<s:property value="mapName.size()"/>

12,投影

<s:property value="listName.{?#this.age==1}"/>

<s:property value="listName.{^#this.age>1}"/>

<s:property value="listName.{$#this.age==1}"/>

<s:property value="listName.{$#this.age==1}.{age}==null"/>

[]:<s:property value="[0]"/>值栈中的对象

 

 

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

  访问action中传过来的对象:<s:property value="user"/>|${user }<br>

  访问action中传过来的对象中的属性:<s:property value="user.username"/>|${user.username }<br>

   访问action中传过来的对象属性类中的方法:<s:property value="user.getUsername()"/><br>

访问action中传过来的对象中的对象:<s:property value="user.group"/><br>

访问action中传过来的对象中的对象的属性:<s:property value="user.group.gname"/> |

<s:property value="user.group.getGname()"/><br>

访问action中的普通方法:<s:property value="getValue()"/><br>

访问其他类中过的静态方法:<s:property value="@com.softeem.pojos.User@printUser()"/><br>

   取到Math类中的方法:<s:property value="@@max(12,45)"/><br>

   访问User类的构造方法:<s:property value="new com.softeem.pojos.User()"/><br>

   访问list:<s:property value="users"/><br>

   获取list的长度:<s:property value="users.size()"/><br>

   取到list中第一个元素:<s:property value="users.get(0)"/>|<s:property value="users[1]"/><br>

取到list中username属性的集合:<s:property value="users.{username}"/><br>

根据key取到map中的元素:<s:property value="userMap.张三"/>|

<s:property value="userMap['三毛']"/><br>

⑨访问map中所有的key:<s:property value="userMap.keys"/><br>

10,访问map中所有的values:<s:property value="userMap.values"/><br>

11,访问map的大小:<s:property value="userMap.size()"/><br>

12,投影:<s:property value="users.{?#this.username=='张三'}.{password}"/><br>

13,取到list中满足条件的开头的一个元素的密码:<s:property value="users.{?#this.username='张三'}.{password}[0]"/><br>

14,取到list中满足条件的最后的一个元素的密码:<s:property value="users.{$#this.username='张三'}.{password}"/><br>

15,<s:property value="users.{$#this.username=='admin'}.{group}==null"/><br>

16,从栈顶开始取,一直取到指定的位置(0表示栈底):<s:property value="[1]"/>

   <s:debug></s:debug>

 

 

 

 

<think>好的,用户想了解关于Struts的property标签与条件属性(condition attribute)的用法。首先,我需要回忆一下Struts标签库的相关知识,尤其是property标签是否支持条件属性。 根据用户提供的引用内容,特别是引用[2]中的IF标签示例,似乎Struts的标签中有条件判断的功能,但需要确认property标签是否直接支持condition属性。可能用户混淆了property标签和if标签的用法。 首先,查阅Struts的官方文档或可靠资源,确认property标签是否有condition属性。根据常规知识,property标签主要用于输出值,例如<s:property value="myProperty"/>,而条件判断通常使用<s:if>、<s:elseif>、<s:else>标签,如引用[2]中的示例。 用户可能希望根据某个条件来决定是否显示某个属性值,这时候需要结合使用<s:if>和<s:property>标签。例如,先判断条件,再输出值。因此,property标签本身可能不支持condition属性,而是需要借助条件标签来实现。 此外,需要验证用户提供的引用内容是否相关。引用[1]提到的是include标签的属性,引用[3]是关于从request中获取属性,引用[4]涉及参数安全处理。这些可能与当前问题关联不大,但引用[2]中的IF标签结构是重点,说明Struts的条件标签用法。 接下来,思考用户可能的错误用法,比如试图在property标签中添加condition属性,导致错误。需要指出正确的做法是使用条件标签包裹property标签。 另外,安全问题也很重要,如引用[4]提到的,处理用户输入时需要验证和清理,防止注入攻击。不过这可能超出当前问题的范围,但可以提及作为最佳实践。 总结回答的结构:首先说明property标签的基本用法,然后指出它不支持condition属性,接着介绍如何通过条件标签实现条件输出,最后提供示例代码和注意事项,如安全处理和常见错误。</think>### Struts property标签与条件判断的使用方法 #### 1. property标签基础用法 Struts的`<s:property>`标签主要用于输出OGNL表达式计算结果,**不支持直接使用`condition`属性**。标准语法为: ```jsp <s:property value="表达式"/> ``` 例如显示请求参数: ```jsp <s:property value="#parameters.userId"/> [^3] ``` #### 2. 条件输出实现方式 需要结合`<s:if>`/`<s:else>`标签实现条件判断: ```jsp <s:if test="%{condition_expression}"> <s:property value="trueValue"/> </s:if> <s:else> <s:property value="falseValue"/> </s:else> ``` 示例(判断用户权限): ```jsp <s:if test="%{userType == 'admin'}"> <s:property value="adminWelcomeMsg"/> </s:if> <s:else> <s:property value="guestWelcomeMsg"/> </s:else> [^2] ``` #### 3. 复合条件表达式 使用逻辑运算符构建复杂判断: ```jsp <s:if test="%{(age >= 18) && (vipLevel > 3)}"> <s:property value="premiumContent"/> </s:if> ``` 注意XML特殊字符转义: ```jsp <s:if test="%{(score == 1) || (score > 100)}"> ``` #### 4. 安全注意事项 当处理用户输入时(如表单参数),需进行数据清洗: ```jsp <!-- 不安全示例 --> <s:property value="#parameters.rawInput"/> <!-- 安全处理 --> <% String sanitized = ESAPI.encoder().encodeForHTML(request.getParameter("input")); %> <%= sanitized %> [^4] ```
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值