条带URL前缀作为请求参数

时间:2011-01-27 15:18:11

标签: java url stripes urlbinding

我正在尝试为我的应用程序构建一种方式,使其具有类似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中有一个工具可以让我在不扩展/改变框架组件的情况下做到这一点吗?

感谢。

3 个答案:

答案 0 :(得分: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”);
    }
}

答案 1 :(得分:0)

我偶然发现了URL Rewrite Filter,它似乎符合我目前申请的需要。

答案 2 :(得分:0)

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

  

@UrlBinding(“/ foo / {bar} / {baz}”)地图   动作为“/ foo”并表示   那个“bar”和“baz”参数   可以嵌入在URL中。在这   case,URL / foo / abc / 123会   调用bar设置为的操作   “abc”和baz设为“123”。