Полосатый префикс URL в качестве параметра запроса - PullRequest
2 голосов
/ 27 января 2011

Я пытаюсь найти способ, чтобы в моем приложении был шаблон / схема URL-адреса, как в приложениях, таких как Twitter.Например, myapplication.com/username, где имя пользователя - это фактическое имя пользователя, которое рассматривается как параметр.Этот параметр будет использоваться для отображения страницы, связанной с пользователем.У моего приложения также есть эта схема URL, где имя пользователя является префиксом для других ресурсов, например myapplication.com/username/accountsettings или myapplication.com/username/profile.Имя пользователя действует как своего рода контекстный путь.

Как видно из заголовка, я использую Stripes для него.Сейчас я создаю собственный ActionResolver, в котором я извлекаю первую непустую строку из привязки URL-адреса (в данном случае это имя пользователя), поскольку мои ActionBeans не учитывают имя пользователя, добавленное к URL-адресу.Так, например, бин действия, который обрабатывает myapplication.com/username/accountsettings, привязан только к /accountsettings.

Когда я пытался использовать пользовательский ActionResolver в качестве параметра инициализации ActionResolver.Class для фильтра Stripes, он неКажется, не работает.Кажется, он все еще использует ActionResolver по умолчанию.Как мне это изменить?

Кроме того, есть ли более простой / интуитивно понятный способ сделать это?Я не очень знаком с Stripes и привязками URL, поэтому есть ли в Stripes средство, позволяющее мне делать это без расширения / изменения компонентов каркаса?

Спасибо.

Ответы [ 3 ]

1 голос
/ 31 января 2011

Я согласен с 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”);
    }
}
0 голосов
/ 30 января 2011

В Stripes есть встроенная функция. Она называется аннотацией @ URLBinding и включена в Stripes 1.5. Здесь есть некоторая документация , а в книге Stripes было IIRC.

@ UrlBinding ("/ foo / {bar} / {baz}") карты действие "/ foo" и указывает что параметры "бар" и "баз" может быть встроен в URL. В этом В этом случае URL / foo / abc / 123 будет вызвать действие с баром, установленным в «abc» и baz установлены на «123».

0 голосов
/ 30 января 2011

Я наткнулся на Фильтр перезаписи URL , и, похоже, он соответствует требованиям моего приложения.

...