在OGNL Struts 2中调用单例方法

时间:2014-05-01 19:39:11

标签: java jsp struts2 singleton ognl

我需要访问singleton类的方法来获取参数

Java代码调用的原型是:

SosConstant.getInstance().getParameter("type");

我有一组修改视图的参数,所以我需要直接从JSP访问这些数据

我该怎么写

<s:parameter value="...

<s:if test="..

使用这些数据?

2 个答案:

答案 0 :(得分:1)

我解决了添加

<constant name="struts.ognl.allowStaticMethodAccess" value="true"/> 
经过大量搜索后,我的struts.xml。 我认为这些常数没有很好的记录。我在哪里可以在apache struts网站上找到它们?

答案 1 :(得分:0)

您可以通过设置action属性并提供getter方法来完成此操作。

private Object type; 

public Object getType(){
  return type;
}

在动作或其他初始化方法中

type = SosConstant.getInstance().getParameter("type"); 

然后在JSP中你可以像往常一样访问它

<s:property value="type"/>

<s:if test="type == 'some type'">
...
</s:if> 

OGNL具有允许调用静态方法的语法,但出于安全原因禁止使用,因此默认情况下此设置处于关闭状态。要获取任何对象的实例,您需要创建该对象(在您的情况下不可能)或使用另一个返回实例的对象。操作对象实例最适合此目的。您只需创建一个返回对象实例的方法(在您的情况下为单例)。

public SosConstant getSosConstant(){
  return SosConstant.getInstance();
}

然后你可以在JSP中使用它

<s:property value="sosConstant.getParameter('type')"/>

<s:if test="sosConstant.getParameter('type') == 'some type'">
...
</s:if> 

只需迈出一步,但在OGNL中也是如此。