3

您好,我在使用以下代码时遇到问题:

<h:selectOneMenu id="selectTipoAutorizacion"
                                                    value="#{autorizacion.codigoTipoAutorizacion}"
                                                    required="true">
                                                    <f:selectItems
                                                        value="#{cc.attrs.controller.getListaTiposAutorizacion(autorizacion)}"
                                                        var="tipoAutorizacion"
                                                        itemLabel="#{tipoAutorizacion.nombreTipoAutorizacion}"
                                                        itemValue="#{tipoAutorizacion.id.codigoTipoAutorizacion}" />

                                                    <a4j:ajax event="change" execute="@this"
         listener = #{myListener.listener}                                                                                      render="selectAutorizador" />
                                                </h:selectOneMenu>

问题是默认选择的值总是标签的第一个。这让用户感到困扰,因为一些数据是根据选定的项目值加载的......但是,直到发生更改事件(a4j:ajax 标签)才会加载该信息,所以现在用户必须选择另一个项目,然后选择上一个以查看默认的项目相关信息。

我通过在开始时加载默认的项目相关信息解决了这个问题,但是用户不喜欢这样。因为它可能会导致混乱。所以问题是......我怎样才能避免这种行为?我想要的是 selectOneMenu 加载一个明确的值(就像没有任何 f:selectItems 一样)。非常感谢。

4

3 回答 3

8

您的字段是必需的,在这种情况下应该没有任何有效的默认值。将一个空的 selectItem 添加到列表顶部selectItems.add(0, new SelectItem("", "")):或者这样:<f:selectItem itemValue="" itemLabel="" /> 默认情况下它会选择空的selectItem。用户将被迫做出选择,因为required="true"不允许空选择。

于 2012-06-20T14:11:26.797 回答
2

在 f:selectItems 之前添加一个 f:selectItem,其值为空,或类似“请选择 ...”,并将其标记为不可选择。

于 2012-06-19T22:10:01.067 回答
2

只需在 bean 的(后)构造函数中预加载所需的数据。

if (codigoTipoAutorizacion != null) {
    // Preload all other desired data as well.
}
于 2012-06-19T21:24:11.627 回答