将变量从动作类(struts2)传递给JSP

时间:2015-02-04 06:20:33

标签: java jsp session struts2 ognl

技术使用Struts2和JSP 在Jsp中,我正在检查我的会话值是否已设置。

<s:if test="%{#session.sessionKey}">

现在我的Action类中有另一个随机变量rndmVar(我无法在会话范围内设置此变量。),现在我的会话密钥将sessionKey变量附加rndmVar值,那么如何在JSP中检查这个新的会话密钥。

我想要像

这样的东西
<s:if test="%{#session.sessionKey+rndmVar}">  //session key appended by rndmVar value.

第一个问题如何将此变量从操作类传递给JSP,以及如何在jsp中检查它。

我试过像

这样的东西
public String rndmVar;
public String getRndmVar() {
  return rndmVar;
}
public void setRndmVar(String rndmVar) {
  this.lang = lang;
}

比动作类的方法(这个动作类的方法将重定向到JSP。),我设置了这个随机变量值。

setRndmVar("rndmfdfkad");

我认为var rndmVar已添加到值堆栈中,可以使用OGNL进行访问。但这没有用。

请发表您的意见,非常感谢您的帮助。更清楚,我对这个问题缺乏想法,即使这听起来像是经典之作:我花了好几个小时试图玩弄这个但是无处可去。

现在我将动作类中的会话对象中的值设置为。

String randomVar="fadfjk";
String newSessionKey="sessionKey"+randomVar;
session.put(newSessionKey,"value_part");

现在在Jsp中我想检查是否设置了newSessionKey变量。现在我如何将动态键值传递给JSP。

@Aleksandr M ......

<s:if test="#session['sessionKey' + rndmVar] != null">

上面的语法不起作用,实际上它总是给出null并进入else循环。

在我的动作类中

session.put("sessionKey"+rndmVar,"businessList"); //where businessList is ArrayList<BusinessLogicDTO> businessList

我能够在jsp中的scriplet标签中看到rndmVar值。

<% System.out.println(" Random var value passed from action class 2 JSP "+request.getParameter("rndmVar")); %>

2 个答案:

答案 0 :(得分:2)

如果您的操作中有rndmVar字段包含getter / setter,并且此页面是此特定操作的结果,那么您可以在JSP中访问此变量。

<s:property value="rndmVar"/>

要从会话中获取所需的值,请使用以下命令:

<s:if test="#session['sessionKey' + rndmVar] != null">

要从请求参数中获取rndmVar值,请使用以下命令:

<s:if test="#session['sessionKey'+ #parameters['rndmVar'][0]]">

注意#parameters['some_key']将返回字符串数组,因为它可以是请求中带有some_key的多个参数。因此,如果您想要此数组中的第一个参数,则需要使用[0]来获取它。

同时检查this question以获取有关管理多个标签的会话数据的提示。

答案 1 :(得分:1)

除非值为Boolean,否则您无法检查值是否设置为此值。相反,如果未设置该值,则必须包含null。然后你可以像这样检查

<s:if test="#session.sessionKey != null">

随机值可以用作sessionKey定义的集合的索引。

例如,如果sessionKeyMap<String, Object>并将其放入#session,那么您可以使用随机值检查对象

<s:if test="#session.sessionKey[rndmVar] != null">