2016-05-04 4 views
1

В распорок 2 проекта я получаю предупреждение OGNL, делая петлю, как это:Struts 2 ognl.SecurityMemberAccess предупреждение

<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 [[email protected]] or 
     package of member [public int javax.servlet.jsp.jstl.core.LoopTagSupport$1Status.getIndex()] are excluded! 

Может ли это решить ?!

+0

Можете ли вы объяснить, что вы пытаетесь достичь здесь? Почему бы просто не повторить «unitArray»? –

+0

Дорогой @AleksandrM, это всего лишь часть кодов, я могу разместить здесь полный код, если вы думаете, что это поможет. Но я хочу знать, почему '{# attr.unitArray [# attr.counter.index]}' генерирует предупреждение, и если его можно решить –

+2

В: Почему? A: Потому что 'javax' находится в' struts.excludedPackageNames'. Вы можете переписать свой код, чтобы получить значение в тегах jstl и передать его в ''. –

ответ

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> 

Или использовать противоположную манипуляцию, просто поместить действие в контексте страницы и использовать его свойства текста в <c:out>. Я не использовал этот подход, но вы можете попробовать.