1

除了声明静态变量之外,JSP 中还有什么方法可以声明<%! int like=0;%>?自定义标签中是否有任何标签可以在 JSP 页面上声明静态变量?

如果不是,并且如果我以这种方式声明我的静态整数变量'like' <%! int like=0;%>,有没有什么方法可以使用 EL 来获取这个变量值${like}?我想在我的JQuery函数中使用这个值,并且我知道我可以使用 获得这个值<%=like>,但我需要其他方式。

4

4 回答 4

3

不是静态的,但您可以使用JSTL 声明应用程序范围的变量<c:set>

<c:set var="like" value="0" scope="application" />

您可以通过简单地让 JSP 将其打印为 JS 变量来在您的 JS/jQuery 代码中获取它。

<script>
    var like = ${like};
</script>
于 2013-02-26T14:42:33.280 回答
2

如果你想在服务器端声明一个可以在客户端(浏览器)上使用的变量,你可以在你的 web.xml 中声明一个 Servlet 上下文参数:

<web-app>
  <context-param>
    <param-name>yourParamName</param-name>
    <param-value>yourParamValue</param-value>
  </context-param>
  ...
</web-app>

表达式语言有一个隐式对象initParam,您可以在其中访问 JSP 上的 Servlet 上下文参数:

${initParam.yourParamName}
于 2013-02-26T11:33:27.730 回答
1

在 JSP 中使用${staticVar.ClassName_staticPropertyName} 在上下文初始化期间执行以下操作:

servletContext.setAttribute("staticVar", new AbstractMap&lt;String,Object>() {
    @Override
    public Set&lt;Map.Entry<String, Object>> entrySet() {
        throw new UnsupportedOperationException();
    }
    @Override
    public String get(Object key) {
        return methodToGetStaticVariableUsingReflection(key)
    }
}
于 2017-07-08T07:29:02.807 回答
0

使用 EL 访问静态变量是不可能的。如果您将静态变量声明为

<%!
        public static int a=343;        
       %>

因此,您必须将变量声明为<c:set var="a" value="${'hello'}" ></c:set>使用EL,然后只有您才能使用EL<c:out value="${a}"></c:out>获得 value( ) 。

您需要将其声明为实例变量,因为仅存在一个 jsp 页面(servlet)副本,并且 _jspService 方法为每个请求调用,因此相同的实例变量可用于所有用户(_jspService 方法)。这意味着,不会为每个请求创建新的 servlet 实例。参考jsp 生命周期

于 2013-02-26T11:22:56.087 回答