У меня есть страница .jsp, что делает следующую проверку, чтобы увидеть, если он должен отображать сообщение об ошибке:Распорка параметров не доступны в <s:if> теге
<s:if test="#parameters.error == 1">
<ul><li>
<s:text name="login.error"/>
</li></ul>
</s:if>
Параметр ошибки происходит от параметра запроса (т.е./MYPAGE .action? ошибки = 1).
Я отлаживал страницу jsp в методе org.apache.struts2.views.jspComponentTagSupport.doStartTag(), и оттуда я могу получить доступ к ValueStack и увидеть, что объект HttpParameters содержит параметр «ошибка», который Я могу получить доступ через:
stack.getContext().get("parameters")).get("error")).getValue();
Это возвращает строку со значением 1
, как ожидалось.
Однако, отлаживая код далее, кажется, что он неправильно оценивает атрибут теста тега <s:if>
.
Метод ognl.ASTEq.getValueBody(OgnlContext, Object)
пытается получить значение «детей» анализируемого тестового запроса.
Он заканчивается в методе ognl.OgnlRuntime.getFieldValue(OgnlContext, Object, String, boolean)
, который возвращает результат NotFound
, хотя HttpParameters содержит значение, которое он ищет ("error"
).
Кажется, что это ошибка в struts/ognl для того, как она анализирует параметры в стеке значений, но я не уверен.
Я использую Struts 2.5.5. Недавно был обновлен от Struts 2.3.x, и этот код отлично работал с этой версией, так что либо это ошибка, либо что-то изменилось в том, как эти свойства доступны, о которых я не знаю.
Если ошибка сохраняется в запросе на задней панели, то на jsp вы можете получить к ней доступ с помощью «# request.error» примерно так. – Will
Это также может помочь http://stackoverflow.com/questions/40327981/struts-upgrade-to-2-5-5-from-2-5-3 –
@AlirezaFattahi И его следует открыть. –