You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 13:10:49