【问题标题】:Passing variable from action class (Struts 2) to JSP将变量从动作类(Struts 2)传递到 JSP
【发布时间】:2015-04-03 13:58:25
【问题描述】:

使用的技术 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;
}

在action类的方法中(这个action类的方法会重定向到JSP。),我设置了这个随机变量值。

setRndmVar("rndmfdfkad");

我认为 var rndmVar 已添加到值堆栈中,并且可以使用 OGNL 访问。但这不起作用。

现在我将值放入操作类中的会话对象中。

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

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

<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")); %>

【问题讨论】:

  • 看看这个问题:stackoverflow.com/q/4479995/1700321.
  • 在您确认答案有效之前,您不应接受答案。
  • &lt;s:property value="rndmVar"/&gt;&lt;s:property value="#session['sessionKey' + rndmVar]"/&gt; 放到你的 jsp 中,看看它会打印什么。
  • 表示你的action中没有设置rndmVar
  • 请求参数与 S2 值堆栈不同。

标签: java jsp session struts2 ognl


【解决方案1】:

如果您的操作中有带有 getter/setter 的 rndmVar 字段,并且此页面是此特定操作的结果,那么您可以在 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 以获取有关管理多个选项卡的会话数据的提示。

【讨论】:

    【解决方案2】:

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

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

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

    例如,如果sessionKeyMap&lt;String, Object&gt; 并且它被放入#session,那么您可以使用随机值检查对象

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

    【讨论】:

    • ...请查看已编辑的部分,因为我无法澄清您的问题。
    • 你可以使用getter从动作中传递的键值,但你最好使用映射为sessionKey并使用键而不是随机会话变量来访问它。
    • s:property prints value is success 为什么没有收到你好消息
    猜你喜欢
    • 2013-12-07
    • 2014-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-04
    • 1970-01-01
    • 2013-06-11
    • 1970-01-01
    相关资源
    最近更新 更多