在struts2 2.3.15.1版本中将jsp页面中的<c:if test="${empty pageFinder.data }"> <tr><td colspan=13 align="center” height="25"xfont color="red"没有查询到相关记录</f</c:if> <s:iterator value="%{pageFinder.data}" var="rehs” status="status"><s:set var="index”value="#status getIndex()"/> 这段代码中的<s:iterator value="%{pageFinder.data}"改为<s:iterator value="${pageFinder.data}"系统会报does not accept any expressions这个错误,是什么原因?
时间: 2023-11-27 11:05:42 浏览: 133
在Struts2中,当使用`${}`表达式时,它会被解析为OGNL表达式,而非JSP表达式。而在JSP页面中使用的`<c:if>`标签和`<s:iterator>`标签是JSTL标签和Struts2标签,它们并不支持OGNL表达式。因此,将`<s:iterator>`标签中的`%{}`改为`${}`会导致系统报错。正确的做法是保留`%{}`。
相关问题
在struts2 2.3.15.1版本的jsp文件中,如何将<s:iterator>标签中的%{}改为${},并且不会让系统报错
如前所述,当使用`${}`表达式时,它会被解析为OGNL表达式,而非JSP表达式。如果你想在`<s:iterator>`标签中使用`${}`表达式,你可以将`<s:iterator>`标签的`var`属性设置为一个临时变量,并在其中使用`${}`表达式。例如,如果原来的代码是这样的:
```
<s:iterator value="%{pageFinder.data}" var="rehs" status="status">
<s:set var="index" value="#status.getIndex()"/>
<!-- 其他代码 -->
</s:iterator>
```
你可以将其改为:
```
<s:iterator value="%{pageFinder.data}" var="temp">
<s:set var="rehs" value="${temp}"/>
<s:set var="index" value="#status.getIndex()"/>
<!-- 其他代码 -->
</s:iterator>
```
这样就可以在`<s:iterator>`标签中使用`${}`表达式了。需要注意的是,这样做可能会影响性能,因为每次迭代都需要将临时变量赋值给原来的变量。
struts2 2.3.15.1版本在struts.xml配置文件不去写<constant name="struts.enable.DynamicMethodInvocation" value="false"/>,默认是开启还是关闭的?
默认情况下,Struts2 2.3.15.1版本的`struts.xml`配置文件中的`<constant name="struts.enable.DynamicMethodInvocation" value=""/>`是空的,这意味着DMI模式是开启的。如果你没有在`struts.xml`文件中显式地设置`<constant name="struts.enable.DynamicMethodInvocation" value="false"/>`,则Struts2框架将默认启用DMI模式。
开启DMI模式可以使URL更加简洁,但这也会增加系统的安全性风险。建议在生产环境中关闭DMI模式,可以通过在`struts.xml`配置文件中设置`<constant name="struts.enable.DynamicMethodInvocation" value="false"/>`来关闭DMI模式,以提高系统的安全性。
阅读全文