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

标签 java url-rewriting tapestry

我正在将 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/

相关文章:

java - Java 字符串的实例是否总是有效的 UTF-16?

java - 没有 url 的服务器映射

.htaccess - 使用 .htaccess 删除动态链接上的目录

java - 在 Tapestry 5.3 中链接多个选择组件(Ajax 更新)

tapestry - Tapestry 5.2 中是否有一些本地方法可以将 eventLink 转换为按钮

java - Excel-VBA - VBA 中有类似 Javas Set 容器的东西吗?

java - Firebase 获取条目的当前值

java - 这是二月还是三月的日期?校准集 (2010, 1, 10)

php - mod 重写规则,用于从 url 中搜索字符串并仅替换该 url 的域名

java - 使用 URL 键/值样式参数的 Hibernate 查询限制