【问题标题】:Struts 2 ognl.SecurityMemberAccess warningStruts 2 ognl.SecurityMemberAccess 警告
【发布时间】:2016-05-04 07:42:03
【问题描述】:

在一个 struts 2 项目中,我在执行这样的循环时收到了 ognl 警告:

<c:set var="unitArray" value="${fn:split(unit, ',')}" />

<c:forTokens items="${key}" delims="," var="name" varStatus="counter">    
    <s:text name="%{#attr.unitArray[#attr.counter.index]}" />   
</c:forTokens>

警告是

    Package of target [javax.servlet.jsp.jstl.core.LoopTagSupport$1Status@353a1d92] or 
      package of member [public int javax.servlet.jsp.jstl.core.LoopTagSupport$1Status.getIndex()] are excluded!

这可以解决吗?!

【问题讨论】:

  • 你能解释一下你想在这里实现什么吗?为什么不只迭代unitArray
  • 亲爱的@AleksandrM,这只是代码的一部分,如果您认为有帮助,我可以将完整代码放在这里。但是我想知道{#attr.unitArray[#attr.counter.index]}为什么会产生警告,是否可以解决
  • 问:为什么?答:因为javaxstruts.excludedPackageNames 中。你能重写你的代码以获取 jstl 标签中的值并将其传递给&lt;s:text&gt;
  • 我在尝试混合使用 struts 和 JSTL 标记时遇到了几种奇怪的情况,大多数情况都通过避免混合两者来解决。与其使用 c:set 和 JSTL forTokens 循环,不如尝试使用 Struts 的 set 和 iterator 标签。见struts.apache.org/docs/iterator.htmlstruts.apache.org/docs/set.html

标签: jsp struts2 jstl ognl valuestack


【解决方案1】:

您可以将状态变量的值放入值堆栈并使用它来代替 JSTL 标记的状态索引。

<c:forTokens items="${key}" delims="," var="name" varStatus="counter"> 
    <s:set var="idx">${counter.index}</set>   
    <s:text name="%{#attr.unitArray[#idx]}" />   
</c:forTokens>

或者使用相反的操作,只需将操作放到页面上下文中,并在&lt;c:out&gt; 中使用其文本属性。这个方法我没用过,你可以试试。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-09
    • 2011-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-05
    相关资源
    最近更新 更多