В JSF 1.x вам нужно создать List<SelectItem>
на основе вашего List<Trial>
. Конструктор SelectItem
может принимать значение параметра в качестве 1-го аргумента и метку параметра в качестве 2-го аргумента.
public class Bean {
private Trial selectedTrial;
private List<Trial> trials;
private List<SelectItem> selectTrials;
public Bean() {
trials = loadItSomehow();
selectTrials = new ArrayList<SelectItem>();
for (Trial trial : trials) {
selectTrials.add(new SelectItem(trial, trial.getName()));
}
}
// ...
}
Тогда вы можете использовать его в представлении следующим образом:
<h:selectOneListbox value="#{bean.selectedTrial}" converter="trialConverter">
<f:selectItems value="#{bean.selectTrials}" />
</h:selectOneListbox>
Вам нужно только указать пользовательский Converter
, который конвертируется между Trial
и String
. Более подробную информацию можно найти в этой статье .
В JSF 2.x вы можете опустить List<SelectItem>
и использовать вместо него новый атрибут var
в f:selectItems
:
<h:selectOneListbox value="#{bean.selectedTrial}" converter="trialConverter">
<f:selectItems value="#{bean.trials}" var="trial"
itemValue="#{trial}" itemLabel="#{trial.name}" />
</h:selectOneListbox>