2015-09-27 48 views
2

我有一個html form,我需要提交到restlet。似乎很簡單,但形式總是回到空白。發表html 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.

我錯過了什麼?

編輯:下面是我使用的解決方法:

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

這樣將form所有的值。我必須解析它們,這很煩人,但是它完成了這項工作。

+0

請求參數丟失。 –

+0

@RomanC可以詳細說明一下嗎? – Eddy

+0

不,我不熟悉上面的代碼,我只是看到HTML代碼中的一些拼寫錯誤。 –

回答

2

以下是從Restlet服務器資源中提交的HTML表單(內容類型爲 application/x-www-form-urlencoded)中獲取值的正確方法。事實上這是你所做的。

​​

在你的情況下,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

這裏實現這個有點簡單,它直接聲明Form作爲參數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"); 

    (...) 
    } 
}