2015-09-27 4 views
2

У меня есть html form, который мне нужно отправить в restlet. Кажется достаточно простым, но форма всегда возвращается пустой.Сообщение html form to restlet

Это форма:

<form action="/myrestlet" method="post"> 
    <input type="text" size=50 value=5/> 
    <input type="text" size=50 value=C:\Temp/> 
    (and a few other input type texts) 
</form> 

restlet:

@Post 
public Representation post(Representation representation) { 
    Form form = getRequest().getResourceRef().getQueryAsForm(); 
    System.out.println("form " + form); 
    System.out.println("form size " + form.size()); 
} 

Я также пытался получать по форме, как это:

Form form = new Form(representation); 

Но он всегда приходит как [] с размером 0.

Что мне не хватает?

EDIT: Вот обходной путь я использую:

String query = getRequest().getEntity().getText(); 

Это все значения из form. Я должен разбирать их, что раздражает, но это делает работу.

+0

Параметры запроса отсутствуют. –

+0

@ RomanC вы можете уточнить? – Eddy

+0

Нет, я не знаком с приведенным выше кодом, я просто вижу некоторые опечатки в HTML-коде. –

ответ

2

Вот правильный способ получить значения из представленной HTML-формы (с типом контента application/x-www-form-urlencoded) в ресурсе сервера-рестарта. Это то, что ты сделал на самом деле.

public class MyServerResource extends ServerResource { 
    @Post 
    public Representation handleForm(Representation entity) { 
     Form form = new Form(entity); 

     // The form contains input with names "user" and "password" 
     String user = form.getFirstValue("user"); 
     String password = form.getFirstValue("password"); 

     (...) 
    } 
} 

В вашем случае, форма HTML не отправлено, потому что вы не определили какой-либо атрибут name для вашей формы. Я использовал ваш HTML-код, и отправленные данные пустые. Вы можете проверить это, используя инструменты разработчика Chrome (Chrome) или Firebug (Firefox).

POST /myrestlet HTTP/1.2 
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 
Accept-Encoding: gzip, deflate 
Accept-Language: fr,fr-FR;q=0.8,en-US;q=0.5,en;q=0.3 
Connection: keep-alive 
Host: localhost:8182 
Referer: http://localhost:8182/static/test.html 
User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:41.0) Gecko/20100101 Firefox/41.0 
Content-Length: 0 
Content-Type: application/x-www-form-urlencoded 

Вы должны использовать что-то подобное для HTML формы:

<form action="/test" method="post"> 
    <input type="text" name="val1" size="50" value="5"/> 
    <input type="text" name="val2" size="50" value="C:\Temp"/> 
    (and a few other input type texts) 
    <input type="submit" value="send"> 
</form> 

В случае запрос будет:

POST /myrestlet HTTP/1.2 
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 
Accept-Encoding: gzip, deflate 
Accept-Language: fr,fr-FR;q=0.8,en-US;q=0.5,en;q=0.3 
Connection: keep-alive 
Host: localhost:8182 
Referer: http://localhost:8182/static/test.html 
User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:41.0) Gecko/20100101 Firefox/41.0 
Content-Length: 23 
Content-Type: application/x-www-form-urlencoded 

val1=5&val2=C%3A%5CTemp 

Надеется, что это помогает вам, Тьерри

+0

Спасибо, сейчас работает. Чтобы уточнить, мне нужно было дать имя полям ввода, а не самой форме. – Eddy

2

вот немного более простой способ добиться этого, он прямо объявляет форму как параметр t он Метод Java:

public class MyServerResource extends ServerResource { 
    @Post 
    public Representation handleForm(Form form) { 

     // The form contains input with names "user" and "password" 
     String user = form.getFirstValue("user"); 
     String password = form.getFirstValue("password"); 

    (...) 
    } 
}