
在jdeveloper开发企业级应用时,我们经常会遇到需要从web服务获取数据并在用户界面(如adf表)中展示的情况。然而,有时web服务数据控件可能不提供像“命名条件(named criteria)”这样的内置过滤机制,导致直接在jdeveloper设计时进行数据过滤变得困难。在这种情况下,我们需要采用其他策略来实现所需的数据过滤功能。
最推荐且通常最有效的方法是让Web服务本身返回已经过过滤或排序的数据。这意味着数据过滤的逻辑将由Web服务的提供方在服务器端实现。
Web服务接口被设计为接受过滤或排序参数。当客户端调用Web服务时,会传递这些参数,Web服务在执行数据查询时根据这些参数进行过滤,然后只将符合条件的数据返回给客户端。
如果无法修改Web服务(例如,Web服务由第三方提供),或者过滤逻辑非常简单且数据量不大,我们可以在客户端获取所有原始数据,然后使用POJO(Plain Old Java Object)模型进行编程过滤。
客户端首先通过Web服务获取所有未过滤的原始数据。然后,这些数据被映射到Java POJO对象集合中。接着,在客户端的Java代码中遍历这个POJO集合,根据预设的过滤条件进行筛选,生成一个新的、已过滤的数据集合,最终将这个集合绑定到JDeveloper的UI组件上。
调用Web服务获取原始数据:
数据转换(如果需要):
实现过滤逻辑:
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors; // Java 8+
// 假设这是从Web服务获取的数据对应的POJO类
public class Product {
private String id;
private String name;
private String category;
private double price;
// 构造函数, getters和setters...
public Product(String id, String name, String category, double price) {
this.id = id;
this.name = name; name = name;
this.category = category;
this.price = price;
}
public String getId() { return id; }
public String getName() { return name; }
public String getCategory() { return category; }
public double getPrice() { return price; }
// 省略setter
}
public class ProductFilterService {
public List<Product> filterProducts(List<Product> rawProducts, String filterCategory) {
if (rawProducts == null || rawProducts.isEmpty()) {
return new ArrayList<>();
}
// 使用Java 8 Stream API进行过滤
List<Product> filteredList = rawProducts.stream()
.filter(p -> p.getCategory().equalsIgnoreCase(filterCategory))
.collect(Collectors.toList());
return filteredList;
/*
// 或者使用传统循环方式
List<Product> filteredList = new ArrayList<>();
for (Product product : rawProducts) {
if (product.getCategory() != null && product.getCategory().equalsIgnoreCase(filterCategory)) {
filteredList.add(product);
}
}
return filteredList;
*/
}
// 示例用法
public static void main(String[] args) {
List<Product> allProducts = new ArrayList<>();
allProducts.add(new Product("P001", "Laptop", "Electronics", 1200.00));
allProducts.add(new Product("P002", "Mouse", "Electronics", 25.00));
allProducts.add(new Product("P003", "Book", "Books", 15.00));
allProducts.add(new Product("P004", "Keyboard", "Electronics", 75.00));
ProductFilterService filterService = new ProductFilterService();
List<Product> electronicProducts = filterService.filterProducts(allProducts, "Electronics");
System.out.println("Filtered Electronic Products:");
for (Product p : electronicProducts) {
System.out.println(p.getName() + " - " + p.getCategory());
}
}
}绑定过滤后的数据:
在选择过滤策略时,我们需要综合考虑以下因素:
尽管JDeveloper的Web服务数据控件可能不直接提供内置的“命名条件”式过滤,但我们仍有有效的解决方案。通过修改Web服务接口实现服务端预处理过滤,可以优化性能并减少网络负载,适用于Web服务可控且数据量大的场景。而当Web服务不可修改时,在客户端利用POJO模型进行编程过滤则提供了极大的灵活性,适用于数据量适中且需要复杂客户端过滤逻辑的场景。开发者应根据具体项目需求、Web服务特性和性能考量,明智地选择最合适的过滤策略。
以上就是JDeveloper中Web服务数据控件的数据过滤策略的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号