如何使用OGNL检查图像文件是否存在?

问题描述 投票:0回答:2

我正在创建一个 JSP 页面并使用 OGNL。我想检查目录中是否存在图像文件,然后显示它,否则显示空白图像。有什么办法可以做到吗?

java image jsp struts2 ognl
2个回答
0
投票

在 JSP 中,您可以在

s:if
标记中创建 OGNL 表达式,并调用返回
boolean
的操作方法。 例如

<s:if test="%{isMyFileExists()}">
  <%-- Show the image --%>
</s:if>
<s:else>
  <%-- Show blank image --%>
</s:else>

在行动中

public class MyAction extends ActionSupport {

  private File file;
  //getter and setter here


  public boolean isMyFileExists throws Exception {
    if (file == null) 
      throw new IllegalStateException("Property file is null");       
    return file.exists();
  }
}

或者如果添加公共 getter 和 setter 则直接使用

file
属性

<s:if test="%{file.exists()}">
  <%-- Show the image --%>
</s:if>
<s:else>
  <%-- Show blank image --%>
</s:else>

0
投票

可以通过多种方式实现,但是您应该在 Action 中执行此类业务,并仅从 JSP 中读取 boolean 结果。或者至少将 File 声明为 Action 属性,通过 Getter 公开它并调用 OGNL 中的

.exist()
方法:

在行动

private File myFile
// Getter

在 JSP 中

<s:if test="myFile.exists()">

仅供记录,其他可能的方式(不用于此目的,只是为了更好地探索 OGNL 功能):

  1. 从 OGNL 调用静态方法(您需要在

    struts.ognl.allowStaticMethodAccess
    中将
    true
    设置为
    struts.xml

    <s:if test="@my.package.myUtilClass@doesThisfileExist()" />
    

    在 myUtilClass 中

    public static boolean doesThisFileExist(){
        return new File("someFile.jpg").exists();
    }
    
  2. 或带参数

    <s:if test="@my.package.myUtilClass@doesThisFileExist('someFile.jpg')" />
    

    在 myUtilClass 中

    public static boolean doesThisFileExist(String fileName){
        return new File(fileName).exists();
    }
    
  3. 或者直接在OGNL中实例化它

    <s:if test="new java.io.File('someFile.jpg').exists()" />
    
© www.soinside.com 2019 - 2024. All rights reserved.