2014-08-29 4 views
1

Я работал над проектом Clojure в течение некоторого времени и задавался вопросом, как перемещаться по пользователю с одной страницы на другую после нажатия кнопки отправки. код выглядит следующим образом:Как поместить ссылку в кнопку отправки, используя Clojure

(defn view-film-input [] 
(view-layout 
    [:body {:style "background-color: #F2FB78"} 
    [:h2 "Add new film"] 
    (form-to [:post "/addfilm" ] 

    (label "movname" "Film title: ") 
    (text-field :txtname) [:br] 

    (label "prname" "Producer name: ") 
    (text-field :txtprname) [:br] 
    (label "location" "File location: ") 
    (text-field :txtlocation)[:br] 

    (label "duration" "Duration(minutes): ") 
    (text-field :txtduration)[:br] 
    (submit-button "Save"))])) 

Теперь, это работает, но я хотел бы перейти пользователь же «Добавить новый фильм» страницу или обновить форму после нажатия кнопки «Сохранить», вместо этого он показывает просто пустой стр.

Это GET \ POST часть:

(GET "/addfilm" [] (view-film-input)) 
(POST "/addfilm" [txtname txtprname txtlocation txtduration] 
    (insert-flick txtname txtprname txtlocation txtduration 90)) 

Заранее спасибо!

+0

Я предполагаю, что это compojure. Ваши взгляды должны вернуть ответ. Что возвращает «insert-flick»? –

+0

Он определен в другом классе, который управляет базой данных. Добавляет новый фильм в таблицу, используя txtname, txtprname, txtlocation и txtduration как атрибуты – Wombat

ответ

1

У вас здесь есть две возможности.

Перенаправление пользователя

Использование Location заголовку HTTP 302 (или 303) ответа вы можете указать путь к браузеру пользователя должен отображаться вместо текущей:

(POST "/addfilm" [...] 
    ... 
    {:status 302 
    :headers {"Location" "/addfilm"}}) 

Там также являются двумя функциями в ring.util.response, которые будут генерировать ответы для вас: redirect и redirect-after-post - с последним более применимым к вашему прецеденту.

EDIT:This answer подробно о том, почему 303 будет код статуса, чтобы отправить после POST, а именно:

Если вы используете 302, вы рискуете, что UA будет повторно отправить POST на новый URL вместо перехода на GET.

Отрендерьте же страницу снова

Simpler и побуждая меньше I/O, но навязывания некоторое дублирование будет вновь оказывать ту же точку зрения, а именно:

(POST "/addfilm" [...] 
    ... 
    (view-film-input)) 

Это кажется менее поддерживаемый мне, но это, вероятно, самый короткий путь к решению вашей проблемы.

+0

Большое спасибо, очень ценю быстрый ответ – Wombat