【问题标题】:How to call java constant variables from jsp expression language in Spring?java - 如何在Spring中从jsp表达式语言调用java常量变量?
【发布时间】:2015-08-12 01:48:11
【问题描述】:

我花了一天时间寻找正确的解决方案,但没有运气! 问题是如何使用 el ${bean.objectName} 从 jsp 调用 java 常量变量。最佳做法是什么?

我想知道这是否可行,我对 Spring 和 jsp 很陌生。

常量类:

public class RNConstant {
     public static final String HELLO_WORLD = "Hello World again!";
     public static final String DEFAULT_LOCALE = "id_ID";
     public static final String CONTEXT_PATH_SOAP_SR = "soap.sr";
}

jsp 中期望用 EL 调用

 <p>${RNConstant.HELLO_WORLD}</p>

我可以使用下面的 scriptlet 来执行此操作,但如果它在 weblogic 中运行,我无法使其工作。这适用于 apache tomcat v7 或 v8

<%@ page import="static id.co.telkom.common.RNConstant.*" %>
 ...
 ...
<%= HELLO_WORLD %>

weblogic 中的错误

home.jsp:2:18: Syntax error on token "static", Identifier expected after this token
<%@ page import="static id.co.telkom.common.RNConstant.*" %>
             ^-------------------------------------^
home.jsp:11:19: HELLO_WORLD cannot be resolved
Hello world!  <%=HELLO_WORLD%>
                     ^--------^

java 版本:1.6

pom.xml

 spring
 <version>1.0.0-BUILD-SNAPSHOT</version>
 <properties>
    <java-version>1.6</java-version>
    <org.springframework-version>3.2.8.RELEASE</org.springframework-version>
    <org.springjs-version>2.0.5.RELEASE</org.springjs-version>
    <org.springws-version>2.2.1.RELEASE</org.springws-version>
    <org.springsecurity-version>3.2.3.RELEASE</org.springsecurity-version>
    <jackson-version>1.9.10</jackson-version>
    <org.aspectj-version>1.6.10</org.aspectj-version>
    <org.slf4j-version>1.6.6</org.slf4j-version>
 </properties>

以下代码解决了Scriplet问题,RNConstant的内容还是一样的。

<%@ page import="id.co.telkom.common.RNConstant" %>
...
...
<%= RNConstant.HELLO_WORLD %>

干杯,

亨德利

【问题讨论】:

  • 我很困惑,你不能使用 model.addAttribute("nameuwishinjsp",nameofvariableinjava); .我错了吗?
  • @WeareBorg 是的,我们可以这样做,但是,我试图实现的是创建一个可以从 .jsp 文件直接全局调用的常量类

标签: java jsp spring-mvc weblogic scriptlet


【解决方案1】:

保持导入语句简单

<%@ page import="static id.co.telkom.common.RNConstant.*" %>

删除RNConstant 之后的“.*”。还要删除开头的静态词。

<%@ page import="id.co.telkom.common.RNConstant" %>. 

调用 HELLO_WORLD 常量使用

<p>${RNConstant.HELLO_WORLD}</p> <p>${RNConstant.HELLO_WORLD}</p>

【讨论】:

  • @JordiCastilla 已编辑,应该使用 scriplet 标签来调用常量类而不是 EL。
  • @AdrianusHendry 您的问题是如何使用表达式语言引用常量。给出的答案解决了不同的问题,因此不应被接受为答案。
【解决方案2】:

jsp 中期望用 EL 调用

<p>${RNConstant.HELLO_WORLD}</p>

EL 检查 bean 并将 HELLOWORLD 转换为 getHELLOWORLD(),因为规范说必须以这种方式访问​​属性,因此您必须创建 getter 否则常量的可见性将在 jsp 视图中受到限制:

public class RNConstant 
{    
    public final static String HELLO_WORLD = "Hello World again!";

    public static String getHELLO_WORLD() {
        return HELLO_WORLD;
    }   
}

如果您无法创建 getter,请检查 this answer

【讨论】:

  • 嗨,但是脚本在 apache tomcat v8 服务器中工作。我无法得到那个吸气剂会是原因
  • 保持导入语句简单。删除 RNConstant 后的“.*”,并删除开头的静态词。要调用 HELLO_WORLD 常量,请使用

    ${RNConstant.HELLO_WORLD}

    ${RNConstant.HELLO_WORLD}

  • @gujralam 嗨,这并不能解决问题。错误消失了,但价值没有出现。 weblogic 服务器日志上没有错误消息
  • @gujralam 这应该作为答案发布
  • @gujralam 嗨,谢谢,它现在可以工作了,它必须使用 scriplet 标记以及 你应该把它写成答案。
猜你喜欢
  • 2014-03-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-08
相关资源
最近更新 更多