创建新项目时,用户不希望在Select-One菜单中看到null no selection选项,而是直接看到可用项目中的项目。因此,要么摆脱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 />
:
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
:
答案 0 :(得分:2)
确保#{ugroupController.itemsAvailableSelectOne}
不包含数组或列表中值为null
的项目。第一项将是默认选择的选项。
或者,在bean(post)构造期间,使用所需项目的值预设#{usersController.selected.ugroup}
后面的属性。