当使用struts2的我可以访问我的会议Struts2的标签里面的属性使用OGNL表达这样的:Struts2的:避免硬编码在Struts标签,JSP
#session['object_key']
的问题是,我用不同的页面,每到这个表达式实时硬编码'object_key'字符串。有什么方法可以使用任何类型的命名常量,以便我可以轻松地更改用于将对象存储在会话映射中的密钥?
当使用struts2的我可以访问我的会议Struts2的标签里面的属性使用OGNL表达这样的:Struts2的:避免硬编码在Struts标签,JSP
#session['object_key']
的问题是,我用不同的页面,每到这个表达式实时硬编码'object_key'字符串。有什么方法可以使用任何类型的命名常量,以便我可以轻松地更改用于将对象存储在会话映射中的密钥?
当然,使用一个静态常量;有几种方法可以解决这个问题。
默认,访问使用完全合格的名称:
<s:property value="#session[@[email protected]_KEY]" />
有关详细信息,请参阅Accessing static properties在OGNL Basics页。
另一个诀窍是设置一个拦截器,它将常量类推到值栈上,并带有常量 - “看上去”的getter。你也可以在动作中做同样的事情,例如,可以使用基本动作类。
然后所有需要的JSP是这样的:
${session[OBJECT_KEY]}
谢谢,戴夫。你怎么看待创建单独的jsp文件的想法,其中所有需要的常量被放入struts2变量中,如下所示:''然后包含这个jsp并使用你的第二个例子的语法,但不会搞乱拦截器栈? –
错误的代码示例在那里,必须是's:set name =“SESSION_NAME”value =“@ [email protected]_KEY”/>' –
@pavel_kazlou我认为创建一个JSP来做这是浪费时间, ,与更合理的解决方案相比,这是不必要的工作。 –
你的意思是说你的声明动作类中的静态常量?你可以声明一个方法,并可以在该方法内设置值,只需尝试一下@ vs @ someMethod(),其中vs指向值栈 –
@umesh我正在寻找有助于避免硬编码密钥的解决方案。如果你有一个,请发表一个答案。 –
看到Dave的答案即将写出相同的:) –