2015-09-03 106 views
1

我剛剛開始學習Spring/MVC。我有一個基本的模型/控制器/ JSP工作。一種形式的多個變量:select

我與它的幾個表單項表 - 第一行是這樣的:

<div id="general"> 
<table> 
<tr> 
    <td><form:select path="systemType" items="${systemTypes}" /></td> 
</tr> 

這工作正常 - 選擇框使用對systemType一套方法豆將用戶輸入。

那麼,如果我說了User。他們在模型bean中有名字/姓氏。強迫某人使用兩個選擇框來選擇他們的名字和姓氏是毫無意義的。

<tr> 
    <td> 
    <form:select path="User" items="${users.firstName} ${users.lastName}" /> 
    </td> 
</tr> 

所以我用jstl來顯示「名字+姓氏」。但是,採取這種輸入並將其放回到我的模型bean中,第一個和最後一個是分開的最好方法是什麼?我應該只更改模型bean以顯示一個完整的名稱,還是可以在控制器中進行某種後處理?

+0

如果你有兩個同名的用戶,第一個和最後一個會發生什麼?你如何區分它們? – RealSkeptic

+0

所以,你想在一個框中得到名字和姓氏。只需把它放在一個地方,在服務層分割空間名稱並以不同的方式保存。那有什麼問題?誰的姓和名都是相同的。我不認識這樣的人,是因爲我花時間在SO上回答用戶還是沒有人這樣? –

+0

@WeareBorg。有一些'reduplicants'。如果您也花時間在[wikipedia](https://en.wikipedia.org/wiki/List_of_people_with_reduplicated_names)和[stackexchange](http://english.stackexchange.com/questions/94163/what-是一個人的名字,與同樣的第一個和最後一個名字) –

回答

0

A WebDataBinder是在Spring/MVC中對查看器和控制器之間的數據進行重新格式化/處理的好方法。也是一個例子here

但是你可以簡單地使用了一個二傳手(簡單的例子,沒有錯誤處理):

class Name { 
    private String first; 
    private String last; 

    void setFullName(String fullName) { 
     String[] parts = fullName.split(" "); 
     first = parts[0]; 
     last = parts[1]; 
    } 
} 

並在視圖是這樣的:

<form:select path="User" items="${fullName}" />

Spring將調用函數名爲setFullName,當它運行一個名爲fullName的變量時。班級的內部結構取決於你。

+0

好吧,這是我正在尋找的。感謝您的建議。我現在將實現setFullName版本,但會嘗試執行WebDataBinder以便將來了解它。 –