2010-09-10 67 views
1

我在基於HTML的條目表單上有一個行和列的表格,允許用戶編輯多個記錄。每一行對應一個數據庫記錄,每一列對應一個數據庫字段。HTML中的相關參數

當用戶提交表單時,服務器需要確定哪個請求參數屬於哪一行。我多年來一直使用的方法是爲每個HTML輸入元素的名稱添加前綴或後綴,以指明它所屬的行。例如,所有輸入元素都有後綴「row1」,以便服務器知道名稱以「row1」結尾的請求參數是第一行的字段值。

雖然這可行,但後綴/前綴方法的一個注意事項是您添加了一個約束,您無法用特定的後綴/前綴命名任何其他元素。所以我想知道是否有更好,更優雅的方法。順便說一下,我使用JSP作爲表示層。

謝謝。

回答

0

當前用戶代理按照呈現給用戶的字段順序發回值。

這意味着您可以(理論上)完全刪除前綴/後綴,並根據值的排序對其進行排序。你會看到類似

/?name=Tom&gender=M&name=Jane&gender=F&name=Roger&gender=M 

我不知道你的框架如何返回,但很多回報它,因爲每個值

name = [Tom, Jane, Roger] 
gender = [M, F, M] 

的列表如果彈出一個元素關每個列表中,你應該得到一個你可以使用的相關設置。

這樣做的不利之處在於它依賴於規範實際不需要的標準行爲。儘管如此,這是一種方便的解決方案,其行爲在實踐中不會出現問題。

0

當瀏覽器的職位,信息反饋到服務器上,它只是一個參數列表:

?name_row1=Jeff&browser_row1=Chrome&name_row2=Mark&browser_row2=IE8 

所以真的,我覺得你可以回答一個簡單的問題:你怎麼在一個鍵 - 鍵關聯價值清單?

或者,您可以轉到更結構化的傳遞方法(JSON或XML),它會自動爲您提供結構化的數據格式。當然,這意味着您需要首先在瀏覽器上創建此值,然後通過AJAX(或通過隱藏輸入字段的值)發送它,然後在服務器代碼中解壓縮/反序列化它。

XML:

<rows> 
<row><id>1</id><name>Jeff</name><browser>Chrome</browser></row> 
<row>...</row> 
</rows> 

或JSON:

[{ "name":"Jeff", "browser":"Chrome"}, { "name":"Mark", "browser":"IE8" }] 

有關於如何做到這一點...谷歌它的許多資源/教程。或者使用表面看來的StackOverflow共識並嘗試jQuery。

1

我不太瞭解JSP,但在PHP中,您將使用數組語法定義輸入字段的名稱。

<input name='person[]'> 
<input name='person[]'> 
<input name='person[]'> 

當PHP收到這樣的一種形式,它給你一個數組(標準$ _POST陣列內),因此:

$_POST['person']=array('alice','bob','charlie'); 

這使得它非常容易處理具有與多套你想要的領域。

您也可以明確命名的數組元素:

<input name='person[teamleader]'> 
<input name='person[developer1]'> 

會給你用這些密鑰的數組。如果您的當前前綴不僅僅是簡單地對記錄進行編號而是有意義的,這將解決這個問題。

我不知道相同的語法是否適用於JSP,但我想它會允許非常相似的東西。

希望有所幫助。