【问题标题】:How can I add f:selectItem with the message "select..." to h:selectOneMenu of objects (JSF)? [duplicate]如何将带有消息“select...”的 f:selectItem 添加到 h:selectOneMenu of objects (JSF)? [复制]
【发布时间】:2016-10-07 15:17:52
【问题描述】:

我正在使用JSF 2.2,我希望在用户选择"Seleccione..."message 时不显示下一条alert 消息(图片):

[serverERROR: class javax.faces.component.UpdateModelException 无法将类 java.lang.String 类型的 Seleccione... 转换为类 modelo.entidades.Equipo]

我的 Bean 是:

@ManagedBean
@SessionScoped
public class Bean{

    private String message;
    private Equipo equipoSelected;
    private List<Equipo> equipos;

    public Bean() {
    }

    @PostConstruct
    public void init(){
        message = "Seleccione...";
        equipos = new ArrayList<Equipo>();
        equipos.add(new Equipo(/*....*/));
        equipos.add(new Equipo(/*....*/));
        equipos.add(new Equipo(/*....*/));
        equipoSelected = new Equipo();
    }

    public void updateSelected(){
        //...
    }

    public setMessage(String message){
        this.message = message;
    }

    public String getMessage(){
        return message;
    }

    public void setEquipos(List<Equipo> equipos){
        this.equipos = equipos;
    }

    public List<Equipo> getEquipos(){
        return equipos;
    }
    public void setEquipoSelected(Equipo equipoSelected){
        this.equipoSelected = equipoSelected;
    }

    public Equipo getEquipoSelected(){
        return equipoSelected;
    }



}

xhtml 代码是:

<h:form>
    <h:selectOneMenu value="#{bean.equipoSelected}">
        <f:selectItem itemValue = "#{null}" itemLabel="#{bean.message}"/>
        <f:selectItems value="#{bean.equipos}" var="equipo" itemLabel="#{equipo.name}" itemValue="#{equipo}"/>
        <f:ajax event="change" listener="#{bean.updateSelected}" render="@form" execute="@form"/>
    </h:selectOneMenu>
</h:form>

谢谢!

【问题讨论】:

  • 如果删除行&lt;f:selectItem itemValue = "#{null}" itemLabel="#{bean.message}"/&gt;会怎样?
  • 我猜主要问题是缺少转换器,但你是对的,null 值总是容易出错,所以我也建议用其他东西替换它。

标签: jsf jsf-2 selectonemenu


【解决方案1】:

您在 Java bean 中使用 Equipo 类型的对象,但 JSF 组件只处理字符串。您可以使用转换器解决此问题。这是converters in general 的一个很好的解释。这个StackOverflow question 有专门针对 JSF 的示例(有和没有 PrimeFaces)。

您可能还想采用 OmniFaces 的转换器。那就是添加另一个库,但在那之后,转换器会“自动”为您完成所有工作,而您几乎不需要付出额外的努力。

【讨论】:

    【解决方案2】:

    尝试在标签 f:selectItem 中添加属性 noSelectionOption="true"

    这些其他问题可能对您有所帮助: Best way to add a "nothing selected" option to a selectOneMenu in JSF

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-07-17
      • 1970-01-01
      • 1970-01-01
      • 2022-06-12
      • 2010-10-23
      • 1970-01-01
      • 2022-01-19
      相关资源
      最近更新 更多