2010-11-10 73 views
0

我在struts2中創建了一個表格&用於編輯用戶記錄,用戶可以有一個或多個角色,我有一個表單是多選框用於選擇給定用戶的角色。選擇框的內容是從數據庫中讀取的,我希望選擇框在加載表單時預先選擇用戶當前的選項,使用在線找到的示例我有以下幾點。Struts2多選框預選當前選項

在我的動作類

public List<Role> getRoles() 
{ 
    return roles; 
} 


public void setRoles(List<Role> roles) 
{ 
    this.roles = roles; 
} 


public List<Role> getAvailableRoles() 
{ 
    return availableRoles; 
} 

在我的JSP

<s:select list="availableRoles" listKey="id" listValue="name" name="roles" label="Roles" multiple="true" /> 

的多選框創建精細然而,沒有項目被選中開始和我有點困惑,因爲每一個例子我已經找到了這一點。

我曾嘗試改變選擇框,只是這樣的:

<s:select list="availableRoles" name="roles" label="Roles" multiple="true" /> 

這樣就成功地預選擇的選項然而然後在下拉填充了無論是從對toString()方法返回我的角色類不是特定的getId()和getName()方法,這是我想要的。任何想法,我錯了?

回答

0

閱讀了struts2源代碼後,似乎我的回答很明顯。我需要在我的Role類上實現.equals()方法才能工作。

0

我認爲你的問題可能是getRoles()setRoles()需要是List<String>而不是List<Roles>。這是因爲HTML select使用字符串作爲密鑰。將類型更改爲List<String>,並使用用戶當前選項的角色標識初始化角色變量。這是因爲你有listkey=id。你也需要multiple=true

+0

這並不能解決我的問題,因爲我希望listKey和listValue不同。 – 3urdoch 2010-11-11 16:07:25

+0

我的答案允許您爲listkey和listvalue使用不同的值。但是getRoles()和setRoles()需要與你的listkey類型相同。 – Tarski 2010-11-12 11:02:09