Struts OGNL表达式判断求助:userId是否在userList中
解决Struts
<s:if>标签中判断userId是否在userList中的问题 问题根源
你的userList是逗号分隔的字符串类型(如"101,102,103"),但OGNL的in运算符需要的是集合或数组对象。直接使用{userList}会把整个字符串当作单个元素,导致判断逻辑失效。
具体解决方案
方案一:后台转换为集合/数组(推荐)
在Action中把userList字符串分割成集合或数组,再放入值栈:
// Action中的代码示例 String userListStr = "101,102,103"; List<Integer> userList = Arrays.stream(userListStr.split(",")) .map(Integer::parseInt) .collect(Collectors.toList()); // 放入值栈,前端可直接通过#userList访问 put("userList", userList);
前端直接使用集合判断:
<s:if test="%{#userData.userId in #userList}"> <!-- 符合条件的内容 --> </s:if>
方案二:前端用OGNL分割字符串判断
直接在<s:if>的test表达式中调用字符串的split方法,把字符串转成数组后判断:
<!-- 注意:若userId是数值类型,可转成字符串匹配,避免类型不兼容问题 --> <s:if test="%{#userData.userId.toString() in #userList.split(',')}"> <!-- 符合条件的内容 --> </s:if>
方案三:先将分割结果存为变量再判断
如果需要多次使用分割后的集合,可先通过<s:set>标签缓存:
<s:set var="userIdArray" value="%{#userList.split(',')}" /> <s:if test="%{#userData.userId.toString() in #userIdArray}"> <!-- 符合条件的内容 --> </s:if>
额外注意事项
- 确保
#userList和#userData.userId能在值栈中正确获取,检查变量名拼写是否一致 - 若
userList可能为空,需添加非空判断避免报错:<s:if test="%{#userList != null && #userData.userId.toString() in #userList.split(',')}">
内容的提问来源于stack exchange,提问作者Purushottam Mukhopadhyay
相关产品推荐
相关产品推荐

