2011-11-25 47 views
0

当使用struts2的我可以访问我的会议Struts2的标签里面的属性使用OGNL表达这样的:Struts2的:避免硬编码在Struts标签,JSP

#session['object_key'] 

的问题是,我用不同的页面,每到这个表达式实时硬编码'object_key'字符串。有什么方法可以使用任何类型的命名常量,以便我可以轻松地更改用于将对象存储在会话映射中的密钥?

+0

你的意思是说你的声明动作类中的静态常量?你可以声明一个方法,并可以在该方法内设置值,只需尝试一下@ vs @ someMethod(),其中vs指向值栈 –

+0

@umesh我正在寻找有助于避免硬编码密钥的解决方案。如果你有一个,请发表一个答案。 –

+2

看到Dave的答案即将写出相同的:) –

回答

3

当然,使用一个静态常量;有几种方法可以解决这个问题。

默认,访问使用完全合格的名称:

<s:property value="#session[@[email protected]_KEY]" /> 

有关详细信息,请参阅Accessing static propertiesOGNL Basics页。

另一个诀窍是设置一个拦截器,它将常量类推到值栈上,并带有常量 - “看上去”的getter。你也可以在动作中做同样的事情,例如,可以使用基本动作类。

然后所有需要的JSP是这样的:

${session[OBJECT_KEY]} 
+0

谢谢,戴夫。你怎么看待创建单独的jsp文件的想法,其中所有需要的常量被放入struts2变量中,如下所示:''然后包含这个jsp并使用你的第二个例子的语法,但不会搞乱拦截器栈? –

+0

错误的代码示例在那里,必须是's:set name =“SESSION_NAME”value =“@ [email protected]_KEY”/>' –

+0

@pavel_kazlou我认为创建一个JSP来做这是浪费时间, ,与更合理的解决方案相比,这是不必要的工作。 –