Query Parameters
查询参数允许您通过 URL 传递附加数据,使用格式 ?key1=value1&key2=value2
。而路由参数用于在 URL 路径中传递必需的数据,查询参数则提供了一种灵活的机制来传递可选或附加数据。当过滤内容、排序或处理同一键的多个值时,它们特别有用。
查询参数概述
webforJ 中的查询参数遵循典型的 URL 约定:由 =
分隔的键值对,并用 &
连接。它们在 ?
之后附加到 URL,并提供了一种灵活的方式来传递可选数据,例如过滤或排序偏好。
例如:
/products?category=electronics&sort=price
检索查询参数
查询参数通过 ParametersBag
对象访问。要检索查询参数,请使用 Location
对象的 getQueryParameters()
方法。
以下是在视图中从 URL 检索查询参数的方式:
@Route(value = "products")
public class ProductView extends Composite<Div> implements DidEnterObserver {
@Override
public void onDidEnter(DidEnterEvent event, ParametersBag parameters) {
ParametersBag queryParameters = event.getLocation().getQueryParameters();
String category = queryParameters.get("category").orElse("all");
String sort = queryParameters.get("sort").orElse("default");
console().log("Category: " + category);
console().log("Sort: " + sort);
}
}
在此示例中:
onDidEnter
方法从DidEnterEvent
提供的Location
对象中检索查询参数。ParametersBag
允许您使用get()
检索特定的查询参数,该方法返回一个Optional<String>
。如果参数不存在,您可以使用orElse()
指定默认值。
ParametersBag
访问器ParametersBag
提供了几种访问器变体,帮助将查询参数的值转换为特定类型并进行过滤。以下是可用访问器的完整列表:
get(String key)
:将参数的值作为String
提取。getAlpha(String key)
:仅返回参数值中的字母字符。getAlnum(String key)
:仅返回参数值中的字母数字字符。getDigits(String key)
:仅返回参数值中的数字。getInt(String key)
:解析并返回参数值作为Integer
。getFloat(String key)
:解析并返回参数值作为Float
。getDouble(String key)
:解析并返回参数值作为Double
。getBoolean(String key)
:解析并返回参数值作为Boolean
。
这些方法可以帮助您确保值格式正确并正确转换,避免手动解析或验证的需要。
处理查询参数的多个值
有时,查询参数可能有多个相同键的值,如以下示例所示:
/products?category=electronics,appliances&sort=price
ParametersBag
提供了一种方法来处理此情况,通过将值作为列表检索:
@Route(value = "products")
public class ProductView extends Composite<Div> implements DidEnterObserver {
@Override
public void onDidEnter(DidEnterEvent event, ParametersBag parameters) {
ParametersBag queryParameters = event.getLocation().getQueryParameters();
List<String> categories = queryParameters.getList("category").orElse(List.of("all"));
String sort = queryParameters.get("sort").orElse("default");
console().log("Categories: " + categories);
console().log("Sort: " + sort);
}
}
在此示例中:
getList("category")
检索与category
键相关联的所有值,并将其作为列表返回。
多个值分隔符
默认情况下,getList()
方法使用逗号 (,
) 作为分隔符。您可以通过将不同的字符或正则表达式作为第二个参数传递给 getList(String key, String regex)
方法来自定义分隔符。
查询参数的用例
- 过滤内容:查询参数通常用于应用过滤器,如类别或搜索关 键词。
- 排序数据:您可以通过查询参数传递排序偏好,例如按价格、评分或日期排序。
- 处理可选参数:当您需要传递不属于必需路由结构的数据时,查询参数提供了灵活性。
- 传递多个值:查询参数允许您为单个键发送多个值,这在用户选择多个选项时非常有用,例如产品类别或过滤器。