如何避免/禁止JSF <h:selectonemenu> null(无选择选项)选项卡?</h:selectonemenu>

时间:2011-07-05 20:10:55

标签: java jsf

创建新项目时,用户不希望在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

     

1 个答案:

答案 0 :(得分:2)

确保#{ugroupController.itemsAvailableSelectOne}不包含数组或列表中值为null的项目。第一项将是默认选择的选项。

或者,在bean(post)构造期间,使用所需项目的值预设#{usersController.selected.ugroup}后面的属性。