【问题标题】:JSTL dynamic remove tagJSTL 动态移除标签
【发布时间】:2018-02-02 09:26:11
【问题描述】:

我有一个 java Constant.java 文件,我在其中定义了这样的会话变量名称:

package com.pakageName;

public class Config {
    // name of sessions var
    public static final String ATT_SESSION_USER = "session_user";
    public static final String ATT_SESSION_MESSAGE = "session_message";
    ...
}

在 Servlet 文件中,我使用以下内容来定义会话变量:

session.setAttribute(Constant.ATT_SESSION_MESSAGE, "this is the content of the var I wan't to display on the page");

Constant.java 文件包含在我的 jsp 文件中,使用:

<%@ page import="com.pakageName.Config" %>

所以我可以通过以下方式获取 sessionScope var 的内容:

// get the content of the session var
${sessionScope[Constant.ATT_SESSION_MESSAGE]}
// which return the same result as
${sessionScope.session_message}

问题是,如何使用带有常量变量值的删除标签删除这些会话变量?

我尝试了以下但 var 属性不接受 el 表达式...

// throw exception because var attribute doesn't accept el
<c:remove var="${sessionScope[Constant.ATT_SESSION_MESSAGE]}" scope="session" />
<c:remove var="${Constant.ATT_SESSION_MESSAGE}" scope="session" />
// don't remove anything
<c:remove var="Constant.ATT_SESSION_MESSAGE" />
// work but the name is hard coded
<c:remove var="session_message" scope="session" />

有什么想法吗?

【问题讨论】:

  • 不应该只是:&lt;c:remove var="Constant.ATT_SESSION_MESSAGE" scope="session" /&gt;?
  • 否,因为这将尝试删除 Constant var 而不是名称为 Constant.ATT_SESSION_MESSAGE 内容的会话 var(该 var 称为“session_message”)
  • 对不起,你错了。删除常数?我不知道你在说什么。 tutorialspoint.com/jsp/jstl_core_remove_tag.htm
  • 我不想删除常量,常量允许我存储会话变量的名称。我想要的是删除名称是常量变量内容的会话变量。我已经编辑了帖子以解释更多

标签: jsp jstl el


【解决方案1】:

我所看到的问题是,您实际上并没有首先设置会话变量。你所做的只是调用一个公共变量。因此,当您认为您正在删除会话变量时,您实际上并没有做任何事情。这就是它持续存在的原因。

首先尝试实际设置会话变量:

session.setAttribute("user", Constant.ATT_SESSION_MESSAGE);

或使用 JSTL:

<c:set var="user" value="${Constant.ATT_SESSION_MESSAGE}" scope="session"  />

然后删除它:

<c:remove var="user"/>

【讨论】:

  • 我已经使用 session.setAttribute(Constant.ATT_SESSION_MESSAGE, "message sample"); 在 servlet 中设置了会话变量。然后我使用 ${sessionScope[Constant.ATT_SESSION_MESSAGE]} 在 jsp 页面中调用它,这就是为什么我不能使用删除标签,var 的名称是在另一个文件中定义的
  • 首先,当你设置一个会话变量时,引号在前!!其次,一旦你设置了一个会话变量,你就只能通过你在引号中写的内容来访问它。所以:“session.getAttribute(“messageSample”);”。变量中也不能有空格...
  • 我编辑了这篇文章,以进一步解释我尝试做的事情:messageSample 是我存储在名称为 session_message 的会话 var 中的 var 的内容:我使用会话访问 var。 getAttribute(Constant.ATT_SESSION_MESSAGE) 返回“messageSample”
【解决方案2】:

我已经找到了一种方法来实现我想要的 jsp scriptlet ...

<% session.removeAttribute(Config.ATT_SESSION_MESSAGE); %>

没有办法用jstl得到同样的结果吗?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-01-29
    • 1970-01-01
    • 2010-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-04
    • 2014-02-24
    相关资源
    最近更新 更多