【问题标题】:JSF Converter for non-persisted entity用于非持久实体的 JSF 转换器
【发布时间】:2013-07-19 03:04:44
【问题描述】:

我有一个JSF转换器,方法如下:

@Override
    public Object getAsObject(FacesContext context, UIComponent component, String value) {

        Actor a = getEjbCasos().getActorByName(value);        
        return a;
    }

这是从 SelectOneMenu 调用的:

<h:selectOneMenu id="actores" value="#{crearCasosBean.currentActor}">
   <f:selectItem noSelectionOption="true"/>
   <f:selectItems value="#{crearCasosBean.actorRows}" var="actor" itemLabel="#{actor.name}" itemValue="#{actor}"/>   
   <f:converter binding="#{actorConverter}"/>
</h:selectOneMenu>

用户可以输入新的演员名称,而不是选择演员,这会创建一个新的演员实体,但不会将其保存到数据库中。然后将此 Actor 名称添加到 actorRows 列表中,以便下次可以选择它。

我遇到的问题是,由于用户创建的 Actor 尚未保存到数据库中,因此当他们选择此 Actor 时,转换器返回 null。我不确定如何告诉转换器这个引用应该与第一个 Actor 相同。

【问题讨论】:

    标签: jsf converter selectonemenu


    【解决方案1】:

    您可以为此使用 OmniFaces SelectItemsConverter。默认情况下,它通过对象的toString() 表示,直接根据&lt;f:selectItems&gt; 中的可用值转换提交的值。因此,如果您可以保证您可以提供唯一的toString() 表示,那么这个转换器就应该这样做。额外的好处是这个转换器根本不会命中数据库。

    将 OmniFaces JAR 放入 web 应用的运行时类路径后,只需

    <h:selectOneMenu ... converter="omnifaces.SelectItemsConverter">
    

    无需任何额外的配置或代码。另见the showcase example

    【讨论】:

      猜你喜欢
      • 2013-06-04
      • 2016-08-08
      • 2011-05-15
      • 2015-11-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-15
      相关资源
      最近更新 更多