Я пытаюсь отобразить список флажков на основе списка данных, которые у меня есть. Мне удалось это сделать, однако я не могу установить проверенные значения для необходимых элементов.
Если у меня следующая структура класса.
public class Basic {
private String name;
private List<CBItem> cbItems;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public List<CBItem> getCbItems() {
return cbItems;
}
public void setCbItems(List<CBItem> cbItems) {
this.cbItems = cbItems;
}
}
public class CBItem {
private String name;
private Boolean selected;
public CBItem(String name, Boolean selected) {
this.name = name;
this.selected = selected;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Boolean getSelected() {
return selected;
}
public void setSelected(Boolean selected) {
this.selected = selected;
}
}
Я инициализирую это так в моем контроллере:
public String handleDemo(Model model) {
Basic basic = new Basic();
basic.setName("Basic Data Structure");
List<CBItem> cbItems = new ArrayList<CBItem>();
cbItems.add(new CBItem("First", true));
cbItems.add(new CBItem("Second",false));
cbItems.add(new CBItem("Third", false));
cbItems.add(new CBItem("Fourth", true));
basic.setCbItems(cbItems);
model.addAttribute("basic", basic);
return "demo";
}
и отображение его на странице jsp с помощью этого оператора:
<%@ taglib prefix="s" uri="http://www.springframework.org/tags" %>
<%@ taglib prefix="sf" uri="http://www.springframework.org/tags/form" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
<title>Testing Basic Data</title>
</head>
<body>
<sf:form modelAttribute="basic">
<sf:checkboxes path="cbItems" items="${basic.cbItems}" itemLabel="name" itemValue="selected" delimiter="<br/>" />
</sf:form>
</body>
</html>
Когда я проверял документацию Spring для тега флажка:
Существует три подхода к метке флажка, которые должны соответствовать всем вашим
флажок нужен.
Первый подход - Когда связанное значение имеет тип java.lang.Boolean,
вход (флажок) помечается как «отмеченный», если
Связанное значение верно. Атрибут значения соответствует разрешенному
значение свойства значения setValue (Object).
Второй подход - когда
связанное значение имеет тип массив или java.util.Collection,
вход (флажок) помечается как «отмеченный», если
Значение setValue (Object) присутствует в связанной коллекции.
Подход
Три - для любого другого связанного типа значения вход (флажок) помечен
как 'проверено', если настроенный setValue (Object) равен границам
значение. * * тысяча двадцать-одна
Я склонен полагать, что, поскольку значение привязки в itemValue = "selected" связывает значение с логическим значением, тогда значение логического значения должно добавить проверенный оператор для тех значений, где selected = Boolean.TRUE. Тем не менее, с помощью Spring 3.0.5.RELEASE я получаю следующий сгенерированный HTML
<html>
<head>
<title>Testing Basic Data</title>
</head>
<body>
<form id="basic" action="/demo" method="post">
<span>
<input id="cbItems1" name="cbItems" type="checkbox" value="true" checked="checked"/>
<label for="cbItems1">First</label>
</span>
<span>
<br/>
<input id="cbItems2" name="cbItems" type="checkbox" value="false" checked="checked"/>
<label for="cbItems2">Second</label>
</span>
<span>
<br/>
<input id="cbItems3" name="cbItems" type="checkbox" value="false" checked="checked"/>
<label for="cbItems3">Third</label>
</span>
<span>
<br/>
<input id="cbItems4" name="cbItems" type="checkbox" value="true" checked="checked"/>
<label for="cbItems4">Fourth</label>
</span>
<input type="hidden" name="_cbItems" value="on"/>
</form>
</body>
</html>
Где значение устанавливается в true или false вместо правильного добавления отмеченного атрибута.
Что я делаю не так?