gpt4 book ai didi

java - Tapestry 5 : URL Re-writing : Pass parameters to transformPageRenderLink method

转载 作者:行者123 更新时间:2023-12-01 11:33:11 25 4
gpt4 key购买 nike

我正在将 Tapestry 从 5.2.4 升级到 5.3.8,但一直在重新实现 URL 重写部分。

在我的应用程序中,一个用户帐户可以拥有多个数据存储。用户可以同时激活不同商店的同一页面。因此,我需要将 storeId 放入页面链接和事件链接 URL 中。那么所做的事情如下。

我注册MyLinkTransformerClassAppModule如下。

    @Contribute(PageRenderLinkTransformer.class)
@Primary
public static void provideURLRewriting( OrderedConfiguration<PageRenderLinkTransformer> configuration){

configuration.addInstance(
"Faces", MyLinkTransformer.class);
}

以下是MyLinkTransformer实现 PageRenderLinkTransformer 的类

public PageRenderRequestParameters decodePageRenderRequest(
Request request) {

// for incoming requests - remove the store id from URL and
// save into Request as an attribute

String path = request.getPath();
if (path.equals("/")) {
// Redirect to accounts page
return new PageRenderRequestParameters("account", new EmptyEventContext(), false);
}
else {
String start = path.split("/")[1];
if (!ignoredRewriteSet.contains(start) && !start.startsWith("account")) {
String storePath = path.substring(1).substring(path.indexOf("/"));
int idx = storePath.indexOf("/");
if (idx < 0) idx = storePath.length();
String storeId = storePath.substring(0, idx).trim();
RequestHelper.setStoreId(request, storeId);
EventContext urlEventContext = new URLEventContext(contextValueEncoder, new String[]{storeId});
EventContext arrayEventContext = new ArrayEventContext(typeCoercer, "foo");
return new PageRenderRequestParameters(storePath.substring(idx), arrayEventContext, false);
//return new PageRenderRequestParameters(storePath.substring(idx), new EmptyEventContext(), false);
}
}

return null;
}

public Link transformPageRenderLink(
Link defaultLink,
PageRenderRequestParameters parameters) {

// for outgoing requests- This is where I want to access the store Id
// which is stored in Request class of Tapestry as an attribute and
// add it to the URL

return null;
}

因此,我们的想法是从 decodePageRenderRequest 中的 URL 中删除 storeId方法并将其保存在Request中Tapestry 类作为属性。在创建页面链接和事件链接的传出 URL 时,我想访问保存在 Request 中的 storeId 并将其注入(inject)到将在方法 transformPageRenderLink 中呈现的 URL .

但我不知道如何向 transformPageRenderLink 传递参数方法或访问 Request那里有实例。

我正在关注http://blog.tapestry5.de/index.php/2010/09/06/new-url-rewriting-api/例子。我是 URL 重写的新手,如有任何帮助,我们将不胜感激。

最佳答案

您可能会对 ModeComponentEventLinkEncoder here 感兴趣。它从 URL 中删除“模式”并将其放入 Environment在将其传递到正常的 Tapestry URL 处理之前。

这是一个双向过程,因此“模式”包含在页面上生成的任何链接中。

注意:这用作装饰器 here

关于java - Tapestry 5 : URL Re-writing : Pass parameters to transformPageRenderLink method,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30259617/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com