今天遇到一個問題就是,如何設置<html:select>多選情況下的默認值,網上有些人說下面是可行的:
<html:form action="/projectUpdate.do" focus="experimenters">
<html:select property="experimenters" size="10" multiple="true" value="experimenters">
<html:optionsCollection
name="msms_experimenterlist" value="email" label="email"/>
</html:select>
....
</html:form>
這里,experimenters是projectForm的屬性,類型為String[]
msms_experimenterlist是保存在request中的一個set<UserInfo>,email是UserInfo的屬性,類型為String。
顯示以及傳遞到/projectUpdate.do對應的Action都正常,但是如果給projectForm的experimenters設置了初始值,在真實顯示的時候,多選框中并沒有設置這些初始值,很是麻煩。
雖然最后通過jsp的方法解決,總是不爽阿:
<html:select property="experimenters" size="10" multiple="true" value="experimenters">
<%ProjectForm projForm = (ProjectForm) request.getAttribute("projectForm");
HashSet<String>
oldExperimenters = new
HashSet<String>(Arrays.asList(projForm.getExperimenters()));
List userList = (List)request.getAttribute("msms_experimenterlist");
for(int i = 0;i < userList.size();i++){
UserInfo user = (UserInfo) userList.get(i);
if (oldExperimenters.contains(user.getEmail())){
out.print("<option value=\"" + user.getEmail() + "\" selected>" +
user.getEmail());
}
else{
out.print("<option value=\"" + user.getEmail() + "\">" +
user.getEmail());
}
}
%>
</html:select>