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日

相关文章

  • Spring整合JUnit详解

    Spring整合JUnit详解 在使用Spring框架开发Java应用时,常常需要进行单元测试。JUnit是Java中最常用的测试框架之一。本文将介绍如何在Spring应用中整合JUnit,以进行单元测试。 搭建测试环境 添加JUnit和Spring-test依赖 在pom.xml文件中添加以下依赖: <dependency> <group…

    Java 2023年5月19日
    00
  • JavaSpringBoot报错“ConflictException”的原因和处理方法

    原因 “ConflictException” 错误通常是以下原因引起的: 数据库冲突:如果您的数据库存在冲突,则可能会出现此错误。在这种情况下,需要检查您的数据库并确保它们正确。 代码逻辑问题:如果您的代码逻辑存在问题,则可能会出现此错误。在这种情况下,需要检查您的代码逻辑并确保它们正确。 并发问题:如果您的应用程序存在并发问题,则可能会出现此错误。在这种情…

    Java 2023年5月4日
    00
  • MyBatis的模糊查询mapper.xml的写法讲解

    以下是 “MyBatis的模糊查询mapper.xml的写法讲解” 的完整攻略: 概览 模糊查询是指根据某些条件进行筛选,能够在查询结果中包含与检索条件相似但不完全匹配的记录。在MySQL等关系型数据库的开发中,模糊查询是最常见也是非常重要的操作之一。 MyBatis是一种优秀的ORM(Object Relational Mapping)技术,它提供了通过m…

    Java 2023年5月20日
    00
  • SpringBoot+SpringSecurity+jwt实现验证

    下面我会提供一个基于Spring Boot、Spring Security 和 JSON Web Token(JWT)的认证示例。 一、什么是JWT JSON Web Token(JWT)是一个开放标准(RFC 7519),它定义了一种简单的、自包含的方式,用于在通过网络进行传输的两个实体之间安全传递信息。它被称为自包含是因为JWT包含了所有身份验证(Aut…

    Java 2023年5月20日
    00
  • SpringBoot 如何自定义请求参数校验

    根据您的需求,我会详细讲解 SpringBoot 如何自定义请求参数校验的完整攻略。 1. 简介 SpringBoot默认使用 Hibernate Validator 作为参数校验的实现库(底层实现其实是 JSR-303 Bean Validation 规范)。在进行参数校验时,我们通常会使用一组预定义好的注解,如:@NotNull、@Min、@Max、@S…

    Java 2023年5月20日
    00
  • Spring 配置文件XML头部文件模板实例详解

    讲解“Spring 配置文件XML头部文件模板实例详解”的完整攻略,包含以下内容: 标题 1. 介绍 本文将详细讲解Spring配置文件XML头部文件模板的实例用法,包括如何设置XML头部文件的信息,以及如何对XML文件进行约束和验证。 2. XML头部文件模板实例 一般情况下,在编写Spring的XML配置文件时,需要添加一个XML头部文件,包含XML声明…

    Java 2023年6月15日
    00
  • 性能优化包括哪些方面?

    以下是关于性能优化包括哪些方面的完整使用攻略: 性能优化包括哪些方面? 性能优化是指通过改进程序的设计、算法、数据结构、代码实现等方面,提高程序的运行效率和响应速度,减少资源占用和延迟等问题。性能优化包括以下几个方面: 1. 程序设计 程序设计是性能优化的重要方面之一。在程序设计阶段,需要考虑程序的整体架构、模块划分、接口设计等方面,从而保证程序的可扩展性、…

    Java 2023年5月12日
    00
  • JavaWeb Struts文件上传功能实现详解

    JavaWeb Struts文件上传功能实现详解 简介 本文将详细讲解如何在 JavaWeb Struts 框架中实现文件上传功能,其中包括前端页面的设计和后端逻辑的实现。 设计前端页面 前端页面是实现文件上传功能的基础。在这里,我们将使用HTML和JavaScript来设计一个简单的上传页面。 示例一:HTML 代码 <!DOCTYPE html&g…

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