2

我正在尝试为我的应用程序构建一种方法,使其具有类似于 Twitter 等应用程序的 URL 模式/方案。例如 myapplication.com/username ,其中用户名是被视为参数的实际用户名。此参数将用于显示用户相关页面。我的应用程序也有这个 URL 方案,其中用户名是其他资源的前缀,例如 myapplication.com/username/accountsettings 或 myapplication.com/username/profile。用户名充当某种子上下文路径。

正如标题所示,我正在使用 Stripes。我现在正在做的是创建一个自定义 ActionResolver,我从 URL 绑定中取出第一个非空字符串(在本例中为用户名),因为我的 ActionBeans 不考虑 URL 前面的用户名。因此,例如,处理 myapplication.com/username/accountsettings 的操作 bean 仅绑定到 /accountsettings。

当我尝试将自定义 ActionResolver 用作 Stripes 过滤器的 ActionResolver.Class 初始化参数时,它似乎不起作用。它似乎仍在使用默认的 ActionResolver。我该如何改变这个?

此外,是否有更简单/更直观的方法来做到这一点?我对 Stripes 和 URL 绑定不是很熟悉,所以 Stripes 中是否有一个工具可以让我在不扩展/更改框架组件的情况下做到这一点?

谢谢。

4

3 回答 3

1

我同意 lucas 的观点,URL 映射应该通过UrlBinding注释来完成。没有必要开始搞乱 URL 重新映射过滤器,这只会破坏 Stripes 系统为您生成正确的 URL。

它应该是这样的:

@UrlBinding("{username}/profile/")
public class MyProfileAction implements ActionBean {
    private ActionBeanContext context;
    private String username;

    public ActionBeanContext getContext() {
        return context;
    }

    public void setContext(ActionBeanContext context) {
        this.context = context;
    }

    public void setUsername(String username) {
        this.name = name;
    }

    public String getUsername() {
        return username;
    }

    @DefaultHandler
    public Resolution view() {
        return new ForwardResolution(“/WEB-INF/MyProfile.jsp”);
    }
}
于 2011-01-31T15:54:42.667 回答
0

我偶然发现了URL Rewrite Filter,到目前为止它似乎符合我的应用程序的需求。

于 2011-01-30T16:17:00.557 回答
0

Stripes 确实内置了这个。它被称为@URLBinding注释,它包含在 Stripes 1.5 中。这里有一些文档, Stripes book IIRC中有更多文档。

@UrlBinding("/foo/{bar}/{baz}")将操作映射到 "/foo" 并指示 "bar" 和 "baz" 参数可能嵌入在 URL 中。在这种情况下,URL /foo/abc/123 将调用 bar 设置为“abc”且 baz 设置为“123”的操作。

于 2011-01-30T17:17:34.273 回答