2012-05-26 4 views
1

제공되는 URL을 사용하여 다른 웹 사이트에서 가져온 여러 값을 표시 할 수있는 작은 컴퍼지 웹 응용 프로그램을 만들었습니다. 현재이 URL은 내 기능 중 하나에 하드 코딩되어 있습니다. 이제 텍스트 필드 및 확인란의 값을 기반으로 동적 URL 생성을위한 기능을 추가하고 싶습니다. 어디 것, 내가 (문자열을 반환) (create-url) 기능에 도움이 필요, 순간compojure를 사용하여 여러 확인란의 값 구문 분석

(defroutes main-routes    
    (GET "/" [] 
     (view-input)) 
    (GET "/downloads" [] 
     (view-downloads)) 
    (POST "/" [] 
     (view-output))) 

: 여기

(defn view-layout [& content] 
    (html [:body content])) 

(defn view-input [] 
    (view-layout 
    [:h2 "Find"] 
    [:form {:method "post" :action "/"} 
    (for [category ["Cat1" "Cat2" "Cat3"]] 
     [:input {:type "checkbox" :id category } category ])  
     [:br] 
    [:input {:type "text" :id "a" :value "insert manga name"}] [:br] 
    [:input.action {:type "submit" :value "Find"}] 
    [:a {:href "/downloads"} "Downloads"]])) 

(defn view-output [] 
    (view-layout 
    [:h2 "default images"] 
    [:form {:method "post" :action "/"}   
     (for [name (get-content-from-url (create-url))]   
     [:label name [:br]]    
      )])) 

(defn create-manga-url 
    [] 
    "http://www.mysite.net/search/?tfield=&check=000") 

이 노선은 다음과 같습니다

이 내 페이지와 같은 모습입니다 모든 필드를 가져오고 싶습니다. 하나의 텍스트 필드와 3 개의 체크 박스가 필요합니다. URL을 입력 (연결) 한 값을 구문 분석합니다. 체크 박스가 선택되어 있으면 체크 섹션의 값은 1이고, 0 대신 0을 유지하거나 그렇지 않은 경우 0을 유지합니다 (check = 100 또는 010, 011 if 두 개의 확인란이 선택되었습니다). 텍스트 필드의 경우, tfield = userinputtext.

EDIT .Net 및 Java 개발자로서 많은 시간을 보냈으며,이 부분은 저에게 완전한 신비입니다. 이것은 내가 (create-url) 기능 (의사 코드 OO 스타일로 작성) 달성하고자하는 것입니다 :이 의사 코드처럼 보이는 방법에 대해 사과

(defn create-url [*text_field cbox1 cbox2 cbox3*] 
(def url "http://www.mysite.net/search/?") 
(def tfield "tfield=") 
(def cbox "&check=") 

(if (checked? cbox1) 
(str cbox "1") 
(str cbox "0")) 

(if (checked? cbox2) 
(str cbox "1") 
(str cbox "0")) 

(if (checked? cbox3) 
(str cbox "1") 
(str cbox "0")) 

(str tfield (:value text_field)) 

(str url tbox cbox)) 

, 그러나 이것은 내가 배우고 싶은 부분입니다 : 양식에서 데이터를 가져와 구문 분석 할 수 있습니까 (이 경우 양식 필드의 값을 문자열에 첨부하고 싶습니다)

아무도 도와 줄 수 있습니까?

+0

매개 변수와 예상되는 반환 값을 사용하여'create-url'에 대한 예제 호출을 제공하면 도움이 될 수 있습니다. – ivant

+0

안녕하세요, ivat, 응답 해 주셔서 감사합니다. 불행히도, 나는 clojure에서 HTML 페이지의 값을 구문 분석하는 방법을 모른다. 나는 의사 코드를 제공 할 수 있으며, 이는 달성하고자하는 것을 설명 할 수 있습니다. –

+0

ivat, 내 함수에 의사 코드를 제공했습니다. 하지만 문제는 경로로 작업하기가 뜨겁다는 것이고, 실제로 필자의 기능에 올바른 매개 변수를 제공하는 방법을 모른다는 것입니다. 이걸 도와 줄 수 있다고 생각하니? –

답변

1

먼저 HTML 입력 요소에 '이름'속성을 추가해야합니다. 'id'속성은 게시시 서버로 보내지지 않습니다.

다음, 당신의 예와 유사한이 일을 빠른 방법을 생각하다이 같은

(POST "/" [a Cat1 Cat2 Cat3] (create-url a [Cat1 Cat2 Cat3])) 

하고 뭔가 :

(defn checked? [c] 
    (and c (= c "on"))) 

(defn checked->num [c] 
    (if (checked? c) "1" "0")) 

(defn create-url [a cats] 
    (str "x?tfield=" a "&check=" 
    (apply str (for [c cats] (checked->num c))))) 

하거나 드롭이 헬퍼 :

(defn create-url [a cats] 
    (str "x?tfield=" a "&check=" 
    (apply str (map #(if (= "on" %) "1" "0") cats))))