相关疑难解决方法(0)

使用EL和JSTL访问枚举值

我有一个名为Status的枚举定义如下:

public enum Status { 

    VALID("valid"), OLD("old");

    private final String val;

    Status(String val) {
        this.val = val;
    }

    public String getStatus() {
        return val;
    }

}
Run Code Online (Sandbox Code Playgroud)

我想VALID从JSTL标签访问值.特别test<c:when>标签的属性.例如

<c:when test="${dp.status eq Status.VALID">
Run Code Online (Sandbox Code Playgroud)

我不确定这是否可行.

java jsp jstl java-ee

103
推荐指数
6
解决办法
11万
查看次数

访问JSP中的常量(没有scriptlet)

我有一个类定义各种会话属性的名称,例如

class Constants {
    public static final String ATTR_CURRENT_USER = "current.user";
}
Run Code Online (Sandbox Code Playgroud)

我想在JSP中使用这些常量来测试这些属性的存在,例如:

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page import="com.example.Constants" %>

<c:if test="${sessionScope[Constants.ATTR_CURRENT_USER] eq null}">
    <%-- Do somthing --%>
</c:if>
Run Code Online (Sandbox Code Playgroud)

但我似乎无法使sytax正确.另外,为了避免在多个地方重复上面相当冗长的测试,我想将结果分配给本地(页面范围)变量,并改为引用它.我相信我可以这样做<c:set>,但我再次努力找到正确的语法.

更新:继续下面的建议,我试过:

<c:set var="nullUser" scope="session"
value="${sessionScope[Constants.ATTR_CURRENT_USER] eq null}" />
Run Code Online (Sandbox Code Playgroud)

这没用.所以相反,我尝试替换常量的字面值.我还将常量添加到页面的内容中,因此我可以在呈现页面时验证常量的值

<c:set var="nullUser" scope="session"
value="${sessionScope['current.user'] eq null}" />
<%= "Constant value: " + WebHelper.ATTR_CURRENT_PARTNER %>
Run Code Online (Sandbox Code Playgroud)

这工作正常,它在页面上打印了期望值"current.user".我无法解释为什么使用String文字工作,但是当两个看起来具有相同的值时,对常量的引用不会.救命.....

java session jsp jstl

26
推荐指数
2
解决办法
7万
查看次数

JSF 2:在呈现的属性中使用枚举

有没有办法以声明方式检查枚举是否具有指定值.例如:

<h:graphicImage name="error.png" library="images" 
  rendered="#{viewController.current.status == Status.ERROR}" />
Run Code Online (Sandbox Code Playgroud)

在托管beand中定义一个方法来检查每个枚举值,例如,有点单调乏味

public boolean isStateIsError() {
  return current.getStatus() == Status.ERROR;
}
Run Code Online (Sandbox Code Playgroud)

这样做有更短/更好的方法吗?

jsf enums el jsf-2

19
推荐指数
2
解决办法
2万
查看次数

JSP中的Java常量

我有一个类定义各种常量的名称,例如

class Constants {
    public static final String ATTR_CURRENT_USER = "current.user";
}
Run Code Online (Sandbox Code Playgroud)

我想在JSP中使用这些常量而不使用Scriptlet代码,例如:

<%@ page import="com.example.Constants" %>
<%= Constants.ATTR_CURRENT_USER %>
Run Code Online (Sandbox Code Playgroud)

Apache unstandard taglib中似乎有一个标记提供此功能.但是,我找不到任何方法来下载这个taglib.我开始怀疑它是否已被弃用且功能是否已移至另一个(Apache)标记库?

有谁知道我可以在哪里获得这个库,或者如果它不可用,如果还有其他方法我可以在不使用scriptlet代码的情况下访问JSP中的常量?

干杯,唐

java jsp jsp-tags constants

18
推荐指数
1
解决办法
4万
查看次数

枚举在JSP中

有没有办法在不使用scriptlet的情况下在JSP中使用Enum值.

例如

package com.example;

public enum Direction {
    ASC,
    DESC
}
Run Code Online (Sandbox Code Playgroud)

所以在JSP中我想做这样的事情

<c:if test="${foo.direction ==<% com.example.Direction.ASC %>}">...
Run Code Online (Sandbox Code Playgroud)

java jsp jstl

15
推荐指数
2
解决办法
4万
查看次数

在JSP EL枚举值中始终为空

当试图让EL条件工作时,我发现枚举值完全被忽略了.这在我看来与规范相反.

<c:out value='${com.foobar.data.BookingStatus.FAILED}' />
<c:out value='${BookingStatus.FAILED}' />
<c:out value='${com.foobar.data.BookingStatus.failed}' />
<c:out value='${BookingStatus.failed}' />
<c:if test="${empty BookingStatus.FAILED }">empty</c:if>
Run Code Online (Sandbox Code Playgroud)

令我惊讶的是,这些都评估为.为什么Enum类不被识别?这发生在当前稳定的Tomcat实例中.

这可能是类路径问题吗?Enum在控制器代码中成功使用,但在JSP中没有其他地方使用.它在部署的lib目录中的jar中提供.

