小编典典

防止getText()评估EL表达式

jsp

在Struts2后端,我有一个动作类实例变量,例如:keyName。返回到视图(JSP)的动态键。

keyName使用POST方法使用请求参数设置此变量。根据请求参数的值,keyName将有所不同。

在JSP中,我<s:property value="getText(keyName)" />用来显示与keyName变量给定的键相对应的标签。

例如${90-40},当我发送一个EL表达式时,keyName该表达式正在评估中,并在UI上显示50。

我们如何避免或防止这种EL注入getText()

还有其他替代方法<s:property value="getText(keyName)" />吗?


阅读 324

收藏
2020-06-10

共1个答案

小编典典

您可以创建自己的文本提供程序并将其注册在struts.xml

<constant name="struts.xworkTextProvider" value="com.struts.text.MyTextProvier"/>

现在创建一个MyTextProvier扩展TextProviderSupport和重写getText()方法的类。所有方法都将参数key作为String,您可以从中替换不需要的字符。然后致电super.getText()。例如

public String getText(String key) {
  return super.getText(key.replaceAll("[\\$\\{\\}]", ""));
}
2020-06-10