当创建一个新项目时,用户不希望在Select-One菜单中看到空的no选择选项,而是直接从可用的项目中看到一个项目。因此,要么去掉null no选项,要么直接在下拉菜单中显示第二个元素。我尝试了属性hideNoSelection
,但它什么也不做。我怎样才能做到这一点呢?
<h:selectOneMenu id="ugroup" value="#{usersController.selected.ugroup}" title="#{bundle.CreateUsersTitle_ugroup}" required="true" requiredMessage="#{bundle.CreateUsersRequiredMessage_ugroup}">
</h:selectOneMenu>
---------------- 编辑(@Balus回答之后 ) ---------------------下面是获取JPA列表以显示为<h:selectOneMenu />
的Utility方法:
public class JsfUtil {
public static SelectItem[] getSelectItems(List<?> entities, boolean selectOne) {
int size = selectOne ? entities.size() + 1 : entities.size();
SelectItem[] items = new SelectItem[size];
int i = 0;
if (selectOne) { // part to be removed
items[0] = new SelectItem("", "---");
i++;
} // end of part to be removed
for (Object x : entities) {
items[i++] = new SelectItem(x, x.toString());
}
return items;
}
显然,我所要做的就是删除这部分?:
if (selectOne) {
items[0] = new SelectItem("", "---");
i++;
}
但是,由于这个静态方法在我的代码中无处不在,它会有任何不想要的后果吗?就像,当用户想要一个空值从
<h:selectOneMenu />
,如果他决定不选择选项。我的猜测是使用<f:selectItem
:
确保#{ugroupController.itemsAvailableSelectOne}
不包含数组或列表中值为null
的项。第一项将是默认选择的选项。
或者,在bean(后)构建期间,使用所需项目的值预置#{usersController.selected.ugroup}
后面的属性。