Как установить метку в h: selectOneListbox? - PullRequest
1 голос
/ 07 декабря 2010

Мне нужно отобразить список с меткой в ​​качестве значения «имя», и я использую h: selectOneListbox.

Мой код:

<h:selectOneListbox id="select" value"#{trial.trials}" size="1" title="Select Item...">
<f:selectItems value="#{trial.trials}/>
</h:selectOneListbox>

Мой пробный бин:

public class trial{

List<trialDataBean> trials = new ArrayList<trialDataBean>();


public trial(){
trialDatBean tdb = new trialDataBean(1,"aatmiya");
trials.add(tdb);
}

public List<trialDataBean> getTrials(){
return trials;
}

public void setTrials() {
this.trials = trials;
}

}

trialDataBean имеет свойство "name", и я хочу установить его в качестве метки ListBox. Как мне это сделать?

Ответы [ 2 ]

2 голосов
/ 07 декабря 2010

В 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>
0 голосов
/ 07 декабря 2010

Вы можете использовать как это.Я не уверен, что это будет работать или нет, потому что я использовал тег <ice:selectOneMenu> и он работал отлично.

<ice:selectOneListbox 
    id="paymnent" rows="10" tabindex="4"
    value="#{paymentVoucherReportAction.reportType}"
    style="width: 200px;height: 20px;">
    <f:selectItems id="AutoCmpTasdfasdfasdxtItms11"
        value="#{paymentVoucherReportAction.lstKeyValueData}" />
</ice:selectOneListbox>

// Файл Bean (Action)

    private List<SelectItem> lstKeyValueData = new ArrayList<SelectItem>(); // getter + setter

    private String reportType;  // getter + setter

    // put this in your init method

    List< SelectItem> list = new ArrayList< SelectItem>();

    list.add(new SelectItem("PDF Format","PDF Format"));

    list.add(new SelectItem("XLS Format","XLS Format"));

    setLstKeyValueData(list);

  // print this where you want

   System.out.println(reportType);
...