如何将两个值链接到JSF中的下拉列表?

时间:2011-01-25 13:30:05

标签: java jsf

我在netbeans中创造了entites和facde。现在我想创建一个本机查询,只从表中获取两个字段。然后将它们绑定到

String query = "SELECT DISTINCT(m.idManufacturer),m.hmid "
                + " FROM model m";

@SuppressWarnings("unchecked")
List<model> modelList = (List&lt;model>) getEntityManager().createNativeQuery(query).getResultList();

然后我使用了这段代码

<f:selectItems itemLabel="#{myController.modelList.idManufacturer}"/>

显示下拉列表中的值。但这似乎不起作用。有什么想法吗?

2 个答案:

答案 0 :(得分:0)

尝试从List<Model>创建selectItems列表,并在值属性中提供该列表。

e.g。

List<SelectItem> modelList = new ArrayList<SelectItem>();
  //implement your conversion label value here.
<f:selectItems value="#{myController.modelList}"/>

答案 1 :(得分:0)

如果您使用的是JSF 1.x,则需要向SelectItem[]的{​​{1}}提供List<SelectItem>Map<String, Object>value。最常见的选择是f:selectItems。假设您要将List<SelectItem>(我假设为Model#getIdManfacturer())用作项目标签值,这是一个示例:

Long

结合使用
public class Bean {
    private Long selectedManfacturerId; // +getter +setter
    private List<SelectItem> selectManfacturerIds; // +getter

    @PostConstruct
    public void init() {
        selectManfacturerIds = new ArrayList<SelectItem>();
        List<Manfacturer> manfacturers = getItFromDatabaseSomehow();
        for (Manfacturer manfacturer : manfacturers) {
            selectManfacturerIds.add(new SelectItem(manfacturer.getManfacturerId()));
        }
    }

    // ...
}

但是,如果您已经使用JSF 2.0,那么您也可以使用<h:selectOneMenu value="#{bean.selectedManfacturerId}"> <f:selectItems value="#{bean.selectManfacturerIds}" /> </h:selectOneMenu> 。 JSF 2.0 List<SomeBean>中的新var属性允许您在视图中声明迭代项。开球的例子:

<f:selectItems>

结合使用
public class Bean {
    private Long selectedManfacturerId; // +getter +setter
    private List<Manfacturer> manfacturers; // +getter

    @PostConstruct
    public void init() {
        manfacturers = getItFromDatabaseSomehow();
    }

    // ...
}