Struts2 通过ognl表达式实现投影

下面是详细的讲解:

概述

Struts2 是一个优秀的 Java Web 应用框架,它的表单标签库可以很方便地实现表单的输入和输出。但有时候,我们也需要一些特殊的操作,比如使用投影(projection)来显示指定的数据,此时,ognl 表达式就可以派上用场了。

步骤

1. 配置Struts2引用ognl

struts.xml 文件中配置如下:

<struts>
  <!-- 配置ognl -->
  <constant name="struts.ognl.allowStaticMethodAccess" value="true"/>
  <constant name="struts.ognl.excludedClasses" value="java.lang.*"/>
  <!-- 其他配置 -->
  ...
</struts>

其中,allowStaticMethodAccess 设置为 true,可以允许使用静态方法;另外一个配置 excludedClasses 指定排除被操作的对象中 java.lang 包下的所有类。

2. 在Action中设置变量

在对应的 Action 中设置需要显示的变量,例如:

package com.example.action;

import com.opensymphony.xwork2.ActionSupport;

public class DemoAction extends ActionSupport {

  private String name = "Alice";

  public String execute() {
    return SUCCESS;
  }

  public String getName() {
    return name;
  }
}

其中,name 变量将在后面的投影中使用。

3. 在JSP页面中使用ognl表达式

在需要显示数据的位置,使用 ${variable.property} 或 %{expression}(%{expression} 包裹的表达式除了可以是一个对象的属性也可以是一个方法的返回值。)

例如,我们可以在 JSP 页面中使用以下的代码来显示 name 变量:

<p>${name}</p>

还可以使用 ognl 表达式实现该功能:

<p>%{#name}</p>

除此之外,我们还可以使用 ognl 表达式中的一些语法来进行投影操作,下面给出两个示例:

  1. 假设我们有一个字符串数组 names
private String[] names = {"Alice", "Bob", "Charlie", "Dave"};

我们可以使用 ognl 表达式 ${names.{? #this.length() == 3 }} 来投影出长度为 3 的字符串列表:

<p>${names}</p> <!-- 输出 ["Alice", "Bob", "Charlie", "Dave"] -->

<p>${names.{? #this.length() == 3 }}</p> <!-- 输出 ["Bob"] -->
  1. 假设我们有一个对象 user,其中包含一个数字列表 scores,我们可以使用 ognl 表达式 %{#user.scores.{^ #this < 60}} 来筛选出所有小于 60 分的成绩:
class User {
  private List<Integer> scores = Arrays.asList(78, 82, 59, 91);

  // getters and setters
}
<p>%{#user.scores}</p> <!-- 输出 [78, 82, 59, 91] -->

<p>%{#user.scores.{^ #this < 60}}</p> <!-- 输出 [59] -->

总结

通过以上步骤,我们可以使用 ognl 表达式来实现 Struts2 中的投影操作,使得我们可以更加灵活地处理表单数据。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Struts2 通过ognl表达式实现投影 - Python技术站

(0)
上一篇 2023年5月20日
下一篇 2023年5月20日

相关文章

  • 学习javaweb如何配置Tomcat的热启动

    学习 JavaWeb 开发的第一步必须掌握如何配置 Tomcat 的热部署,这样对我们的开发有非常大的帮助。以下是配置 Tomcat 热部署的完整攻略: 1. 下载安装 Tomcat 首先,你需要到官网(https://tomcat.apache.org/)下载 Tomcat 的最新安装包,然后按照官方指南进行安装。这里以 Tomcat 9 版本为例。 2.…

    Java 2023年6月2日
    00
  • 一文带你搞懂Java中的递归

    一文带你搞懂Java中的递归 什么是递归 递归是一种解决问题的方法,它通过将问题分解成更小的子问题,并通过调用自身来解决它们。在编程中,递归允许您使用相同的代码来处理不同的输入,这使得代码更加简洁和更容易理解。 Java中的递归 在Java中,递归的实现非常简单。通常,递归函数有两个部分:基本情况和递归情况。基本情况通常是递归函数停止递归的条件,好比说输入参…

    Java 2023年5月19日
    00
  • Android拍照上传功能示例代码

    下面给出详细的“Android拍照上传功能示例代码”的完整攻略,包含两条示例代码。 概述 在移动App开发中,上传图片是常见的需求之一,而且常常需要支持拍照上传功能。本篇攻略将介绍如何在Android App开发中,实现拍照上传功能。 实现步骤 步骤一:添加权限 首先在AndroidManifest.xml文件中添加以下权限: <uses-permis…

    Java 2023年5月20日
    00
  • 深入了解Java8中的时区日期时间

    关于“深入了解Java8中的时区日期时间”的攻略,我将从以下几个方面进行详细讲解: 时区概念介绍 Java8中的时区 日期时间的表示和操作 时区转换和格式化 时区概念介绍 时区是一个地球上的地区,为方便起见,划分为24个标准时区,每个时区以相对于格林威治标准时间的小时数进行标记。时区与地球上的经度有密切关系,通常是基于一个参考点来描述小时数。例如,北京的时区…

    Java 2023年5月20日
    00
  • Spring Boot 与 kotlin 使用Thymeleaf模板引擎渲染web视图的方法

    首先,在使用Thymeleaf模板引擎前,我们需要在Spring Boot应用程序中添加Thymeleaf依赖,可以在pom.xml文件中添加以下依赖: <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boo…

    Java 2023年6月15日
    00
  • Spring Kafka中如何通过参数配置解决超时问题详解

    在Spring Kafka中,可能会遇到生产和消费消息时出现超时问题。这个问题可以通过参数配置来解决。下面将详细讲解如何解决超时问题,包括两个示例说明。 1. 生产者超时问题解决 首先,我们需要了解一下生产者超时问题的原因。当生产者在发送消息的时候,如果发送的记录没有被成功写入Kafka,那么会触发重试机制,即生产者会不断重试,知道写入成功或重试次数达到最大…

    Java 2023年6月2日
    00
  • SpringMVC RESTful支持实现过程演示

    SpringMVC RESTful是一种基于HTTP协议进行通信的WebService框架,它可以帮助开发者快速构建符合RESTful风格的Web应用程序。下面我们将详细讲解如何在SpringMVC中实现RESTful支持,并附带两个示例说明。 实现过程 1. 配置SpringMVC 首先,我们需要在web.xml中配置DispatcherServlet,以…

    Java 2023年5月16日
    00
  • 七个Spring核心模块详解

    下面是关于“七个Spring核心模块详解”的完整攻略,包含两个示例说明。 七个Spring核心模块详解 Spring框架是一个开源的JavaEE应用程序框架,它提供了一系列的核心模块,用于简化企业级应用程序的开发。下面我们将详细介绍Spring框架的七个核心模块。 1. Spring Core Spring Core是Spring框架的核心模块,它提供了Io…

    Java 2023年5月17日
    00
合作推广
合作推广
分享本页
返回顶部