在p:selectOneMenu中仅设置实体ID而不是整个实体

时间:2013-06-24 10:06:37

标签: jsf primefaces converter selectonemenu omnifaces

我正在使用JSF 2.1和Tomcat 7.我有以下PrimeFaces选择一个菜单:

<p:selectOneMenu id="idMarcaEdit" 
                 value="#{cfgCentraleController.selMarcaEdit}" 
                 var="p"
                 height="250" 
                 effect="fade"
                 converter="marcaConverter"
                 >
    <f:selectItems value="#{cfgCentraleController.marche}" var="c" itemLabel="#{c.marca}-#{c.modello}-#{c.versione}"  itemValue="#{c}"/>  
    <p:column>
        <h:outputText value="#{p.marca}" />
    </p:column>
    <p:column>
        <h:outputText value="#{p.modello}" />
    </p:column>
    <p:column>
        <h:outputText value="#{p.versione}" />
    </p:column>
    <p:column>
        <h:outputText value="#{p.provisioning}" />
    </p:column>
</p:selectOneMenu>

我在#{cfgCentraleController}

中有这个
private List<Marca> marche;
private Marca selMarcaEdit;

public Marca getSelMarcaEdit() {
    return selMarcaEdit;
}

public void setSelMarcaEdit( Marca selMarcaEdit ) {
    this.selMarcaEdit = selMarcaEdit;
    this.selectedCentrale.setIdRete( this.selMarcaEdit.getIdMarca());
}

public List<Marca> getMarche() {
    return marche;
}

它工作正常,但我不需要提交整个实体。我只需要它的ID。

我正在使用OmniFaces作为转换器:

import org.omnifaces.converter.SelectItemsConverter;

@Override
public String getAsString( FacesContext context, UIComponent component, Object value ) {
    Integer id = (value instanceof Marca) ? ((Marca) value).getIdMarca() : null;
    return (id != null) ? String.valueOf( id ) : null;
}

如何仅获取模型中实体的ID?

1 个答案:

答案 0 :(得分:0)

如果您只需要ID,则只需将ID设置为选择项目值。

更改

<f:selectItems ... itemValue="#{c}" />

<f:selectItems ... itemValue="#{c.idMarca}" />

并更改

private Marca selMarcaEdit;

private Integer selMarcaEdit;

然后您可以从converter删除<p:selectOneMenu>

另见:


更新:此结构中的“自定义布局”菜单无法实现此功能。毕竟,事实证明<p:selectOneMenu var>的价值来自<f:selectItems itemValue>而不是<f:selectItems var>。对不起,我完全没想到。鉴于此,您无法更改模型并摆脱转换器。您应该保持代码不变。你最好的办法是向PF队员发布一个增强请求来改善这种情况。