更新:

我的目的是将提供的Integer与Enum的属性进行比较,如下所示:

<c:when test='${bookingInformation.bookingStatus eq BookingStatus.FAILED.code}'>
    FOOBARFAIL
</c:when>
Run Code Online (Sandbox Code Playgroud)

不幸的是,被检查的值无法更改,并且仍将是整数.Enum看起来如下(简化):

public enum BookingStatus {

    COMPLETED(0), FAILED(1);

    private final int code;

    private BookingStatus(int code) {
        this.code = code;
    }

    public int getCode() {
        return code;
    }

}
Run Code Online (Sandbox Code Playgroud)

我想避免硬编码FAIL等的Integer值,而是使用enum代替比较.

java enums jsp jstl el

8
推荐指数
2
解决办法
1万
查看次数

在JSF中有一个"常量"类

我正在使用JSF/Primefaces构建一个Web应用程序.我需要一个"常量"类,即一个由常量组成的类.这些常量主要是将在整个应用程序中使用的导航命令.我这样做的原因是为了避免在ad-hoc基础上实例化字符串.

我如何实现这一点,使得可以从支持bean和XHTML文件访问常量?

我尝试过使用@ApplicationScoped和使用Singleton模式(Singleton类),但由于范围问题,我无法使用它.

或许我只是使用错误的方法.欢迎任何想法/建议.

java jsf constants el primefaces

8
推荐指数
1
解决办法
1万
查看次数

通过EL 3.0访问JSP中的静态属性或方法(JEE7; Tomcat 8)

我正在使用tomcat 8.0.9(servlet 3.1,jsp 2.3,el 3.0)并尝试从jsp页面访问静态属性,如下所示:

${Boolean.TRUE}
Run Code Online (Sandbox Code Playgroud)

没有错误,但渲染结果中没有输出.我究竟做错了什么?

编辑

这个问题的答案(标记为重复问题)声称,自从EL 3.0(JSR-341,Java EE 7的一部分)以来,可以引用所有java.lang.*类的常量,因为它们是隐式导入的,并且可以像所以

${Boolean.TRUE} 
Run Code Online (Sandbox Code Playgroud)

这个答案对我不起作用,至少不适用于tomcat 8.

编辑2

来自Oracle的JEE7教程(9.3.1.2引用对象属性或集合元素)

您可以使用语法classname.field引用静态字段或方法,如下例所示:

Boolean.FALSE

classname是没有包名的类的名称.默认情况下,将导入所有java.lang包.您可以根据需要导入其他包,类和静态字段.

java jsp tomcat jspell tomcat8

3
推荐指数
1
解决办法
2205
查看次数

EL:如何打印静态变量?

我有以下JSP页面:

<%@taglib uri="http://java.sun.com/jstl/core" prefix="c"%>
test #1: value of PI is <c:out value="${java.lang.Math.PI}" />.
test #2: value of PI is ${java.lang.Math.PI}.
test #3: value of PI is <%= java.lang.Math.PI %>.
Run Code Online (Sandbox Code Playgroud)

不知何故,只有测试#3有输出.为什么EL不打印出静态变量的值?

java jsp el

2
推荐指数
1
解决办法
6667
查看次数

如何使用EL 3.0引用静态变量?

我试图在我的JSF页面中获取一个静态变量.

我按照这篇文章的说明.我可以使用Primefaces扩展来获取变量,但是,在执行以下操作时,我没有在xhtml中获得任何内容.

我有一个常量文件:

public class Test {
    public static final String NAME = "EL Test";
}
Run Code Online (Sandbox Code Playgroud)

在balusC的帖子之后,我添加了一个应用程序范围的bean(但是,每次请求都会调用它):

import java.lang.reflect.Field;
import javax.annotation.PostConstruct;
import javax.el.ELContextEvent;
import javax.el.ELContextListener;
import javax.faces.bean.ApplicationScoped;
import javax.faces.bean.ManagedBean;
import javax.faces.context.FacesContext;

@ManagedBean(eager = true)
@ApplicationScoped
public class Config {
    @PostConstruct
    public void init() {
        FacesContext.getCurrentInstance().getApplication().addELContextListener(new ELContextListener() {
            @Override
            public void contextCreated(ELContextEvent event) {
                event.getELContext().getImportHandler().importClass("my.package.constants.Test");
                Class<?> clazz = event.getELContext().getImportHandler().resolveClass("Test");
                for (Field field : clazz.getFields()) {
                    System.out.println(field.getName());
                }
                System.out.println("clazz = " + clazz);
                System.out.println(clazz.getPackage());
            }
        });
    }
} …
Run Code Online (Sandbox Code Playgroud)

java el primefaces jsf-2 tomcat8

1
推荐指数
3
解决办法
5962
查看次数

标签 统计

java ×9

jsp ×7

el ×5

jstl ×4

constants ×2

enums ×2

jsf ×2

jsf-2 ×2

primefaces ×2

tomcat8 ×2

java-ee ×1

jsp-tags ×1

jspell ×1

session ×1

tomcat ×1